Loading services/java/com/android/server/power/PowerManagerService.java +59 −92 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ import com.android.internal.app.IBatteryStats; import com.android.server.BatteryService; import com.android.server.EventLogTags; import com.android.server.LightsService; import com.android.server.LightsService.Light; import com.android.server.Watchdog; import com.android.server.Watchdog.Monitor; import com.android.server.am.BatteryStatsService; import android.app.ActivityManagerNative; Loading Loading @@ -67,7 +65,6 @@ import static android.view.WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR; import static android.provider.Settings.System.DIM_SCREEN; import static android.provider.Settings.System.SCREEN_BRIGHTNESS; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; import static android.provider.Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN; Loading @@ -89,20 +86,21 @@ public class PowerManagerService extends IPowerManager.Stub private static final String TAG = "PowerManagerService"; static final String PARTIAL_NAME = "PowerManagerService"; // could be either static or controllable at runtime private static final boolean DEBUG = false; private static final boolean DEBUG_PROXIMITY_SENSOR = (false || DEBUG); private static final boolean DEBUG_LIGHT_SENSOR = (false || DEBUG); private static final boolean DEBUG_LIGHT_ANIMATION = (false || DEBUG); private static final boolean DEBUG_SCREEN_ON = false; // Wake lock that ensures that the CPU is running. The screen might not be on. private static final int PARTIAL_WAKE_LOCK_ID = 1; // Wake lock that ensures that the screen is on. private static final int FULL_WAKE_LOCK_ID = 2; static final boolean DEBUG_SCREEN_ON = false; private static final boolean LOG_PARTIAL_WL = false; // Indicates whether touch-down cycles should be logged as part of the // LOG_POWER_SCREEN_STATE log events private static final boolean LOG_TOUCH_DOWNS = true; private static final int LOCK_MASK = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.SCREEN_BRIGHT_WAKE_LOCK Loading Loading @@ -301,17 +299,6 @@ public class PowerManagerService extends IPowerManager.Stub private static final int ANIM_SETTING_ON = 0x01; private static final int ANIM_SETTING_OFF = 0x10; // Used when logging number and duration of touch-down cycles private long mTotalTouchDownTime; private long mLastTouchDown; private int mTouchCycles; // could be either static or controllable at runtime private static final boolean mSpew = false; private static final boolean mDebugProximitySensor = (false || mSpew); private static final boolean mDebugLightSensor = (false || mSpew); private static final boolean mDebugLightAnimation = (false || mSpew); private native void nativeInit(); private native void nativeSetPowerState(boolean screenOn, boolean screenBright); private native void nativeStartSurfaceFlingerAnimation(int mode); Loading Loading @@ -855,7 +842,7 @@ public class PowerManagerService extends IPowerManager.Stub public void acquireWakeLockLocked(int flags, IBinder lock, int uid, int pid, String tag, WorkSource ws) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "acquireWakeLock flags=0x" + Integer.toHexString(flags) + " tag=" + tag); } Loading Loading @@ -944,7 +931,7 @@ public class PowerManagerService extends IPowerManager.Stub mProximitySensorActive = false; } if (mSpew) { if (DEBUG) { Slog.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState) + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState) Loading @@ -952,7 +939,7 @@ public class PowerManagerService extends IPowerManager.Stub + Integer.toHexString(oldWakeLockState)); } } else { if (mSpew) { if (DEBUG) { Slog.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState) + " mLocks.gatherState()=0x" + Integer.toHexString(mLocks.gatherState()) Loading @@ -967,7 +954,9 @@ public class PowerManagerService extends IPowerManager.Stub if (newlock) { mPartialCount++; if (mPartialCount == 1) { if (LOG_PARTIAL_WL) EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 1, tag); if (LOG_PARTIAL_WL) { EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 1, tag); } } } nativeAcquireWakeLock(PARTIAL_WAKE_LOCK_ID, PARTIAL_NAME); Loading Loading @@ -1022,7 +1011,7 @@ public class PowerManagerService extends IPowerManager.Stub return; } if (mSpew) { if (DEBUG) { Slog.d(TAG, "releaseWakeLock flags=0x" + Integer.toHexString(wl.flags) + " tag=" + wl.tag); } Loading @@ -1034,7 +1023,7 @@ public class PowerManagerService extends IPowerManager.Stub if (mProximitySensorActive && ((flags & PowerManager.WAIT_FOR_PROXIMITY_NEGATIVE) != 0)) { // wait for proximity sensor to go negative before disabling sensor if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "waiting for proximity sensor to go negative"); } } else { Loading @@ -1053,7 +1042,9 @@ public class PowerManagerService extends IPowerManager.Stub else if ((wl.flags & LOCK_MASK) == PowerManager.PARTIAL_WAKE_LOCK) { mPartialCount--; if (mPartialCount == 0) { if (LOG_PARTIAL_WL) EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 0, wl.tag); if (LOG_PARTIAL_WL) { EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 0, wl.tag); } nativeReleaseWakeLock(PARTIAL_NAME); } } Loading Loading @@ -1338,7 +1329,7 @@ public class PowerManagerService extends IPowerManager.Stub nextState = SCREEN_BRIGHT; } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "setTimeoutLocked now=" + now + " timeoutOverride=" + timeoutOverride + " nextState=" + nextState + " when=" + when); Loading Loading @@ -1368,7 +1359,7 @@ public class PowerManagerService extends IPowerManager.Stub public void run() { synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "user activity timeout timed out nextState=" + this.nextState); } Loading Loading @@ -1523,7 +1514,7 @@ public class PowerManagerService extends IPowerManager.Stub // ignore it } if (mSpew) { if (DEBUG) { Slog.d(TAG, "mBroadcastWakeLock=" + mBroadcastWakeLock); } if (mContext != null && ActivityManagerNative.isSystemReady()) { Loading Loading @@ -1590,23 +1581,6 @@ public class PowerManagerService extends IPowerManager.Stub } }; void logPointerUpEvent() { if (LOG_TOUCH_DOWNS) { mTotalTouchDownTime += SystemClock.elapsedRealtime() - mLastTouchDown; mLastTouchDown = 0; } } void logPointerDownEvent() { if (LOG_TOUCH_DOWNS) { // If we are not already timing a down/up sequence if (mLastTouchDown == 0) { mLastTouchDown = SystemClock.elapsedRealtime(); mTouchCycles++; } } } /** * Prevents the screen from turning on even if it *should* turn on due * to a subsequent full wake lock being acquired. Loading Loading @@ -1668,7 +1642,7 @@ public class PowerManagerService extends IPowerManager.Stub // handles the case where the screen is currently off because of // a prior preventScreenOn(true) call.) if (!mProximitySensorActive && (mPowerState & SCREEN_ON_BIT) != 0) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "preventScreenOn: turning on after a prior preventScreenOn(true)!"); } Loading @@ -1688,7 +1662,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setScreenBrightnessOverride(int brightness) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); if (mSpew) Slog.d(TAG, "setScreenBrightnessOverride " + brightness); if (DEBUG) Slog.d(TAG, "setScreenBrightnessOverride " + brightness); synchronized (mLocks) { if (mScreenBrightnessOverride != brightness) { mScreenBrightnessOverride = brightness; Loading @@ -1702,7 +1676,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setButtonBrightnessOverride(int brightness) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); if (mSpew) Slog.d(TAG, "setButtonBrightnessOverride " + brightness); if (DEBUG) Slog.d(TAG, "setButtonBrightnessOverride " + brightness); synchronized (mLocks) { if (mButtonBrightnessOverride != brightness) { mButtonBrightnessOverride = brightness; Loading Loading @@ -1800,7 +1774,7 @@ public class PowerManagerService extends IPowerManager.Stub synchronized (mLocks) { int err; if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: mPowerState=0x" + Integer.toHexString(mPowerState) + " newState=0x" + Integer.toHexString(newState) + " noChangeLights=" + noChangeLights Loading Loading @@ -1831,7 +1805,7 @@ public class PowerManagerService extends IPowerManager.Stub boolean oldScreenOn = (mPowerState & SCREEN_ON_BIT) != 0; boolean newScreenOn = (newState & SCREEN_ON_BIT) != 0; if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: mPowerState=" + mPowerState + " newState=" + newState + " noChangeLights=" + noChangeLights); Slog.d(TAG, " oldKeyboardBright=" + ((mPowerState & KEYBOARD_BRIGHT_BIT) != 0) Loading @@ -1850,7 +1824,7 @@ public class PowerManagerService extends IPowerManager.Stub if (stateChanged && reason == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT) { if (mPolicy != null && mPolicy.isScreenSaverEnabled()) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: running screen saver instead of turning off screen"); } if (mPolicy.startScreenSaver()) { Loading @@ -1877,13 +1851,13 @@ public class PowerManagerService extends IPowerManager.Stub // seconds to prevent a buggy app from disabling the // screen forever; see forceReenableScreen().) boolean reallyTurnScreenOn = true; if (mSpew) { if (DEBUG) { Slog.d(TAG, "- turning screen on... mPreventScreenOn = " + mPreventScreenOn); } if (mPreventScreenOn) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "- PREVENTING screen from really turning on!"); } reallyTurnScreenOn = false; Loading @@ -1905,11 +1879,7 @@ public class PowerManagerService extends IPowerManager.Stub err = 0; } mLastTouchDown = 0; mTotalTouchDownTime = 0; mTouchCycles = 0; EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, reason, mTotalTouchDownTime, mTouchCycles); EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, reason, 0, 0); if (err == 0) { sendNotificationLocked(true, -1); // Update the lights *after* taking care of turning the Loading Loading @@ -1948,7 +1918,6 @@ public class PowerManagerService extends IPowerManager.Stub err = screenOffFinishedAnimatingLocked(reason); } else { err = 0; mLastTouchDown = 0; } } } else if (stateChanged) { Loading @@ -1974,9 +1943,7 @@ public class PowerManagerService extends IPowerManager.Stub // I don't think we need to check the current state here because all of these // Power.setScreenState and sendNotificationLocked can both handle being // called multiple times in the same state. -joeo EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 0, reason, mTotalTouchDownTime, mTouchCycles); mLastTouchDown = 0; EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 0, reason, 0, 0); int err = setScreenStateLocked(false); if (err == 0) { mScreenOffReason = reason; Loading Loading @@ -2147,7 +2114,7 @@ public class PowerManagerService extends IPowerManager.Stub } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "offMask=0x" + Integer.toHexString(offMask) + " dimMask=0x" + Integer.toHexString(dimMask) + " onMask=0x" + Integer.toHexString(onMask) Loading @@ -2158,7 +2125,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (offMask != 0) { if (mSpew) Slog.i(TAG, "Setting brightess off: " + offMask); if (DEBUG) Slog.i(TAG, "Setting brightess off: " + offMask); setLightBrightness(offMask, PowerManager.BRIGHTNESS_OFF); } if (dimMask != 0) { Loading @@ -2167,7 +2134,7 @@ public class PowerManagerService extends IPowerManager.Stub brightness > PowerManager.BRIGHTNESS_LOW_BATTERY) { brightness = PowerManager.BRIGHTNESS_LOW_BATTERY; } if (mSpew) Slog.i(TAG, "Setting brightess dim " + brightness + ": " + dimMask); if (DEBUG) Slog.i(TAG, "Setting brightess dim " + brightness + ": " + dimMask); setLightBrightness(dimMask, brightness); } if (onMask != 0) { Loading @@ -2176,7 +2143,7 @@ public class PowerManagerService extends IPowerManager.Stub brightness > PowerManager.BRIGHTNESS_LOW_BATTERY) { brightness = PowerManager.BRIGHTNESS_LOW_BATTERY; } if (mSpew) Slog.i(TAG, "Setting brightess on " + brightness + ": " + onMask); if (DEBUG) Slog.i(TAG, "Setting brightess on " + brightness + ": " + onMask); setLightBrightness(onMask, brightness); } } Loading Loading @@ -2215,7 +2182,7 @@ public class PowerManagerService extends IPowerManager.Stub int value = msg.arg2; long tStart = SystemClock.uptimeMillis(); if ((mask & SCREEN_BRIGHT_BIT) != 0) { if (mDebugLightAnimation) Slog.v(TAG, "Set brightness: " + value); if (DEBUG_LIGHT_ANIMATION) Slog.v(TAG, "Set brightness: " + value); mLcdLight.setBrightness(value, brightnessMode); } long elapsed = SystemClock.uptimeMillis() - tStart; Loading Loading @@ -2277,7 +2244,7 @@ public class PowerManagerService extends IPowerManager.Stub } } if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "Animating light: " + "start:" + startValue + ", end:" + endValue + ", elapsed:" + elapsed + ", duration:" + duration + ", current:" + currentValue Loading @@ -2289,7 +2256,7 @@ public class PowerManagerService extends IPowerManager.Stub if (turningOff && !mHeadless && !mAnimateScreenLights) { int mode = mScreenOffReason == OFF_BECAUSE_OF_PROX_SENSOR ? 0 : mAnimationSetting; if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "Doing power-off anim, mode=" + mode); } mScreenBrightnessHandler.obtainMessage(ANIMATE_POWER_OFF, mode, 0) Loading Loading @@ -2349,7 +2316,7 @@ public class PowerManagerService extends IPowerManager.Stub duration = (int) (mWindowScaleAnimation * animationDuration); startTimeMillis = SystemClock.elapsedRealtime(); if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "animateTo(target=" + target + ", sensor=" + sensorTarget + ", mask=" + mask Loading Loading @@ -2541,7 +2508,7 @@ public class PowerManagerService extends IPowerManager.Stub } synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "userActivity mLastEventTime=" + mLastEventTime + " time=" + time + " mUserActivityAllowed=" + mUserActivityAllowed + " mUserState=0x" + Integer.toHexString(mUserState) Loading Loading @@ -2686,13 +2653,13 @@ public class PowerManagerService extends IPowerManager.Stub } private void lightSensorChangedLocked(int value, boolean immediate) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "lightSensorChangedLocked value=" + value + " immediate=" + immediate); } // Don't do anything if the screen is off. if ((mPowerState & SCREEN_ON_BIT) == 0) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "dropping lightSensorChangedLocked because screen is off"); } return; Loading @@ -2716,7 +2683,7 @@ public class PowerManagerService extends IPowerManager.Stub mLightSensorButtonBrightness = buttonValue; mLightSensorKeyboardBrightness = keyboardValue; if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "lcdValue " + lcdValue); Slog.d(TAG, "buttonValue " + buttonValue); Slog.d(TAG, "keyboardValue " + keyboardValue); Loading Loading @@ -2825,7 +2792,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void goToSleepLocked(long time, int reason) { if (mSpew) { if (DEBUG) { Exception ex = new Exception(); ex.fillInStackTrace(); Slog.d(TAG, "goToSleep mLastEventTime=" + mLastEventTime + " time=" + time Loading Loading @@ -2853,7 +2820,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (!proxLock) { mProxIgnoredBecauseScreenTurnedOff = true; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "setting mProxIgnoredBecauseScreenTurnedOff"); } } Loading @@ -2876,7 +2843,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setKeyboardVisibility(boolean visible) { synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "setKeyboardVisibility: " + visible); } if (mKeyboardVisible != visible) { Loading Loading @@ -2905,7 +2872,7 @@ public class PowerManagerService extends IPowerManager.Stub * short screen timeout when keyguard is unhidden. */ public void enableUserActivity(boolean enabled) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "enableUserActivity " + enabled); } synchronized (mLocks) { Loading Loading @@ -2966,7 +2933,7 @@ public class PowerManagerService extends IPowerManager.Stub mDimDelay = -1; } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "setScreenOffTimeouts mKeylightDelay=" + mKeylightDelay + " mDimDelay=" + mDimDelay + " mScreenOffDelay=" + mScreenOffDelay + " mDimScreen=" + mDimScreen); Loading Loading @@ -3042,7 +3009,7 @@ public class PowerManagerService extends IPowerManager.Stub result |= wl.minState; } } if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading Loading @@ -3180,7 +3147,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void enableProximityLockLocked() { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "enableProximityLockLocked"); } if (!mProximitySensorEnabled) { Loading @@ -3197,7 +3164,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void disableProximityLockLocked() { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "disableProximityLockLocked"); } if (mProximitySensorEnabled) { Loading @@ -3215,7 +3182,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (mProximitySensorActive) { mProximitySensorActive = false; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "disableProximityLockLocked mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3227,7 +3194,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void proximityChangedLocked(boolean active) { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "proximityChangedLocked, active: " + active); } if (!mProximitySensorEnabled) { Loading @@ -3235,7 +3202,7 @@ public class PowerManagerService extends IPowerManager.Stub return; } if (active) { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3249,7 +3216,7 @@ public class PowerManagerService extends IPowerManager.Stub // temporarily set mUserActivityAllowed to true so this will work // even when the keyguard is on. mProximitySensorActive = false; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3265,7 +3232,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void enableLightSensorLocked(boolean enable) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "enableLightSensorLocked enable=" + enable + " mLightSensorEnabled=" + mLightSensorEnabled + " mAutoBrightessEnabled=" + mAutoBrightessEnabled Loading Loading @@ -3316,7 +3283,7 @@ public class PowerManagerService extends IPowerManager.Stub boolean active = (distance >= 0.0 && distance < PROXIMITY_THRESHOLD && distance < mProximitySensor.getMaximumRange()); if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "mProximityListener.onSensorChanged active: " + active); } if (timeSinceLastEvent < PROXIMITY_SENSOR_DELAY) { Loading Loading @@ -3378,7 +3345,7 @@ public class PowerManagerService extends IPowerManager.Stub SensorEventListener mLightListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "onSensorChanged: light value: " + event.values[0]); } synchronized (mLocks) { Loading @@ -3388,7 +3355,7 @@ public class PowerManagerService extends IPowerManager.Stub } handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor); if (mWaitingForFirstLightSensor && !mPreparingForScreenOn) { if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.d(TAG, "onSensorChanged: Clearing mWaitingForFirstLightSensor."); } mWaitingForFirstLightSensor = false; Loading Loading
services/java/com/android/server/power/PowerManagerService.java +59 −92 Original line number Diff line number Diff line Loading @@ -20,9 +20,7 @@ import com.android.internal.app.IBatteryStats; import com.android.server.BatteryService; import com.android.server.EventLogTags; import com.android.server.LightsService; import com.android.server.LightsService.Light; import com.android.server.Watchdog; import com.android.server.Watchdog.Monitor; import com.android.server.am.BatteryStatsService; import android.app.ActivityManagerNative; Loading Loading @@ -67,7 +65,6 @@ import static android.view.WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR; import static android.provider.Settings.System.DIM_SCREEN; import static android.provider.Settings.System.SCREEN_BRIGHTNESS; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; import static android.provider.Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN; Loading @@ -89,20 +86,21 @@ public class PowerManagerService extends IPowerManager.Stub private static final String TAG = "PowerManagerService"; static final String PARTIAL_NAME = "PowerManagerService"; // could be either static or controllable at runtime private static final boolean DEBUG = false; private static final boolean DEBUG_PROXIMITY_SENSOR = (false || DEBUG); private static final boolean DEBUG_LIGHT_SENSOR = (false || DEBUG); private static final boolean DEBUG_LIGHT_ANIMATION = (false || DEBUG); private static final boolean DEBUG_SCREEN_ON = false; // Wake lock that ensures that the CPU is running. The screen might not be on. private static final int PARTIAL_WAKE_LOCK_ID = 1; // Wake lock that ensures that the screen is on. private static final int FULL_WAKE_LOCK_ID = 2; static final boolean DEBUG_SCREEN_ON = false; private static final boolean LOG_PARTIAL_WL = false; // Indicates whether touch-down cycles should be logged as part of the // LOG_POWER_SCREEN_STATE log events private static final boolean LOG_TOUCH_DOWNS = true; private static final int LOCK_MASK = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.SCREEN_BRIGHT_WAKE_LOCK Loading Loading @@ -301,17 +299,6 @@ public class PowerManagerService extends IPowerManager.Stub private static final int ANIM_SETTING_ON = 0x01; private static final int ANIM_SETTING_OFF = 0x10; // Used when logging number and duration of touch-down cycles private long mTotalTouchDownTime; private long mLastTouchDown; private int mTouchCycles; // could be either static or controllable at runtime private static final boolean mSpew = false; private static final boolean mDebugProximitySensor = (false || mSpew); private static final boolean mDebugLightSensor = (false || mSpew); private static final boolean mDebugLightAnimation = (false || mSpew); private native void nativeInit(); private native void nativeSetPowerState(boolean screenOn, boolean screenBright); private native void nativeStartSurfaceFlingerAnimation(int mode); Loading Loading @@ -855,7 +842,7 @@ public class PowerManagerService extends IPowerManager.Stub public void acquireWakeLockLocked(int flags, IBinder lock, int uid, int pid, String tag, WorkSource ws) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "acquireWakeLock flags=0x" + Integer.toHexString(flags) + " tag=" + tag); } Loading Loading @@ -944,7 +931,7 @@ public class PowerManagerService extends IPowerManager.Stub mProximitySensorActive = false; } if (mSpew) { if (DEBUG) { Slog.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState) + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState) Loading @@ -952,7 +939,7 @@ public class PowerManagerService extends IPowerManager.Stub + Integer.toHexString(oldWakeLockState)); } } else { if (mSpew) { if (DEBUG) { Slog.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState) + " mLocks.gatherState()=0x" + Integer.toHexString(mLocks.gatherState()) Loading @@ -967,7 +954,9 @@ public class PowerManagerService extends IPowerManager.Stub if (newlock) { mPartialCount++; if (mPartialCount == 1) { if (LOG_PARTIAL_WL) EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 1, tag); if (LOG_PARTIAL_WL) { EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 1, tag); } } } nativeAcquireWakeLock(PARTIAL_WAKE_LOCK_ID, PARTIAL_NAME); Loading Loading @@ -1022,7 +1011,7 @@ public class PowerManagerService extends IPowerManager.Stub return; } if (mSpew) { if (DEBUG) { Slog.d(TAG, "releaseWakeLock flags=0x" + Integer.toHexString(wl.flags) + " tag=" + wl.tag); } Loading @@ -1034,7 +1023,7 @@ public class PowerManagerService extends IPowerManager.Stub if (mProximitySensorActive && ((flags & PowerManager.WAIT_FOR_PROXIMITY_NEGATIVE) != 0)) { // wait for proximity sensor to go negative before disabling sensor if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "waiting for proximity sensor to go negative"); } } else { Loading @@ -1053,7 +1042,9 @@ public class PowerManagerService extends IPowerManager.Stub else if ((wl.flags & LOCK_MASK) == PowerManager.PARTIAL_WAKE_LOCK) { mPartialCount--; if (mPartialCount == 0) { if (LOG_PARTIAL_WL) EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 0, wl.tag); if (LOG_PARTIAL_WL) { EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 0, wl.tag); } nativeReleaseWakeLock(PARTIAL_NAME); } } Loading Loading @@ -1338,7 +1329,7 @@ public class PowerManagerService extends IPowerManager.Stub nextState = SCREEN_BRIGHT; } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "setTimeoutLocked now=" + now + " timeoutOverride=" + timeoutOverride + " nextState=" + nextState + " when=" + when); Loading Loading @@ -1368,7 +1359,7 @@ public class PowerManagerService extends IPowerManager.Stub public void run() { synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "user activity timeout timed out nextState=" + this.nextState); } Loading Loading @@ -1523,7 +1514,7 @@ public class PowerManagerService extends IPowerManager.Stub // ignore it } if (mSpew) { if (DEBUG) { Slog.d(TAG, "mBroadcastWakeLock=" + mBroadcastWakeLock); } if (mContext != null && ActivityManagerNative.isSystemReady()) { Loading Loading @@ -1590,23 +1581,6 @@ public class PowerManagerService extends IPowerManager.Stub } }; void logPointerUpEvent() { if (LOG_TOUCH_DOWNS) { mTotalTouchDownTime += SystemClock.elapsedRealtime() - mLastTouchDown; mLastTouchDown = 0; } } void logPointerDownEvent() { if (LOG_TOUCH_DOWNS) { // If we are not already timing a down/up sequence if (mLastTouchDown == 0) { mLastTouchDown = SystemClock.elapsedRealtime(); mTouchCycles++; } } } /** * Prevents the screen from turning on even if it *should* turn on due * to a subsequent full wake lock being acquired. Loading Loading @@ -1668,7 +1642,7 @@ public class PowerManagerService extends IPowerManager.Stub // handles the case where the screen is currently off because of // a prior preventScreenOn(true) call.) if (!mProximitySensorActive && (mPowerState & SCREEN_ON_BIT) != 0) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "preventScreenOn: turning on after a prior preventScreenOn(true)!"); } Loading @@ -1688,7 +1662,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setScreenBrightnessOverride(int brightness) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); if (mSpew) Slog.d(TAG, "setScreenBrightnessOverride " + brightness); if (DEBUG) Slog.d(TAG, "setScreenBrightnessOverride " + brightness); synchronized (mLocks) { if (mScreenBrightnessOverride != brightness) { mScreenBrightnessOverride = brightness; Loading @@ -1702,7 +1676,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setButtonBrightnessOverride(int brightness) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); if (mSpew) Slog.d(TAG, "setButtonBrightnessOverride " + brightness); if (DEBUG) Slog.d(TAG, "setButtonBrightnessOverride " + brightness); synchronized (mLocks) { if (mButtonBrightnessOverride != brightness) { mButtonBrightnessOverride = brightness; Loading Loading @@ -1800,7 +1774,7 @@ public class PowerManagerService extends IPowerManager.Stub synchronized (mLocks) { int err; if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: mPowerState=0x" + Integer.toHexString(mPowerState) + " newState=0x" + Integer.toHexString(newState) + " noChangeLights=" + noChangeLights Loading Loading @@ -1831,7 +1805,7 @@ public class PowerManagerService extends IPowerManager.Stub boolean oldScreenOn = (mPowerState & SCREEN_ON_BIT) != 0; boolean newScreenOn = (newState & SCREEN_ON_BIT) != 0; if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: mPowerState=" + mPowerState + " newState=" + newState + " noChangeLights=" + noChangeLights); Slog.d(TAG, " oldKeyboardBright=" + ((mPowerState & KEYBOARD_BRIGHT_BIT) != 0) Loading @@ -1850,7 +1824,7 @@ public class PowerManagerService extends IPowerManager.Stub if (stateChanged && reason == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT) { if (mPolicy != null && mPolicy.isScreenSaverEnabled()) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "setPowerState: running screen saver instead of turning off screen"); } if (mPolicy.startScreenSaver()) { Loading @@ -1877,13 +1851,13 @@ public class PowerManagerService extends IPowerManager.Stub // seconds to prevent a buggy app from disabling the // screen forever; see forceReenableScreen().) boolean reallyTurnScreenOn = true; if (mSpew) { if (DEBUG) { Slog.d(TAG, "- turning screen on... mPreventScreenOn = " + mPreventScreenOn); } if (mPreventScreenOn) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "- PREVENTING screen from really turning on!"); } reallyTurnScreenOn = false; Loading @@ -1905,11 +1879,7 @@ public class PowerManagerService extends IPowerManager.Stub err = 0; } mLastTouchDown = 0; mTotalTouchDownTime = 0; mTouchCycles = 0; EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, reason, mTotalTouchDownTime, mTouchCycles); EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, reason, 0, 0); if (err == 0) { sendNotificationLocked(true, -1); // Update the lights *after* taking care of turning the Loading Loading @@ -1948,7 +1918,6 @@ public class PowerManagerService extends IPowerManager.Stub err = screenOffFinishedAnimatingLocked(reason); } else { err = 0; mLastTouchDown = 0; } } } else if (stateChanged) { Loading @@ -1974,9 +1943,7 @@ public class PowerManagerService extends IPowerManager.Stub // I don't think we need to check the current state here because all of these // Power.setScreenState and sendNotificationLocked can both handle being // called multiple times in the same state. -joeo EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 0, reason, mTotalTouchDownTime, mTouchCycles); mLastTouchDown = 0; EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 0, reason, 0, 0); int err = setScreenStateLocked(false); if (err == 0) { mScreenOffReason = reason; Loading Loading @@ -2147,7 +2114,7 @@ public class PowerManagerService extends IPowerManager.Stub } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "offMask=0x" + Integer.toHexString(offMask) + " dimMask=0x" + Integer.toHexString(dimMask) + " onMask=0x" + Integer.toHexString(onMask) Loading @@ -2158,7 +2125,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (offMask != 0) { if (mSpew) Slog.i(TAG, "Setting brightess off: " + offMask); if (DEBUG) Slog.i(TAG, "Setting brightess off: " + offMask); setLightBrightness(offMask, PowerManager.BRIGHTNESS_OFF); } if (dimMask != 0) { Loading @@ -2167,7 +2134,7 @@ public class PowerManagerService extends IPowerManager.Stub brightness > PowerManager.BRIGHTNESS_LOW_BATTERY) { brightness = PowerManager.BRIGHTNESS_LOW_BATTERY; } if (mSpew) Slog.i(TAG, "Setting brightess dim " + brightness + ": " + dimMask); if (DEBUG) Slog.i(TAG, "Setting brightess dim " + brightness + ": " + dimMask); setLightBrightness(dimMask, brightness); } if (onMask != 0) { Loading @@ -2176,7 +2143,7 @@ public class PowerManagerService extends IPowerManager.Stub brightness > PowerManager.BRIGHTNESS_LOW_BATTERY) { brightness = PowerManager.BRIGHTNESS_LOW_BATTERY; } if (mSpew) Slog.i(TAG, "Setting brightess on " + brightness + ": " + onMask); if (DEBUG) Slog.i(TAG, "Setting brightess on " + brightness + ": " + onMask); setLightBrightness(onMask, brightness); } } Loading Loading @@ -2215,7 +2182,7 @@ public class PowerManagerService extends IPowerManager.Stub int value = msg.arg2; long tStart = SystemClock.uptimeMillis(); if ((mask & SCREEN_BRIGHT_BIT) != 0) { if (mDebugLightAnimation) Slog.v(TAG, "Set brightness: " + value); if (DEBUG_LIGHT_ANIMATION) Slog.v(TAG, "Set brightness: " + value); mLcdLight.setBrightness(value, brightnessMode); } long elapsed = SystemClock.uptimeMillis() - tStart; Loading Loading @@ -2277,7 +2244,7 @@ public class PowerManagerService extends IPowerManager.Stub } } if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "Animating light: " + "start:" + startValue + ", end:" + endValue + ", elapsed:" + elapsed + ", duration:" + duration + ", current:" + currentValue Loading @@ -2289,7 +2256,7 @@ public class PowerManagerService extends IPowerManager.Stub if (turningOff && !mHeadless && !mAnimateScreenLights) { int mode = mScreenOffReason == OFF_BECAUSE_OF_PROX_SENSOR ? 0 : mAnimationSetting; if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "Doing power-off anim, mode=" + mode); } mScreenBrightnessHandler.obtainMessage(ANIMATE_POWER_OFF, mode, 0) Loading Loading @@ -2349,7 +2316,7 @@ public class PowerManagerService extends IPowerManager.Stub duration = (int) (mWindowScaleAnimation * animationDuration); startTimeMillis = SystemClock.elapsedRealtime(); if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.v(TAG, "animateTo(target=" + target + ", sensor=" + sensorTarget + ", mask=" + mask Loading Loading @@ -2541,7 +2508,7 @@ public class PowerManagerService extends IPowerManager.Stub } synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "userActivity mLastEventTime=" + mLastEventTime + " time=" + time + " mUserActivityAllowed=" + mUserActivityAllowed + " mUserState=0x" + Integer.toHexString(mUserState) Loading Loading @@ -2686,13 +2653,13 @@ public class PowerManagerService extends IPowerManager.Stub } private void lightSensorChangedLocked(int value, boolean immediate) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "lightSensorChangedLocked value=" + value + " immediate=" + immediate); } // Don't do anything if the screen is off. if ((mPowerState & SCREEN_ON_BIT) == 0) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "dropping lightSensorChangedLocked because screen is off"); } return; Loading @@ -2716,7 +2683,7 @@ public class PowerManagerService extends IPowerManager.Stub mLightSensorButtonBrightness = buttonValue; mLightSensorKeyboardBrightness = keyboardValue; if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "lcdValue " + lcdValue); Slog.d(TAG, "buttonValue " + buttonValue); Slog.d(TAG, "keyboardValue " + keyboardValue); Loading Loading @@ -2825,7 +2792,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void goToSleepLocked(long time, int reason) { if (mSpew) { if (DEBUG) { Exception ex = new Exception(); ex.fillInStackTrace(); Slog.d(TAG, "goToSleep mLastEventTime=" + mLastEventTime + " time=" + time Loading Loading @@ -2853,7 +2820,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (!proxLock) { mProxIgnoredBecauseScreenTurnedOff = true; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "setting mProxIgnoredBecauseScreenTurnedOff"); } } Loading @@ -2876,7 +2843,7 @@ public class PowerManagerService extends IPowerManager.Stub public void setKeyboardVisibility(boolean visible) { synchronized (mLocks) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "setKeyboardVisibility: " + visible); } if (mKeyboardVisible != visible) { Loading Loading @@ -2905,7 +2872,7 @@ public class PowerManagerService extends IPowerManager.Stub * short screen timeout when keyguard is unhidden. */ public void enableUserActivity(boolean enabled) { if (mSpew) { if (DEBUG) { Slog.d(TAG, "enableUserActivity " + enabled); } synchronized (mLocks) { Loading Loading @@ -2966,7 +2933,7 @@ public class PowerManagerService extends IPowerManager.Stub mDimDelay = -1; } } if (mSpew) { if (DEBUG) { Slog.d(TAG, "setScreenOffTimeouts mKeylightDelay=" + mKeylightDelay + " mDimDelay=" + mDimDelay + " mScreenOffDelay=" + mScreenOffDelay + " mDimScreen=" + mDimScreen); Loading Loading @@ -3042,7 +3009,7 @@ public class PowerManagerService extends IPowerManager.Stub result |= wl.minState; } } if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading Loading @@ -3180,7 +3147,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void enableProximityLockLocked() { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "enableProximityLockLocked"); } if (!mProximitySensorEnabled) { Loading @@ -3197,7 +3164,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void disableProximityLockLocked() { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "disableProximityLockLocked"); } if (mProximitySensorEnabled) { Loading @@ -3215,7 +3182,7 @@ public class PowerManagerService extends IPowerManager.Stub } if (mProximitySensorActive) { mProximitySensorActive = false; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "disableProximityLockLocked mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3227,7 +3194,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void proximityChangedLocked(boolean active) { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "proximityChangedLocked, active: " + active); } if (!mProximitySensorEnabled) { Loading @@ -3235,7 +3202,7 @@ public class PowerManagerService extends IPowerManager.Stub return; } if (active) { if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3249,7 +3216,7 @@ public class PowerManagerService extends IPowerManager.Stub // temporarily set mUserActivityAllowed to true so this will work // even when the keyguard is on. mProximitySensorActive = false; if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + mProxIgnoredBecauseScreenTurnedOff); } Loading @@ -3265,7 +3232,7 @@ public class PowerManagerService extends IPowerManager.Stub } private void enableLightSensorLocked(boolean enable) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "enableLightSensorLocked enable=" + enable + " mLightSensorEnabled=" + mLightSensorEnabled + " mAutoBrightessEnabled=" + mAutoBrightessEnabled Loading Loading @@ -3316,7 +3283,7 @@ public class PowerManagerService extends IPowerManager.Stub boolean active = (distance >= 0.0 && distance < PROXIMITY_THRESHOLD && distance < mProximitySensor.getMaximumRange()); if (mDebugProximitySensor) { if (DEBUG_PROXIMITY_SENSOR) { Slog.d(TAG, "mProximityListener.onSensorChanged active: " + active); } if (timeSinceLastEvent < PROXIMITY_SENSOR_DELAY) { Loading Loading @@ -3378,7 +3345,7 @@ public class PowerManagerService extends IPowerManager.Stub SensorEventListener mLightListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if (mDebugLightSensor) { if (DEBUG_LIGHT_SENSOR) { Slog.d(TAG, "onSensorChanged: light value: " + event.values[0]); } synchronized (mLocks) { Loading @@ -3388,7 +3355,7 @@ public class PowerManagerService extends IPowerManager.Stub } handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor); if (mWaitingForFirstLightSensor && !mPreparingForScreenOn) { if (mDebugLightAnimation) { if (DEBUG_LIGHT_ANIMATION) { Slog.d(TAG, "onSensorChanged: Clearing mWaitingForFirstLightSensor."); } mWaitingForFirstLightSensor = false; Loading