diff options
author | Ningyuan Wang <nywang@google.com> | 2017-07-25 13:30:48 -0700 |
---|---|---|
committer | Ningyuan Wang <nywang@google.com> | 2017-07-28 10:00:24 -0700 |
commit | c6e7fd8b76398114980a43c5d90197939c1ddfeb (patch) | |
tree | d4857f212cd2e06acb62184444b619160eeefcb3 /service | |
parent | cbd123b9385eb4319676567051d92947fc911d78 (diff) |
Dump latest unfiltered scan result
Bug: 63810310
Test: compile, unit tests, manual test
Change-Id: I090aaacb00c3a774edd5c353037f2265f3bf138f
Diffstat (limited to 'service')
4 files changed, 60 insertions, 11 deletions
diff --git a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java index 211e62a0d..0fadd804b 100644 --- a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java @@ -27,6 +27,9 @@ import com.android.server.wifi.Clock; import com.android.server.wifi.WifiMonitor; import com.android.server.wifi.WifiNative; +import java.io.FileDescriptor; +import java.io.PrintWriter; + /** * WifiScanner implementation that takes advantage of the gscan HAL API * The gscan API is used to perform background scans and wificond is used for oneshot scans. @@ -151,4 +154,9 @@ public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callb return mWificondScannerDelegate.shouldScheduleBackgroundScanForHwPno(); } } + + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + mWificondScannerDelegate.dump(fd, pw, args); + } } diff --git a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java index e0fb535dd..5281b3abe 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java @@ -26,6 +26,8 @@ import com.android.server.wifi.WifiInjector; import com.android.server.wifi.WifiMonitor; import com.android.server.wifi.WifiNative; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.Comparator; /** @@ -158,4 +160,6 @@ public abstract class WifiScannerImpl { * @return true if background scan needs to be started, false otherwise. */ public abstract boolean shouldScheduleBackgroundScanForHwPno(); + + protected abstract void dump(FileDescriptor fd, PrintWriter pw, String[] args); } diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java index af874b9e2..ab2a5dca3 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java @@ -2156,6 +2156,9 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { } pw.println(); } + if (mScannerImpl != null) { + mScannerImpl.dump(fd, pw, args); + } } void logScanRequest(String request, ClientInfo ci, int id, WorkSource workSource, diff --git a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java index fd7fddb73..84105ee61 100644 --- a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java @@ -32,6 +32,8 @@ import com.android.server.wifi.WifiMonitor; import com.android.server.wifi.WifiNative; import com.android.server.wifi.scanner.ChannelHelper.ChannelCollection; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -81,6 +83,7 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call private boolean mBackgroundScanPaused = false; private ScanBuffer mBackgroundScanBuffer = new ScanBuffer(SCAN_BUFFER_CAPACITY); + private ArrayList<ScanDetail> mNativeScanResults; private WifiScanner.ScanData mLatestSingleScanResult = new WifiScanner.ScanData(0, 0, new ScanResult[0]); @@ -535,11 +538,11 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call // got a scan before we started scanning or after scan was canceled return; } - ArrayList<ScanDetail> nativeResults = mWifiNative.getScanResults(); + mNativeScanResults = mWifiNative.getScanResults(); List<ScanResult> hwPnoScanResults = new ArrayList<>(); int numFilteredScanResults = 0; - for (int i = 0; i < nativeResults.size(); ++i) { - ScanResult result = nativeResults.get(i).getScanResult(); + for (int i = 0; i < mNativeScanResults.size(); ++i) { + ScanResult result = mNativeScanResults.get(i).getScanResult(); long timestamp_ms = result.timestamp / 1000; // convert us -> ms if (timestamp_ms > mLastScanSettings.startTime) { if (mLastScanSettings.hwPnoScanActive) { @@ -556,11 +559,8 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call if (mLastScanSettings.hwPnoScanActive && mLastScanSettings.pnoScanEventHandler != null) { - ScanResult[] pnoScanResultsArray = new ScanResult[hwPnoScanResults.size()]; - for (int i = 0; i < pnoScanResultsArray.length; ++i) { - ScanResult result = nativeResults.get(i).getScanResult(); - pnoScanResultsArray[i] = hwPnoScanResults.get(i); - } + ScanResult[] pnoScanResultsArray = + hwPnoScanResults.toArray(new ScanResult[hwPnoScanResults.size()]); mLastScanSettings.pnoScanEventHandler.onPnoNetworkFound(pnoScanResultsArray); } // On pno scan result event, we are expecting a mLastScanSettings for pno scan. @@ -598,12 +598,12 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call } if (DBG) Log.d(TAG, "Polling scan data for scan: " + mLastScanSettings.scanId); - ArrayList<ScanDetail> nativeResults = mWifiNative.getScanResults(); + mNativeScanResults = mWifiNative.getScanResults(); List<ScanResult> singleScanResults = new ArrayList<>(); List<ScanResult> backgroundScanResults = new ArrayList<>(); int numFilteredScanResults = 0; - for (int i = 0; i < nativeResults.size(); ++i) { - ScanResult result = nativeResults.get(i).getScanResult(); + for (int i = 0; i < mNativeScanResults.size(); ++i) { + ScanResult result = mNativeScanResults.get(i).getScanResult(); long timestamp_ms = result.timestamp / 1000; // convert us -> ms if (timestamp_ms > mLastScanSettings.startTime) { if (mLastScanSettings.backgroundScanActive) { @@ -772,6 +772,40 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call return false; } + @Override + protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + synchronized (mSettingsLock) { + pw.println("Latest native scan results:"); + if (mNativeScanResults != null && mNativeScanResults.size() != 0) { + long nowMs = mClock.getElapsedSinceBootMillis(); + pw.println(" BSSID Frequency RSSI Age(sec) SSID " + + " Flags"); + for (ScanDetail scanDetail : mNativeScanResults) { + ScanResult r = scanDetail.getScanResult(); + long timeStampMs = r.timestamp / 1000; + String age; + if (timeStampMs <= 0) { + age = "___?___"; + } else if (nowMs < timeStampMs) { + age = " 0.000"; + } else if (timeStampMs < nowMs - 1000000) { + age = ">1000.0"; + } else { + age = String.format("%3.3f", (nowMs - timeStampMs) / 1000.0); + } + String ssid = r.SSID == null ? "" : r.SSID; + pw.printf(" %17s %9d %5d %7s %-32s %s\n", + r.BSSID, + r.frequency, + r.level, + age, + String.format("%1.32s", ssid), + r.capabilities); + } + } + } + } + private static class LastScanSettings { public long startTime; |