diff options
author | Randy Pan <zpan@google.com> | 2016-04-26 11:24:50 -0700 |
---|---|---|
committer | Randy Pan <zpan@google.com> | 2016-04-26 16:19:11 -0700 |
commit | c8a21e495dfaa5c44e87fda330621a1ed6c8aace (patch) | |
tree | 635cca3b91bbbaf98cdaf84a9544a7f194901f89 | |
parent | f6807b2f28848838d60aef1c9563c79e15cd7519 (diff) |
WifiConnectivityManager: Run AlarmManager on WifiStateMachine thread
With WifiScanner also running on the WifiStateMachine thread,
WifiConnectivityManager is now exectued on a single thread context.
While there, fixed a few checkstyle issues.
Bug: 28369823
Change-Id: Ibf2b65be42d243deb61a68380a9011f4acc663b4
3 files changed, 18 insertions, 10 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 9b1eeacb5..80e04fbdf 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -29,6 +29,8 @@ import android.net.wifi.WifiManager; import android.net.wifi.WifiScanner; import android.net.wifi.WifiScanner.PnoSettings; import android.net.wifi.WifiScanner.ScanSettings; +import android.os.Handler; +import android.os.Looper; import android.util.LocalLog; import android.util.Log; @@ -99,6 +101,7 @@ public class WifiConnectivityManager { private final WifiQualifiedNetworkSelector mQualifiedNetworkSelector; private final WifiLastResortWatchdog mWifiLastResortWatchdog; private final AlarmManager mAlarmManager; + private final Handler mEventHandler; private final Clock mClock; private final LocalLog mLocalLog = new LocalLog(ActivityManager.isLowRamDeviceStatic() ? 1024 : 16384); @@ -378,7 +381,7 @@ public class WifiConnectivityManager { public WifiConnectivityManager(Context context, WifiStateMachine stateMachine, WifiScanner scanner, WifiConfigManager configManager, WifiInfo wifiInfo, WifiQualifiedNetworkSelector qualifiedNetworkSelector, - WifiInjector wifiInjector) { + WifiInjector wifiInjector, Looper looper) { mStateMachine = stateMachine; mScanner = scanner; mConfigManager = configManager; @@ -386,6 +389,7 @@ public class WifiConnectivityManager { mQualifiedNetworkSelector = qualifiedNetworkSelector; mWifiLastResortWatchdog = wifiInjector.getWifiLastResortWatchdog(); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + mEventHandler = new Handler(looper); mClock = wifiInjector.getClock(); mConnectionAttemptTimeStamps = new LinkedList<>(); @@ -419,10 +423,10 @@ public class WifiConnectivityManager { private boolean shouldSkipConnectionAttempt(Long currentTimeMillis) { Iterator<Long> attemptIter = mConnectionAttemptTimeStamps.iterator(); // First evict old entries from the queue. - while(attemptIter.hasNext()) { + while (attemptIter.hasNext()) { Long connectionAttemptTimeMillis = attemptIter.next(); - if ((currentTimeMillis - connectionAttemptTimeMillis) > - MAX_CONNECTION_ATTEMPTS_TIME_INTERVAL_MS) { + if ((currentTimeMillis - connectionAttemptTimeMillis) + > MAX_CONNECTION_ATTEMPTS_TIME_INTERVAL_MS) { attemptIter.remove(); } else { // This list is sorted by timestamps, so we can skip any more checks @@ -672,7 +676,7 @@ public class WifiConnectivityManager { mAlarmManager.set(AlarmManager.RTC_WAKEUP, mClock.currentTimeMillis() + WATCHDOG_INTERVAL_MS, "WifiConnectivityManager Schedule Watchdog Timer", - mWatchdogListener, null); + mWatchdogListener, mEventHandler); } // Set up periodic scan timer @@ -680,7 +684,7 @@ public class WifiConnectivityManager { mAlarmManager.set(AlarmManager.RTC_WAKEUP, mClock.currentTimeMillis() + PERIODIC_SCAN_INTERVAL_MS, "WifiConnectivityManager Schedule Periodic Scan Timer", - mPeriodicScanTimerListener, null); + mPeriodicScanTimerListener, mEventHandler); } // Set up timer to start a delayed single scan after RESTART_SCAN_DELAY_MS @@ -690,7 +694,7 @@ public class WifiConnectivityManager { mAlarmManager.set(AlarmManager.RTC_WAKEUP, mClock.currentTimeMillis() + RESTART_SCAN_DELAY_MS, "WifiConnectivityManager Restart Single Scan", - mRestartSingleScanListener, null); + mRestartSingleScanListener, mEventHandler); } // Set up timer to start a delayed scan after RESTART_SCAN_DELAY_MS @@ -700,7 +704,7 @@ public class WifiConnectivityManager { mAlarmManager.set(AlarmManager.RTC_WAKEUP, mClock.currentTimeMillis() + RESTART_SCAN_DELAY_MS, "WifiConnectivityManager Restart Scan", - mRestartScanListener, null); + mRestartScanListener, mEventHandler); } diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index ef93801c4..869a09f43 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -4674,7 +4674,8 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss mWifiConnectivityManager = new WifiConnectivityManager(mContext, WifiStateMachine.this, mWifiScanner, mWifiConfigManager, mWifiInfo, - mWifiQualifiedNetworkSelector, mWifiInjector); + mWifiQualifiedNetworkSelector, mWifiInjector, + getHandler().getLooper()); } mWifiLogger.startLogging(DBG); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index b3a9b175c..a8784a45c 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -33,6 +33,7 @@ import android.net.wifi.WifiScanner.PnoScanListener; import android.net.wifi.WifiScanner.PnoSettings; import android.net.wifi.WifiScanner.ScanListener; import android.net.wifi.WifiScanner.ScanSettings; +import android.os.Looper; import android.os.WorkSource; import android.test.suitebuilder.annotation.SmallTest; @@ -69,7 +70,8 @@ public class WifiConnectivityManagerTest { mWifiScanner = mockWifiScanner(); mWifiQNS = mockWifiQualifiedNetworkSelector(); mWifiConnectivityManager = new WifiConnectivityManager(mContext, mWifiStateMachine, - mWifiScanner, mWifiConfigManager, mWifiInfo, mWifiQNS, mWifiInjector); + mWifiScanner, mWifiConfigManager, mWifiInfo, mWifiQNS, mWifiInjector, + mLooper.getLooper()); mWifiConnectivityManager.setWifiEnabled(true); when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis()); } @@ -85,6 +87,7 @@ public class WifiConnectivityManagerTest { private Resources mResource; private Context mContext; private AlarmManager mAlarmManager; + private MockLooper mLooper = new MockLooper(); private WifiConnectivityManager mWifiConnectivityManager; private WifiQualifiedNetworkSelector mWifiQNS; private WifiStateMachine mWifiStateMachine; |