Loading services/core/java/com/android/server/power/PowerManagerService.java +63 −41 Original line number Diff line number Diff line Loading @@ -241,7 +241,7 @@ public final class PowerManagerService extends SystemService private final Context mContext; private final ServiceThread mHandlerThread; private final PowerManagerHandler mHandler; private final Handler mHandler; private final AmbientDisplayConfiguration mAmbientDisplayConfiguration; private final BatterySaverController mBatterySaverController; private final BatterySaverPolicy mBatterySaverPolicy; Loading @@ -252,6 +252,7 @@ public final class PowerManagerService extends SystemService private final LocalService mLocalService; private final NativeWrapper mNativeWrapper; private final SystemPropertiesWrapper mSystemProperties; private final Clock mClock; private final Injector mInjector; private LightsManager mLightsManager; Loading Loading @@ -597,7 +598,7 @@ public final class PowerManagerService extends SystemService @Override public void onForegroundProfileSwitch(@UserIdInt int newProfileId) throws RemoteException { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); synchronized (mLock) { mForegroundProfile = newProfileId; maybeUpdateForegroundProfileLastActivityLocked(now); Loading Loading @@ -625,11 +626,11 @@ public final class PowerManagerService extends SystemService // Whether profile has been locked last time it timed out. boolean mLockingNotified; public ProfilePowerState(@UserIdInt int userId, long screenOffTimeout) { public ProfilePowerState(@UserIdInt int userId, long screenOffTimeout, long now) { mUserId = userId; mScreenOffTimeout = screenOffTimeout; // Not accurate but at least won't cause immediate locking of the profile. mLastUserActivityTime = SystemClock.uptimeMillis(); mLastUserActivityTime = now; } } Loading Loading @@ -756,6 +757,15 @@ public final class PowerManagerService extends SystemService } } /** Functional interface for providing time. */ @VisibleForTesting interface Clock { /** * Returns current time in milliseconds since boot, not counting time spent in deep sleep. */ long uptimeMillis(); } @VisibleForTesting static class Injector { Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats, Loading Loading @@ -822,6 +832,17 @@ public final class PowerManagerService extends SystemService }; } Clock createClock() { return SystemClock::uptimeMillis; } /** * Handler for asynchronous operations performed by the power manager. */ Handler createHandler(Looper looper, Handler.Callback callback) { return new Handler(looper, callback, true /*async*/); } void invalidateIsInteractiveCaches() { PowerManager.invalidateIsInteractiveCaches(); } Loading Loading @@ -853,12 +874,14 @@ public final class PowerManagerService extends SystemService mLocalService = new LocalService(); mNativeWrapper = injector.createNativeWrapper(); mSystemProperties = injector.createSystemPropertiesWrapper(); mClock = injector.createClock(); mInjector = injector; mHandlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/); mHandlerThread.start(); mHandler = new PowerManagerHandler(mHandlerThread.getLooper()); mHandler = injector.createHandler(mHandlerThread.getLooper(), new PowerManagerHandlerCallback()); mConstants = new Constants(mHandler); mAmbientDisplayConfiguration = mInjector.createAmbientDisplayConfiguration(context); mAmbientDisplaySuppressionController = Loading Loading @@ -1002,7 +1025,7 @@ public final class PowerManagerService extends SystemService incrementBootCount(); } else if (phase == PHASE_BOOT_COMPLETED) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mBootCompleted = true; mDirty |= DIRTY_BOOT_COMPLETED; Loading @@ -1011,7 +1034,7 @@ public final class PowerManagerService extends SystemService now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID); if (sQuiescent) { goToSleepNoUpdateLocked(SystemClock.uptimeMillis(), goToSleepNoUpdateLocked(mClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_QUIESCENT, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, Process.SYSTEM_UID); } Loading Loading @@ -1354,7 +1377,7 @@ public final class PowerManagerService extends SystemService opPackageName = wakeLock.mPackageName; opUid = wakeLock.mOwnerUid; } wakeUpNoUpdateLocked(SystemClock.uptimeMillis(), wakeUpNoUpdateLocked(mClock.uptimeMillis(), PowerManager.WAKE_REASON_APPLICATION, wakeLock.mTag, opUid, opPackageName, opUid); } Loading Loading @@ -1420,7 +1443,7 @@ public final class PowerManagerService extends SystemService private void applyWakeLockFlagsOnReleaseLocked(WakeLock wakeLock) { if ((wakeLock.mFlags & PowerManager.ON_AFTER_RELEASE) != 0 && isScreenLock(wakeLock)) { userActivityNoUpdateLocked(SystemClock.uptimeMillis(), userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_OTHER, PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS, wakeLock.mOwnerUid); Loading Loading @@ -1484,7 +1507,7 @@ public final class PowerManagerService extends SystemService } private void restartNofifyLongTimerLocked(WakeLock wakeLock) { wakeLock.mAcquireTime = SystemClock.uptimeMillis(); wakeLock.mAcquireTime = mClock.uptimeMillis(); if ((wakeLock.mFlags & PowerManager.WAKE_LOCK_LEVEL_MASK) == PowerManager.PARTIAL_WAKE_LOCK && mNotifyLongScheduled == 0) { enqueueNotifyLongMsgLocked(wakeLock.mAcquireTime + MIN_LONG_WAKE_CHECK_INTERVAL); Loading Loading @@ -1569,7 +1592,7 @@ public final class PowerManagerService extends SystemService private void onUserAttention() { synchronized (mLock) { if (userActivityNoUpdateLocked(SystemClock.uptimeMillis(), if (userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_ATTENTION, 0 /* flags */, Process.SYSTEM_UID)) { updatePowerStateLocked(); Loading Loading @@ -1844,7 +1867,7 @@ public final class PowerManagerService extends SystemService * had the system not been told the user was inactive. */ private void logSleepTimeoutRecapturedLocked() { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); final long savedWakeTimeMs = mOverriddenTimeout - now; if (savedWakeTimeMs >= 0) { EventLogTags.writePowerSoftSleepRequested(savedWakeTimeMs); Loading @@ -1867,7 +1890,7 @@ public final class PowerManagerService extends SystemService } if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) { Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, TRACE_SCREEN_ON, 0); final int latencyMs = (int) (SystemClock.uptimeMillis() - mLastWakeTime); final int latencyMs = (int) (mClock.uptimeMillis() - mLastWakeTime); if (latencyMs >= SCREEN_ON_LATENCY_WARNING_MS) { Slog.w(TAG, "Screen on took " + latencyMs + " ms"); } Loading Loading @@ -1903,7 +1926,7 @@ public final class PowerManagerService extends SystemService // Phase 1: Update wakefulness. // Loop because the wake lock and user activity computations are influenced // by changes in wakefulness. final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); int dirtyPhase2 = 0; for (;;) { int dirtyPhase1 = mDirty; Loading Loading @@ -1996,7 +2019,7 @@ public final class PowerManagerService extends SystemService // and it shuts off right away. // Some devices also wake the device when plugged or unplugged because // they don't have a charging LED. final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); if (shouldWakeUpWhenPluggedOrUnpluggedLocked(wasPowered, oldPlugType, dockedOnWirelessCharger)) { wakeUpNoUpdateLocked(now, PowerManager.WAKE_REASON_PLUGGED_IN, Loading Loading @@ -2204,7 +2227,7 @@ public final class PowerManagerService extends SystemService void checkForLongWakeLocks() { synchronized (mLock) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mNotifyLongDispatched = now; final long when = now - MIN_LONG_WAKE_CHECK_INTERVAL; long nextCheckTime = Long.MAX_VALUE; Loading Loading @@ -2533,7 +2556,7 @@ public final class PowerManagerService extends SystemService if (DEBUG_SPEW) { Slog.d(TAG, "updateWakefulnessLocked: Bed time..."); } final long time = SystemClock.uptimeMillis(); final long time = mClock.uptimeMillis(); if (isAttentiveTimeoutExpired(time)) { changed = goToSleepNoUpdateLocked(time, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, Process.SYSTEM_UID); Loading Loading @@ -2568,7 +2591,7 @@ public final class PowerManagerService extends SystemService return false; } long now = SystemClock.uptimeMillis(); long now = mClock.uptimeMillis(); if (isAttentiveTimeoutExpired(now)) { return !isBeingKeptFromInattentiveSleepLocked(); } else { Loading Loading @@ -2699,7 +2722,7 @@ public final class PowerManagerService extends SystemService } // Determine whether the dream should continue. long now = SystemClock.uptimeMillis(); long now = mClock.uptimeMillis(); if (wakefulness == WAKEFULNESS_DREAMING) { if (isDreaming && canDreamLocked()) { if (mDreamsBatteryLevelDrainCutoffConfig >= 0 Loading Loading @@ -2881,7 +2904,7 @@ public final class PowerManagerService extends SystemService private void updateScreenBrightnessBoostLocked(int dirty) { if ((dirty & DIRTY_SCREEN_BRIGHTNESS_BOOST) != 0) { if (mScreenBrightnessBoostInProgress) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mHandler.removeMessages(MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT); if (mLastScreenBrightnessBoostTime > mLastSleepTime) { final long boostTimeout = mLastScreenBrightnessBoostTime + Loading Loading @@ -2968,7 +2991,7 @@ public final class PowerManagerService extends SystemService synchronized (mLock) { mProximityPositive = false; mDirty |= DIRTY_PROXIMITY_POSITIVE; userActivityNoUpdateLocked(SystemClock.uptimeMillis(), userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID); updatePowerStateLocked(); } Loading Loading @@ -3289,7 +3312,8 @@ public final class PowerManagerService extends SystemService if (profile != null) { profile.mScreenOffTimeout = timeMs; } else { mProfilePowerState.put(userId, new ProfilePowerState(userId, timeMs)); mProfilePowerState.put(userId, new ProfilePowerState(userId, timeMs, mClock.uptimeMillis())); // We need to recalculate wake locks for the new profile state. mDirty |= DIRTY_WAKE_LOCKS; } Loading Loading @@ -3646,14 +3670,14 @@ public final class PowerManagerService extends SystemService @VisibleForTesting boolean wasDeviceIdleForInternal(long ms) { synchronized (mLock) { return mLastUserActivityTime + ms < SystemClock.uptimeMillis(); return mLastUserActivityTime + ms < mClock.uptimeMillis(); } } @VisibleForTesting void onUserActivity() { synchronized (mLock) { mLastUserActivityTime = SystemClock.uptimeMillis(); mLastUserActivityTime = mClock.uptimeMillis(); } } Loading @@ -3662,7 +3686,7 @@ public final class PowerManagerService extends SystemService synchronized (mLock) { mForceSuspendActive = true; // Place the system in an non-interactive state goToSleepInternal(SystemClock.uptimeMillis(), goToSleepInternal(mClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_FORCE_SUSPEND, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, uid); Loading Loading @@ -3777,21 +3801,21 @@ public final class PowerManagerService extends SystemService if (mNotifyLongScheduled == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongScheduled, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongScheduled, mClock.uptimeMillis(), pw); } pw.println(); pw.print(" mNotifyLongDispatched="); if (mNotifyLongDispatched == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongDispatched, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongDispatched, mClock.uptimeMillis(), pw); } pw.println(); pw.print(" mNotifyLongNextCheck="); if (mNotifyLongNextCheck == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongNextCheck, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongNextCheck, mClock.uptimeMillis(), pw); } pw.println(); pw.println(" mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)); Loading Loading @@ -4389,15 +4413,11 @@ public final class PowerManagerService extends SystemService }; /** * Handler for asynchronous operations performed by the power manager. * Callback for asynchronous operations performed by the power manager. */ private final class PowerManagerHandler extends Handler { public PowerManagerHandler(Looper looper) { super(looper, null, true /*async*/); } private final class PowerManagerHandlerCallback implements Handler.Callback { @Override public void handleMessage(Message msg) { public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_USER_ACTIVITY_TIMEOUT: handleUserActivityTimeout(); Loading @@ -4415,6 +4435,8 @@ public final class PowerManagerService extends SystemService handleAttentiveTimeout(); break; } return true; } } Loading Loading @@ -4505,7 +4527,7 @@ public final class PowerManagerService extends SystemService } if (mNotifiedAcquired) { sb.append(" ACQ="); TimeUtils.formatDuration(mAcquireTime-SystemClock.uptimeMillis(), sb); TimeUtils.formatDuration(mAcquireTime-mClock.uptimeMillis(), sb); } if (mNotifiedLong) { sb.append(" LONG"); Loading Loading @@ -4817,7 +4839,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void userActivity(long eventTime, int event, int flags) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER) != PackageManager.PERMISSION_GRANTED && mContext.checkCallingOrSelfPermission( Loading Loading @@ -4855,7 +4877,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void wakeUp(long eventTime, @WakeReason int reason, String details, String opPackageName) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading @@ -4873,7 +4895,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void goToSleep(long eventTime, int reason, int flags) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading @@ -4891,7 +4913,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void nap(long eventTime) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading Loading @@ -5286,7 +5308,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void boostScreenBrightness(long eventTime) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +39 −18 Original line number Diff line number Diff line Loading @@ -61,8 +61,8 @@ import android.os.IBinder; import android.os.Looper; import android.os.PowerManager; import android.os.PowerSaveState; import android.os.SystemClock; import android.os.UserHandle; import android.os.test.TestLooper; import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.test.mock.MockContentResolver; Loading @@ -84,6 +84,7 @@ import com.android.server.power.batterysaver.BatterySaverController; import com.android.server.power.batterysaver.BatterySaverPolicy; import com.android.server.power.batterysaver.BatterySaverStateMachine; import com.android.server.power.batterysaver.BatterySavingStats; import com.android.server.testutils.OffsettableClock; import org.junit.After; import org.junit.Before; Loading Loading @@ -132,6 +133,8 @@ public class PowerManagerServiceTest { private BatteryReceiver mBatteryReceiver; private UserSwitchedReceiver mUserSwitchedReceiver; private Resources mResourcesSpy; private OffsettableClock mClock; private TestLooper mTestLooper; private class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> { private final IntentFilter mFilter; Loading Loading @@ -189,6 +192,9 @@ public class PowerManagerServiceTest { Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0); mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); } private PowerManagerService createService() { Loading Loading @@ -249,6 +255,16 @@ public class PowerManagerServiceTest { return mSystemPropertiesMock; } @Override PowerManagerService.Clock createClock() { return () -> mClock.now(); } @Override Handler createHandler(Looper looper, Handler.Callback callback) { return new Handler(mTestLooper.getLooper(), callback); } @Override void invalidateIsInteractiveCaches() { // Avoids an SELinux failure. Loading Loading @@ -297,21 +313,21 @@ public class PowerManagerServiceTest { } private void forceSleep() { mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); } private void forceDream() { mService.getBinderServiceInstance().nap(SystemClock.uptimeMillis()); mService.getBinderServiceInstance().nap(mClock.now()); } private void forceAwake() { mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().wakeUp(mClock.now(), PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name"); } private void forceDozing() { mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); } Loading Loading @@ -341,6 +357,11 @@ public class PowerManagerServiceTest { .thenReturn(minimumScreenOffTimeoutConfigMillis); } private void advanceTime(long timeMs) { mClock.fastForward(timeMs); mTestLooper.dispatchAll(); } @Test public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() { createService(); Loading Loading @@ -403,7 +424,7 @@ public class PowerManagerServiceTest { assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); // Take a nap and verify. mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading Loading @@ -445,7 +466,7 @@ public class PowerManagerServiceTest { createService(); startSystem(); forceSleep(); mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().wakeUp(mClock.now(), PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name"); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } Loading Loading @@ -540,7 +561,7 @@ public class PowerManagerServiceTest { assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); // Take a nap and verify. mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING); } Loading @@ -550,7 +571,7 @@ public class PowerManagerServiceTest { int interval = 1000; createService(); mService.onUserActivity(); SystemClock.sleep(interval + 1 /* just a little more */); advanceTime(interval + 1 /* just a little more */); assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue(); } Loading Loading @@ -678,7 +699,7 @@ public class PowerManagerServiceTest { mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */); when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING); assertFalse(isAcquired[0]); Loading Loading @@ -718,16 +739,16 @@ public class PowerManagerServiceTest { createService(); startSystem(); mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().userActivity(mClock.now(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0); verify(mInattentiveSleepWarningControllerMock, never()).show(); SystemClock.sleep(150); advanceTime(150); verify(mInattentiveSleepWarningControllerMock, times(1)).show(); verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean()); when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true); mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().userActivity(mClock.now(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0); verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true); } Loading @@ -740,10 +761,10 @@ public class PowerManagerServiceTest { createService(); startSystem(); SystemClock.sleep(50); advanceTime(50); verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show(); when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true); SystemClock.sleep(70); advanceTime(70); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); forceAwake(); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); Loading @@ -764,7 +785,7 @@ public class PowerManagerServiceTest { setAttentiveTimeout(5); createService(); startSystem(); SystemClock.sleep(20); advanceTime(20); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading @@ -772,7 +793,7 @@ public class PowerManagerServiceTest { public void testInattentiveSleep_goesToSleepWithWakeLock() throws Exception { final String pkg = mContextSpy.getOpPackageName(); final Binder token = new Binder(); final String tag = "sleep_testWithWakeLock"; final String tag = "testInattentiveSleep_goesToSleepWithWakeLock"; setMinimumScreenOffTimeoutConfig(5); setAttentiveTimeout(30); Loading @@ -783,7 +804,7 @@ public class PowerManagerServiceTest { PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg, null /* workSource */, null /* historyTag */); SystemClock.sleep(60); advanceTime(60); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading tests/utils/testutils/java/android/os/test/TestLooper.java +33 −3 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/com/android/server/power/PowerManagerService.java +63 −41 Original line number Diff line number Diff line Loading @@ -241,7 +241,7 @@ public final class PowerManagerService extends SystemService private final Context mContext; private final ServiceThread mHandlerThread; private final PowerManagerHandler mHandler; private final Handler mHandler; private final AmbientDisplayConfiguration mAmbientDisplayConfiguration; private final BatterySaverController mBatterySaverController; private final BatterySaverPolicy mBatterySaverPolicy; Loading @@ -252,6 +252,7 @@ public final class PowerManagerService extends SystemService private final LocalService mLocalService; private final NativeWrapper mNativeWrapper; private final SystemPropertiesWrapper mSystemProperties; private final Clock mClock; private final Injector mInjector; private LightsManager mLightsManager; Loading Loading @@ -597,7 +598,7 @@ public final class PowerManagerService extends SystemService @Override public void onForegroundProfileSwitch(@UserIdInt int newProfileId) throws RemoteException { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); synchronized (mLock) { mForegroundProfile = newProfileId; maybeUpdateForegroundProfileLastActivityLocked(now); Loading Loading @@ -625,11 +626,11 @@ public final class PowerManagerService extends SystemService // Whether profile has been locked last time it timed out. boolean mLockingNotified; public ProfilePowerState(@UserIdInt int userId, long screenOffTimeout) { public ProfilePowerState(@UserIdInt int userId, long screenOffTimeout, long now) { mUserId = userId; mScreenOffTimeout = screenOffTimeout; // Not accurate but at least won't cause immediate locking of the profile. mLastUserActivityTime = SystemClock.uptimeMillis(); mLastUserActivityTime = now; } } Loading Loading @@ -756,6 +757,15 @@ public final class PowerManagerService extends SystemService } } /** Functional interface for providing time. */ @VisibleForTesting interface Clock { /** * Returns current time in milliseconds since boot, not counting time spent in deep sleep. */ long uptimeMillis(); } @VisibleForTesting static class Injector { Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats, Loading Loading @@ -822,6 +832,17 @@ public final class PowerManagerService extends SystemService }; } Clock createClock() { return SystemClock::uptimeMillis; } /** * Handler for asynchronous operations performed by the power manager. */ Handler createHandler(Looper looper, Handler.Callback callback) { return new Handler(looper, callback, true /*async*/); } void invalidateIsInteractiveCaches() { PowerManager.invalidateIsInteractiveCaches(); } Loading Loading @@ -853,12 +874,14 @@ public final class PowerManagerService extends SystemService mLocalService = new LocalService(); mNativeWrapper = injector.createNativeWrapper(); mSystemProperties = injector.createSystemPropertiesWrapper(); mClock = injector.createClock(); mInjector = injector; mHandlerThread = new ServiceThread(TAG, Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/); mHandlerThread.start(); mHandler = new PowerManagerHandler(mHandlerThread.getLooper()); mHandler = injector.createHandler(mHandlerThread.getLooper(), new PowerManagerHandlerCallback()); mConstants = new Constants(mHandler); mAmbientDisplayConfiguration = mInjector.createAmbientDisplayConfiguration(context); mAmbientDisplaySuppressionController = Loading Loading @@ -1002,7 +1025,7 @@ public final class PowerManagerService extends SystemService incrementBootCount(); } else if (phase == PHASE_BOOT_COMPLETED) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mBootCompleted = true; mDirty |= DIRTY_BOOT_COMPLETED; Loading @@ -1011,7 +1034,7 @@ public final class PowerManagerService extends SystemService now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID); if (sQuiescent) { goToSleepNoUpdateLocked(SystemClock.uptimeMillis(), goToSleepNoUpdateLocked(mClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_QUIESCENT, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, Process.SYSTEM_UID); } Loading Loading @@ -1354,7 +1377,7 @@ public final class PowerManagerService extends SystemService opPackageName = wakeLock.mPackageName; opUid = wakeLock.mOwnerUid; } wakeUpNoUpdateLocked(SystemClock.uptimeMillis(), wakeUpNoUpdateLocked(mClock.uptimeMillis(), PowerManager.WAKE_REASON_APPLICATION, wakeLock.mTag, opUid, opPackageName, opUid); } Loading Loading @@ -1420,7 +1443,7 @@ public final class PowerManagerService extends SystemService private void applyWakeLockFlagsOnReleaseLocked(WakeLock wakeLock) { if ((wakeLock.mFlags & PowerManager.ON_AFTER_RELEASE) != 0 && isScreenLock(wakeLock)) { userActivityNoUpdateLocked(SystemClock.uptimeMillis(), userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_OTHER, PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS, wakeLock.mOwnerUid); Loading Loading @@ -1484,7 +1507,7 @@ public final class PowerManagerService extends SystemService } private void restartNofifyLongTimerLocked(WakeLock wakeLock) { wakeLock.mAcquireTime = SystemClock.uptimeMillis(); wakeLock.mAcquireTime = mClock.uptimeMillis(); if ((wakeLock.mFlags & PowerManager.WAKE_LOCK_LEVEL_MASK) == PowerManager.PARTIAL_WAKE_LOCK && mNotifyLongScheduled == 0) { enqueueNotifyLongMsgLocked(wakeLock.mAcquireTime + MIN_LONG_WAKE_CHECK_INTERVAL); Loading Loading @@ -1569,7 +1592,7 @@ public final class PowerManagerService extends SystemService private void onUserAttention() { synchronized (mLock) { if (userActivityNoUpdateLocked(SystemClock.uptimeMillis(), if (userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_ATTENTION, 0 /* flags */, Process.SYSTEM_UID)) { updatePowerStateLocked(); Loading Loading @@ -1844,7 +1867,7 @@ public final class PowerManagerService extends SystemService * had the system not been told the user was inactive. */ private void logSleepTimeoutRecapturedLocked() { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); final long savedWakeTimeMs = mOverriddenTimeout - now; if (savedWakeTimeMs >= 0) { EventLogTags.writePowerSoftSleepRequested(savedWakeTimeMs); Loading @@ -1867,7 +1890,7 @@ public final class PowerManagerService extends SystemService } if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) { Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, TRACE_SCREEN_ON, 0); final int latencyMs = (int) (SystemClock.uptimeMillis() - mLastWakeTime); final int latencyMs = (int) (mClock.uptimeMillis() - mLastWakeTime); if (latencyMs >= SCREEN_ON_LATENCY_WARNING_MS) { Slog.w(TAG, "Screen on took " + latencyMs + " ms"); } Loading Loading @@ -1903,7 +1926,7 @@ public final class PowerManagerService extends SystemService // Phase 1: Update wakefulness. // Loop because the wake lock and user activity computations are influenced // by changes in wakefulness. final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); int dirtyPhase2 = 0; for (;;) { int dirtyPhase1 = mDirty; Loading Loading @@ -1996,7 +2019,7 @@ public final class PowerManagerService extends SystemService // and it shuts off right away. // Some devices also wake the device when plugged or unplugged because // they don't have a charging LED. final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); if (shouldWakeUpWhenPluggedOrUnpluggedLocked(wasPowered, oldPlugType, dockedOnWirelessCharger)) { wakeUpNoUpdateLocked(now, PowerManager.WAKE_REASON_PLUGGED_IN, Loading Loading @@ -2204,7 +2227,7 @@ public final class PowerManagerService extends SystemService void checkForLongWakeLocks() { synchronized (mLock) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mNotifyLongDispatched = now; final long when = now - MIN_LONG_WAKE_CHECK_INTERVAL; long nextCheckTime = Long.MAX_VALUE; Loading Loading @@ -2533,7 +2556,7 @@ public final class PowerManagerService extends SystemService if (DEBUG_SPEW) { Slog.d(TAG, "updateWakefulnessLocked: Bed time..."); } final long time = SystemClock.uptimeMillis(); final long time = mClock.uptimeMillis(); if (isAttentiveTimeoutExpired(time)) { changed = goToSleepNoUpdateLocked(time, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, Process.SYSTEM_UID); Loading Loading @@ -2568,7 +2591,7 @@ public final class PowerManagerService extends SystemService return false; } long now = SystemClock.uptimeMillis(); long now = mClock.uptimeMillis(); if (isAttentiveTimeoutExpired(now)) { return !isBeingKeptFromInattentiveSleepLocked(); } else { Loading Loading @@ -2699,7 +2722,7 @@ public final class PowerManagerService extends SystemService } // Determine whether the dream should continue. long now = SystemClock.uptimeMillis(); long now = mClock.uptimeMillis(); if (wakefulness == WAKEFULNESS_DREAMING) { if (isDreaming && canDreamLocked()) { if (mDreamsBatteryLevelDrainCutoffConfig >= 0 Loading Loading @@ -2881,7 +2904,7 @@ public final class PowerManagerService extends SystemService private void updateScreenBrightnessBoostLocked(int dirty) { if ((dirty & DIRTY_SCREEN_BRIGHTNESS_BOOST) != 0) { if (mScreenBrightnessBoostInProgress) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); mHandler.removeMessages(MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT); if (mLastScreenBrightnessBoostTime > mLastSleepTime) { final long boostTimeout = mLastScreenBrightnessBoostTime + Loading Loading @@ -2968,7 +2991,7 @@ public final class PowerManagerService extends SystemService synchronized (mLock) { mProximityPositive = false; mDirty |= DIRTY_PROXIMITY_POSITIVE; userActivityNoUpdateLocked(SystemClock.uptimeMillis(), userActivityNoUpdateLocked(mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID); updatePowerStateLocked(); } Loading Loading @@ -3289,7 +3312,8 @@ public final class PowerManagerService extends SystemService if (profile != null) { profile.mScreenOffTimeout = timeMs; } else { mProfilePowerState.put(userId, new ProfilePowerState(userId, timeMs)); mProfilePowerState.put(userId, new ProfilePowerState(userId, timeMs, mClock.uptimeMillis())); // We need to recalculate wake locks for the new profile state. mDirty |= DIRTY_WAKE_LOCKS; } Loading Loading @@ -3646,14 +3670,14 @@ public final class PowerManagerService extends SystemService @VisibleForTesting boolean wasDeviceIdleForInternal(long ms) { synchronized (mLock) { return mLastUserActivityTime + ms < SystemClock.uptimeMillis(); return mLastUserActivityTime + ms < mClock.uptimeMillis(); } } @VisibleForTesting void onUserActivity() { synchronized (mLock) { mLastUserActivityTime = SystemClock.uptimeMillis(); mLastUserActivityTime = mClock.uptimeMillis(); } } Loading @@ -3662,7 +3686,7 @@ public final class PowerManagerService extends SystemService synchronized (mLock) { mForceSuspendActive = true; // Place the system in an non-interactive state goToSleepInternal(SystemClock.uptimeMillis(), goToSleepInternal(mClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_FORCE_SUSPEND, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE, uid); Loading Loading @@ -3777,21 +3801,21 @@ public final class PowerManagerService extends SystemService if (mNotifyLongScheduled == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongScheduled, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongScheduled, mClock.uptimeMillis(), pw); } pw.println(); pw.print(" mNotifyLongDispatched="); if (mNotifyLongDispatched == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongDispatched, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongDispatched, mClock.uptimeMillis(), pw); } pw.println(); pw.print(" mNotifyLongNextCheck="); if (mNotifyLongNextCheck == 0) { pw.print("(none)"); } else { TimeUtils.formatDuration(mNotifyLongNextCheck, SystemClock.uptimeMillis(), pw); TimeUtils.formatDuration(mNotifyLongNextCheck, mClock.uptimeMillis(), pw); } pw.println(); pw.println(" mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)); Loading Loading @@ -4389,15 +4413,11 @@ public final class PowerManagerService extends SystemService }; /** * Handler for asynchronous operations performed by the power manager. * Callback for asynchronous operations performed by the power manager. */ private final class PowerManagerHandler extends Handler { public PowerManagerHandler(Looper looper) { super(looper, null, true /*async*/); } private final class PowerManagerHandlerCallback implements Handler.Callback { @Override public void handleMessage(Message msg) { public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_USER_ACTIVITY_TIMEOUT: handleUserActivityTimeout(); Loading @@ -4415,6 +4435,8 @@ public final class PowerManagerService extends SystemService handleAttentiveTimeout(); break; } return true; } } Loading Loading @@ -4505,7 +4527,7 @@ public final class PowerManagerService extends SystemService } if (mNotifiedAcquired) { sb.append(" ACQ="); TimeUtils.formatDuration(mAcquireTime-SystemClock.uptimeMillis(), sb); TimeUtils.formatDuration(mAcquireTime-mClock.uptimeMillis(), sb); } if (mNotifiedLong) { sb.append(" LONG"); Loading Loading @@ -4817,7 +4839,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void userActivity(long eventTime, int event, int flags) { final long now = SystemClock.uptimeMillis(); final long now = mClock.uptimeMillis(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER) != PackageManager.PERMISSION_GRANTED && mContext.checkCallingOrSelfPermission( Loading Loading @@ -4855,7 +4877,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void wakeUp(long eventTime, @WakeReason int reason, String details, String opPackageName) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading @@ -4873,7 +4895,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void goToSleep(long eventTime, int reason, int flags) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading @@ -4891,7 +4913,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void nap(long eventTime) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading Loading @@ -5286,7 +5308,7 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void boostScreenBrightness(long eventTime) { if (eventTime > SystemClock.uptimeMillis()) { if (eventTime > mClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } Loading
services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +39 −18 Original line number Diff line number Diff line Loading @@ -61,8 +61,8 @@ import android.os.IBinder; import android.os.Looper; import android.os.PowerManager; import android.os.PowerSaveState; import android.os.SystemClock; import android.os.UserHandle; import android.os.test.TestLooper; import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.test.mock.MockContentResolver; Loading @@ -84,6 +84,7 @@ import com.android.server.power.batterysaver.BatterySaverController; import com.android.server.power.batterysaver.BatterySaverPolicy; import com.android.server.power.batterysaver.BatterySaverStateMachine; import com.android.server.power.batterysaver.BatterySavingStats; import com.android.server.testutils.OffsettableClock; import org.junit.After; import org.junit.Before; Loading Loading @@ -132,6 +133,8 @@ public class PowerManagerServiceTest { private BatteryReceiver mBatteryReceiver; private UserSwitchedReceiver mUserSwitchedReceiver; private Resources mResourcesSpy; private OffsettableClock mClock; private TestLooper mTestLooper; private class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> { private final IntentFilter mFilter; Loading Loading @@ -189,6 +192,9 @@ public class PowerManagerServiceTest { Settings.Global.putInt(mContextSpy.getContentResolver(), Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0); mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); } private PowerManagerService createService() { Loading Loading @@ -249,6 +255,16 @@ public class PowerManagerServiceTest { return mSystemPropertiesMock; } @Override PowerManagerService.Clock createClock() { return () -> mClock.now(); } @Override Handler createHandler(Looper looper, Handler.Callback callback) { return new Handler(mTestLooper.getLooper(), callback); } @Override void invalidateIsInteractiveCaches() { // Avoids an SELinux failure. Loading Loading @@ -297,21 +313,21 @@ public class PowerManagerServiceTest { } private void forceSleep() { mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); } private void forceDream() { mService.getBinderServiceInstance().nap(SystemClock.uptimeMillis()); mService.getBinderServiceInstance().nap(mClock.now()); } private void forceAwake() { mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().wakeUp(mClock.now(), PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name"); } private void forceDozing() { mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); } Loading Loading @@ -341,6 +357,11 @@ public class PowerManagerServiceTest { .thenReturn(minimumScreenOffTimeoutConfigMillis); } private void advanceTime(long timeMs) { mClock.fastForward(timeMs); mTestLooper.dispatchAll(); } @Test public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() { createService(); Loading Loading @@ -403,7 +424,7 @@ public class PowerManagerServiceTest { assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); // Take a nap and verify. mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading Loading @@ -445,7 +466,7 @@ public class PowerManagerServiceTest { createService(); startSystem(); forceSleep(); mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().wakeUp(mClock.now(), PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name"); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); } Loading Loading @@ -540,7 +561,7 @@ public class PowerManagerServiceTest { assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); // Take a nap and verify. mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING); } Loading @@ -550,7 +571,7 @@ public class PowerManagerServiceTest { int interval = 1000; createService(); mService.onUserActivity(); SystemClock.sleep(interval + 1 /* just a little more */); advanceTime(interval + 1 /* just a little more */); assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue(); } Loading Loading @@ -678,7 +699,7 @@ public class PowerManagerServiceTest { mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */); when(mDreamManagerInternalMock.isDreaming()).thenReturn(true); mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().goToSleep(mClock.now(), PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING); assertFalse(isAcquired[0]); Loading Loading @@ -718,16 +739,16 @@ public class PowerManagerServiceTest { createService(); startSystem(); mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().userActivity(mClock.now(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0); verify(mInattentiveSleepWarningControllerMock, never()).show(); SystemClock.sleep(150); advanceTime(150); verify(mInattentiveSleepWarningControllerMock, times(1)).show(); verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean()); when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true); mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(), mService.getBinderServiceInstance().userActivity(mClock.now(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0); verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true); } Loading @@ -740,10 +761,10 @@ public class PowerManagerServiceTest { createService(); startSystem(); SystemClock.sleep(50); advanceTime(50); verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show(); when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true); SystemClock.sleep(70); advanceTime(70); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); forceAwake(); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE); Loading @@ -764,7 +785,7 @@ public class PowerManagerServiceTest { setAttentiveTimeout(5); createService(); startSystem(); SystemClock.sleep(20); advanceTime(20); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading @@ -772,7 +793,7 @@ public class PowerManagerServiceTest { public void testInattentiveSleep_goesToSleepWithWakeLock() throws Exception { final String pkg = mContextSpy.getOpPackageName(); final Binder token = new Binder(); final String tag = "sleep_testWithWakeLock"; final String tag = "testInattentiveSleep_goesToSleepWithWakeLock"; setMinimumScreenOffTimeoutConfig(5); setAttentiveTimeout(30); Loading @@ -783,7 +804,7 @@ public class PowerManagerServiceTest { PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg, null /* workSource */, null /* historyTag */); SystemClock.sleep(60); advanceTime(60); assertThat(mService.getWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); } Loading
tests/utils/testutils/java/android/os/test/TestLooper.java +33 −3 File changed.Preview size limit exceeded, changes collapsed. Show changes