summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Wills <mwills@google.com>2016-03-22 14:57:49 -0700
committerMitchell Wills <mwills@google.com>2016-03-22 16:53:50 -0700
commit4e54617758f86acef751bc8588257a58ed985b0f (patch)
treeeb1c1b5129fc5a1f669dce1fb634b111ab65b69d
parent361c13b35fb024d87176e423619e3bfe8e6bdc38 (diff)
Move scan filtering to a common utility class
This way single scans don't depend on the background scan scheduler Bug: 27506257 Change-Id: I7130302b364cc86e3a8f1cd0a168e0068c29953b
-rw-r--r--service/java/com/android/server/wifi/WifiScanningServiceImpl.java10
-rw-r--r--service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java32
-rw-r--r--service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java50
-rw-r--r--tests/wifitests/src/com/android/server/wifi/scanner/ScanScheduleUtilFilterTest.java (renamed from tests/wifitests/src/com/android/server/wifi/scanner/BackgroundScanSchedulerFilterTest.java)114
4 files changed, 92 insertions, 114 deletions
diff --git a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
index 72ca9d898..0488e5540 100644
--- a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
@@ -607,16 +607,14 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
clientHandlers.clear();
}
- // TODO fix shouldReport checks
- // currently these checks work because the shouldReport methods don't yet rely on the
- // internal state of the scheduler.
void reportFullScanResult(ScanResult result) {
for (Map.Entry<Pair<ClientInfo, Integer>, ScanSettings> entry
: mActiveScans.entrySet()) {
ClientInfo ci = entry.getKey().first;
int handler = entry.getKey().second;
ScanSettings settings = entry.getValue();
- if (mScheduler.shouldReportFullScanResultForSettings(result, settings)) {
+ if (ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
+ result, settings)) {
ci.sendMessage(WifiScanner.CMD_FULL_SCAN_RESULT, 0, handler, result);
}
}
@@ -629,8 +627,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
int handler = entry.getKey().second;
ScanSettings settings = entry.getValue();
ScanData[] resultsArray = new ScanData[] {results};
- ScanData[] resultsToDeliver =
- mScheduler.filterResultsForSettings(resultsArray, settings);
+ ScanData[] resultsToDeliver = ScanScheduleUtil.filterResultsForSettings(
+ mChannelHelper, resultsArray, settings);
WifiScanner.ParcelableScanData parcelableScanData =
new WifiScanner.ParcelableScanData(resultsToDeliver);
logCallback("singleScanResults", ci, handler);
diff --git a/service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java b/service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java
index 1a6569fc8..d7362cd3d 100644
--- a/service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java
+++ b/service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java
@@ -326,7 +326,8 @@ public class BackgroundScanScheduler {
*/
public boolean shouldReportFullScanResultForSettings(@NonNull ScanResult result,
@NonNull ScanSettings settings) {
- return mChannelHelper.settingsContainChannel(settings, result.frequency);
+ return ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
+ result, settings);
}
/**
@@ -335,34 +336,7 @@ public class BackgroundScanScheduler {
*/
public @Nullable ScanData[] filterResultsForSettings(@NonNull ScanData[] scanDatas,
@NonNull ScanSettings settings) {
- ArrayList<ScanData> filteredScanDatas = new ArrayList<>(scanDatas.length);
- ArrayList<ScanResult> filteredResults = new ArrayList<>();
- for (ScanData scanData : scanDatas) {
- filteredResults.clear();
- for (ScanResult scanResult : scanData.getResults()) {
- if (mChannelHelper.settingsContainChannel(settings, scanResult.frequency)) {
- filteredResults.add(scanResult);
- }
- if (settings.numBssidsPerScan > 0
- && filteredResults.size() >= settings.numBssidsPerScan) {
- break;
- }
- }
- // TODO correctly note if scan results may be incomplete
- if (filteredResults.size() == scanData.getResults().length) {
- filteredScanDatas.add(scanData);
- } else if (filteredResults.size() > 0) {
- filteredScanDatas.add(new WifiScanner.ScanData(scanData.getId(),
- scanData.getFlags(),
- filteredResults.toArray(
- new ScanResult[filteredResults.size()])));
- }
- }
- if (filteredScanDatas.size() == 0) {
- return null;
- } else {
- return filteredScanDatas.toArray(new ScanData[filteredScanDatas.size()]);
- }
+ return ScanScheduleUtil.filterResultsForSettings(mChannelHelper, scanDatas, settings);
}
// creates a schedule for the given buckets and requests
diff --git a/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java b/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
index 734a190ef..aa0228ac6 100644
--- a/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
+++ b/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
@@ -17,9 +17,15 @@
package com.android.server.wifi.scanner;
import android.annotation.Nullable;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiScanner.ScanData;
+import android.net.wifi.WifiScanner.ScanSettings;
import com.android.server.wifi.WifiNative;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* A class with utilities for dealing with scan schedules.
*/
@@ -83,4 +89,48 @@ public class ScanScheduleUtil {
return true;
}
+
+ /**
+ * Returns true if the given scan result should be reported to a listener with the given
+ * settings.
+ */
+ public static boolean shouldReportFullScanResultForSettings(ChannelHelper channelHelper,
+ ScanResult result, ScanSettings settings) {
+ return channelHelper.settingsContainChannel(settings, result.frequency);
+ }
+
+ /**
+ * Returns a filtered version of the scan results from the chip that represents only the data
+ * requested in the settings. Will return null if the result should not be reported.
+ */
+ public static ScanData[] filterResultsForSettings(ChannelHelper channelHelper,
+ ScanData[] scanDatas, ScanSettings settings) {
+ List<ScanData> filteredScanDatas = new ArrayList<>(scanDatas.length);
+ List<ScanResult> filteredResults = new ArrayList<>();
+ for (ScanData scanData : scanDatas) {
+ filteredResults.clear();
+ for (ScanResult scanResult : scanData.getResults()) {
+ if (channelHelper.settingsContainChannel(settings, scanResult.frequency)) {
+ filteredResults.add(scanResult);
+ }
+ if (settings.numBssidsPerScan > 0
+ && filteredResults.size() >= settings.numBssidsPerScan) {
+ break;
+ }
+ }
+ if (filteredResults.size() == scanData.getResults().length) {
+ filteredScanDatas.add(scanData);
+ } else if (filteredResults.size() > 0) {
+ filteredScanDatas.add(new ScanData(scanData.getId(),
+ scanData.getFlags(),
+ filteredResults.toArray(
+ new ScanResult[filteredResults.size()])));
+ }
+ }
+ if (filteredScanDatas.size() == 0) {
+ return null;
+ } else {
+ return filteredScanDatas.toArray(new ScanData[filteredScanDatas.size()]);
+ }
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/BackgroundScanSchedulerFilterTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/ScanScheduleUtilFilterTest.java
index 65fe7bd7c..fb93cee81 100644
--- a/tests/wifitests/src/com/android/server/wifi/scanner/BackgroundScanSchedulerFilterTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/scanner/ScanScheduleUtilFilterTest.java
@@ -26,51 +26,30 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.validateMockitoUsage;
import android.net.wifi.WifiScanner;
import android.net.wifi.WifiScanner.ScanData;
import android.net.wifi.WifiScanner.ScanSettings;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.server.wifi.WifiNative;
-
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import java.util.Collection;
-import java.util.Collections;
-
/**
* Unit tests for filtering of scan results in
- * {@link com.android.server.wifi.scanner.BackgroundScanScheduler}.
+ * {@link com.android.server.wifi.scanner.ScanScheduleUtil}.
*/
@SmallTest
-public class BackgroundScanSchedulerFilterTest {
-
- private static final int DEFAULT_MAX_BUCKETS = 8;
- private static final int DEFAULT_MAX_CHANNELS = 8;
- private static final int DEFAULT_MAX_BATCH = 10;
+public class ScanScheduleUtilFilterTest {
- private WifiNative mWifiNative;
- private BackgroundScanScheduler mScheduler;
+ private ChannelHelper mChannelHelper;
@Before
public void setUp() throws Exception {
- ChannelHelper channelHelper = new PresetKnownBandsChannelHelper(
+ mChannelHelper = new PresetKnownBandsChannelHelper(
new int[]{2400, 2450},
new int[]{5150, 5175},
new int[]{5600, 5650});
- mScheduler = new BackgroundScanScheduler(channelHelper);
- mScheduler.setMaxBuckets(DEFAULT_MAX_BUCKETS);
- mScheduler.setMaxChannels(DEFAULT_MAX_CHANNELS);
- mScheduler.setMaxBatch(DEFAULT_MAX_BATCH);
- }
-
- @After
- public void cleanup() {
- validateMockitoUsage();
}
@Test
@@ -79,11 +58,9 @@ public class BackgroundScanSchedulerFilterTest {
WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- assertTrue(mScheduler.shouldReportFullScanResultForSettings(
- createScanResult(2400), settings));
+ assertTrue(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
+ createScanResult(2400), settings));
}
@Test
@@ -92,10 +69,8 @@ public class BackgroundScanSchedulerFilterTest {
WifiScanner.WIFI_BAND_24_GHZ, 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- assertFalse(mScheduler.shouldReportFullScanResultForSettings(
+ assertFalse(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
createScanResult(5150), settings));
}
@@ -105,10 +80,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- assertTrue(mScheduler.shouldReportFullScanResultForSettings(
+ assertTrue(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
createScanResult(2400), settings));
}
@@ -118,10 +91,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- assertFalse(mScheduler.shouldReportFullScanResultForSettings(
+ assertFalse(ScanScheduleUtil.shouldReportFullScanResultForSettings(mChannelHelper,
createScanResult(5175), settings));
}
@@ -131,10 +102,9 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(new ScanData[0], settings);
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
+ new ScanData[0], settings);
assertScanDataFreqsEquals(null, results);
}
@@ -144,10 +114,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
createScanDatas(new int[][]{ { 2450 } }), settings);
assertScanDataFreqsEquals(null, results);
}
@@ -158,10 +126,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
createScanDatas(new int[][]{ { 2400 } }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400 } }, results);
@@ -173,10 +139,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 } }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 } }, results);
@@ -188,10 +152,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
createScanDatas(new int[][]{ { 2450 }, { 2450, 5175 } }), settings);
assertScanDataFreqsEquals(null, results);
}
@@ -202,10 +164,8 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
createScanDatas(new int[][]{ { 2400 }, {2400, 5150} }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400 }, {2400, 5150} }, results);
@@ -217,11 +177,10 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
- new int[][]{ { 2400, 2450, 5150, 5175 }, { 2400, 2450, 5175 } }), settings);
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
+ createScanDatas(new int[][]{ { 2400, 2450, 5150, 5175 }, { 2400, 2450, 5175 } }),
+ settings);
assertScanDataFreqsEquals(new int[][]{ { 2400, 5150 }, { 2400 } }, results);
}
@@ -232,13 +191,12 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
- new int[][]{ { 2400, 2450, 5150, 5175, 2400 },
- { 2400, 2450, 5175 },
- { 5175, 5175, 5150 } }), settings);
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
+ createScanDatas(new int[][]{
+ { 2400, 2450, 5150, 5175, 2400 },
+ { 2400, 2450, 5175 },
+ { 5175, 5175, 5150 } }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 2400 }, { 5150 } }, results);
}
@@ -249,13 +207,12 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 20,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
- new int[][]{ { 2400, 2450, 5150, 5175, 2400 },
- { 5175 },
- { 5175, 5175, 5150 } }), settings);
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
+ createScanDatas(new int[][]{
+ { 2400, 2450, 5150, 5175, 2400 },
+ { 5175 },
+ { 5175, 5175, 5150 } }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150 } }, results);
}
@@ -266,20 +223,19 @@ public class BackgroundScanSchedulerFilterTest {
channelsToSpec(2400, 5150), 30000, 0, 3,
WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
);
- Collection<ScanSettings> requests = Collections.singleton(settings);
- mScheduler.updateSchedule(requests);
- ScanData[] results = mScheduler.filterResultsForSettings(createScanDatas(
- new int[][]{ { 2400, 2450, 5150, 5175, 2400, 2400},
- { 5175 },
- { 5175, 5175, 5150, 2400, 2400, 5150 } }), settings);
+ ScanData[] results = ScanScheduleUtil.filterResultsForSettings(mChannelHelper,
+ createScanDatas(new int[][]{
+ { 2400, 2450, 5150, 5175, 2400, 2400},
+ { 5175 },
+ { 5175, 5175, 5150, 2400, 2400, 5150 } }), settings);
assertScanDataFreqsEquals(new int[][]{ { 2400, 5150, 2400 }, { 5150, 2400, 2400 } },
results);
}
- public static void assertScanDataFreqsEquals(int[][] expected, ScanData[] results) {
+ private static void assertScanDataFreqsEquals(int[][] expected, ScanData[] results) {
if (expected == null) {
assertNull(results);
} else {