diff options
author | Mitchell Wills <mwills@google.com> | 2016-03-22 14:57:49 -0700 |
---|---|---|
committer | Mitchell Wills <mwills@google.com> | 2016-03-22 16:53:50 -0700 |
commit | 4e54617758f86acef751bc8588257a58ed985b0f (patch) | |
tree | eb1c1b5129fc5a1f669dce1fb634b111ab65b69d | |
parent | 361c13b35fb024d87176e423619e3bfe8e6bdc38 (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.java | 10 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/scanner/BackgroundScanScheduler.java | 32 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java | 50 | ||||
-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 { |