Loading services/core/java/com/android/server/display/DisplayPowerController.java +39 −2 Original line number Original line Diff line number Diff line Loading @@ -461,6 +461,18 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private boolean mIsRbcActive; private boolean mIsRbcActive; // Whether there's a callback to tell listeners the display has changed scheduled to run. When // true it implies a wakelock is being held to guarantee the update happens before we collapse // into suspend and so needs to be cleaned up if the thread is exiting. // Should only be accessed on the Handler thread. private boolean mOnStateChangedPending; // Count of proximity messages currently on this DPC's Handler. Used to keep track of how many // suspend blocker acquisitions are pending when shutting down this DPC. // Should only be accessed on the Handler thread. private int mOnProximityPositiveMessages; private int mOnProximityNegativeMessages; // Animators. // Animators. private ObjectAnimator mColorFadeOnAnimator; private ObjectAnimator mColorFadeOnAnimator; private ObjectAnimator mColorFadeOffAnimator; private ObjectAnimator mColorFadeOffAnimator; Loading Loading @@ -1091,10 +1103,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mHbmController.stop(); mHbmController.stop(); mBrightnessThrottler.stop(); mBrightnessThrottler.stop(); mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null); // Release any outstanding wakelocks we're still holding because of pending messages. if (mUnfinishedBusiness) { if (mUnfinishedBusiness) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdUnfinishedBusiness); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdUnfinishedBusiness); mUnfinishedBusiness = false; mUnfinishedBusiness = false; } } if (mOnStateChangedPending) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); mOnStateChangedPending = false; } for (int i = 0; i < mOnProximityPositiveMessages; i++) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); } mOnProximityPositiveMessages = 0; for (int i = 0; i < mOnProximityNegativeMessages; i++) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); } mOnProximityNegativeMessages = 0; final float brightness = mPowerState != null final float brightness = mPowerState != null ? mPowerState.getScreenBrightness() ? mPowerState.getScreenBrightness() Loading Loading @@ -2248,9 +2274,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } private void sendOnStateChangedWithWakelock() { private void sendOnStateChangedWithWakelock() { if (!mOnStateChangedPending) { mOnStateChangedPending = true; mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdOnStateChanged); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdOnStateChanged); mHandler.post(mOnStateChangedRunnable); mHandler.post(mOnStateChangedRunnable); } } } private void logDisplayPolicyChanged(int newPolicy) { private void logDisplayPolicyChanged(int newPolicy) { LogMaker log = new LogMaker(MetricsEvent.DISPLAY_POLICY); LogMaker log = new LogMaker(MetricsEvent.DISPLAY_POLICY); Loading Loading @@ -2408,6 +2437,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final Runnable mOnStateChangedRunnable = new Runnable() { private final Runnable mOnStateChangedRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnStateChangedPending = false; mCallbacks.onStateChanged(); mCallbacks.onStateChanged(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); } } Loading @@ -2416,17 +2446,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private void sendOnProximityPositiveWithWakelock() { private void sendOnProximityPositiveWithWakelock() { mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxPositive); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxPositive); mHandler.post(mOnProximityPositiveRunnable); mHandler.post(mOnProximityPositiveRunnable); mOnProximityPositiveMessages++; } } private final Runnable mOnProximityPositiveRunnable = new Runnable() { private final Runnable mOnProximityPositiveRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnProximityPositiveMessages--; mCallbacks.onProximityPositive(); mCallbacks.onProximityPositive(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); } } }; }; private void sendOnProximityNegativeWithWakelock() { private void sendOnProximityNegativeWithWakelock() { mOnProximityNegativeMessages++; mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxNegative); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxNegative); mHandler.post(mOnProximityNegativeRunnable); mHandler.post(mOnProximityNegativeRunnable); } } Loading @@ -2434,6 +2467,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final Runnable mOnProximityNegativeRunnable = new Runnable() { private final Runnable mOnProximityNegativeRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnProximityNegativeMessages--; mCallbacks.onProximityNegative(); mCallbacks.onProximityNegative(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); } } Loading Loading @@ -2533,6 +2567,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call pw.println(" mReportedToPolicy=" pw.println(" mReportedToPolicy=" + reportedToPolicyToString(mReportedScreenStateToPolicy)); + reportedToPolicyToString(mReportedScreenStateToPolicy)); pw.println(" mIsRbcActive=" + mIsRbcActive); pw.println(" mIsRbcActive=" + mIsRbcActive); pw.println(" mOnStateChangePending=" + mOnStateChangedPending); pw.println(" mOnProximityPositiveMessages=" + mOnProximityPositiveMessages); pw.println(" mOnProximityNegativeMessages=" + mOnProximityNegativeMessages); if (mScreenBrightnessRampAnimator != null) { if (mScreenBrightnessRampAnimator != null) { pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" Loading Loading
services/core/java/com/android/server/display/DisplayPowerController.java +39 −2 Original line number Original line Diff line number Diff line Loading @@ -461,6 +461,18 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private boolean mIsRbcActive; private boolean mIsRbcActive; // Whether there's a callback to tell listeners the display has changed scheduled to run. When // true it implies a wakelock is being held to guarantee the update happens before we collapse // into suspend and so needs to be cleaned up if the thread is exiting. // Should only be accessed on the Handler thread. private boolean mOnStateChangedPending; // Count of proximity messages currently on this DPC's Handler. Used to keep track of how many // suspend blocker acquisitions are pending when shutting down this DPC. // Should only be accessed on the Handler thread. private int mOnProximityPositiveMessages; private int mOnProximityNegativeMessages; // Animators. // Animators. private ObjectAnimator mColorFadeOnAnimator; private ObjectAnimator mColorFadeOnAnimator; private ObjectAnimator mColorFadeOffAnimator; private ObjectAnimator mColorFadeOffAnimator; Loading Loading @@ -1091,10 +1103,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mHbmController.stop(); mHbmController.stop(); mBrightnessThrottler.stop(); mBrightnessThrottler.stop(); mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null); // Release any outstanding wakelocks we're still holding because of pending messages. if (mUnfinishedBusiness) { if (mUnfinishedBusiness) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdUnfinishedBusiness); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdUnfinishedBusiness); mUnfinishedBusiness = false; mUnfinishedBusiness = false; } } if (mOnStateChangedPending) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); mOnStateChangedPending = false; } for (int i = 0; i < mOnProximityPositiveMessages; i++) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); } mOnProximityPositiveMessages = 0; for (int i = 0; i < mOnProximityNegativeMessages; i++) { mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); } mOnProximityNegativeMessages = 0; final float brightness = mPowerState != null final float brightness = mPowerState != null ? mPowerState.getScreenBrightness() ? mPowerState.getScreenBrightness() Loading Loading @@ -2248,9 +2274,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } private void sendOnStateChangedWithWakelock() { private void sendOnStateChangedWithWakelock() { if (!mOnStateChangedPending) { mOnStateChangedPending = true; mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdOnStateChanged); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdOnStateChanged); mHandler.post(mOnStateChangedRunnable); mHandler.post(mOnStateChangedRunnable); } } } private void logDisplayPolicyChanged(int newPolicy) { private void logDisplayPolicyChanged(int newPolicy) { LogMaker log = new LogMaker(MetricsEvent.DISPLAY_POLICY); LogMaker log = new LogMaker(MetricsEvent.DISPLAY_POLICY); Loading Loading @@ -2408,6 +2437,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final Runnable mOnStateChangedRunnable = new Runnable() { private final Runnable mOnStateChangedRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnStateChangedPending = false; mCallbacks.onStateChanged(); mCallbacks.onStateChanged(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdOnStateChanged); } } Loading @@ -2416,17 +2446,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private void sendOnProximityPositiveWithWakelock() { private void sendOnProximityPositiveWithWakelock() { mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxPositive); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxPositive); mHandler.post(mOnProximityPositiveRunnable); mHandler.post(mOnProximityPositiveRunnable); mOnProximityPositiveMessages++; } } private final Runnable mOnProximityPositiveRunnable = new Runnable() { private final Runnable mOnProximityPositiveRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnProximityPositiveMessages--; mCallbacks.onProximityPositive(); mCallbacks.onProximityPositive(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxPositive); } } }; }; private void sendOnProximityNegativeWithWakelock() { private void sendOnProximityNegativeWithWakelock() { mOnProximityNegativeMessages++; mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxNegative); mCallbacks.acquireSuspendBlocker(mSuspendBlockerIdProxNegative); mHandler.post(mOnProximityNegativeRunnable); mHandler.post(mOnProximityNegativeRunnable); } } Loading @@ -2434,6 +2467,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final Runnable mOnProximityNegativeRunnable = new Runnable() { private final Runnable mOnProximityNegativeRunnable = new Runnable() { @Override @Override public void run() { public void run() { mOnProximityNegativeMessages--; mCallbacks.onProximityNegative(); mCallbacks.onProximityNegative(); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); mCallbacks.releaseSuspendBlocker(mSuspendBlockerIdProxNegative); } } Loading Loading @@ -2533,6 +2567,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call pw.println(" mReportedToPolicy=" pw.println(" mReportedToPolicy=" + reportedToPolicyToString(mReportedScreenStateToPolicy)); + reportedToPolicyToString(mReportedScreenStateToPolicy)); pw.println(" mIsRbcActive=" + mIsRbcActive); pw.println(" mIsRbcActive=" + mIsRbcActive); pw.println(" mOnStateChangePending=" + mOnStateChangedPending); pw.println(" mOnProximityPositiveMessages=" + mOnProximityPositiveMessages); pw.println(" mOnProximityNegativeMessages=" + mOnProximityNegativeMessages); if (mScreenBrightnessRampAnimator != null) { if (mScreenBrightnessRampAnimator != null) { pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" Loading