Loading services/core/java/com/android/server/display/ColorFade.java +6 −0 Original line number Diff line number Diff line Loading @@ -401,6 +401,12 @@ final class ColorFade { } } void stop() { if (mEglContext != null && mEglDisplay != null) { EGL14.eglDestroyContext(mEglDisplay, mEglContext); } } /** * Draws an animation frame showing the color fade activated at the * specified level. Loading services/core/java/com/android/server/display/DisplayPowerController.java +2 −1 Original line number Diff line number Diff line Loading @@ -3519,7 +3519,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { return new DisplayPowerState(blanker, colorFade, displayId, displayState); return new DisplayPowerState(blanker, colorFade, displayId, displayState, new Handler(/*async=*/ true)); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, Loading services/core/java/com/android/server/display/DisplayPowerController2.java +2 −3 Original line number Diff line number Diff line Loading @@ -324,8 +324,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal // Must only be accessed on the handler thread. private DisplayPowerState mPowerState; // The currently active screen on unblocker. This field is non-null whenever // we are waiting for a callback to release it and unblock the screen. private ScreenOnUnblocker mPendingScreenOnUnblocker; Loading Loading @@ -2884,7 +2882,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { return new DisplayPowerState(blanker, colorFade, displayId, displayState); return new DisplayPowerState(blanker, colorFade, displayId, displayState, new Handler(/*async=*/ true)); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, Loading services/core/java/com/android/server/display/DisplayPowerState.java +9 −2 Original line number Diff line number Diff line Loading @@ -74,8 +74,9 @@ final class DisplayPowerState { private volatile boolean mStopped; DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { mHandler = new Handler(true /*async*/); DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState, Handler handler) { mHandler = handler; mChoreographer = Choreographer.getInstance(); mBlanker = blanker; mColorFade = colorFade; Loading Loading @@ -317,6 +318,7 @@ final class DisplayPowerState { mStopped = true; mPhotonicModulator.interrupt(); dismissColorFade(); stopColorFade(); mCleanListener = null; mHandler.removeCallbacksAndMessages(null); } Loading Loading @@ -376,6 +378,11 @@ final class DisplayPowerState { } } // Clears up color fade resources. private void stopColorFade() { if (mColorFade != null) mColorFade.stop(); } private final Runnable mScreenUpdateRunnable = new Runnable() { @Override public void run() { Loading services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +15 −0 Original line number Diff line number Diff line Loading @@ -1104,6 +1104,21 @@ public final class DisplayPowerController2Test { verify(mDisplayWhiteBalanceControllerMock, times(1)).setStrongModeEnabled(true); } @Test public void testPowerStateStopsOnDpcStop() { // Set up DisplayPowerRequest dpr = new DisplayPowerRequest(); mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Stop dpc mHolder.dpc.stop(); advanceTime(1); // Ensure dps has stopped verify(mHolder.displayPowerState, times(1)).stop(); } /** * Creates a mock and registers it to {@link LocalServices}. */ Loading Loading
services/core/java/com/android/server/display/ColorFade.java +6 −0 Original line number Diff line number Diff line Loading @@ -401,6 +401,12 @@ final class ColorFade { } } void stop() { if (mEglContext != null && mEglDisplay != null) { EGL14.eglDestroyContext(mEglDisplay, mEglContext); } } /** * Draws an animation frame showing the color fade activated at the * specified level. Loading
services/core/java/com/android/server/display/DisplayPowerController.java +2 −1 Original line number Diff line number Diff line Loading @@ -3519,7 +3519,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { return new DisplayPowerState(blanker, colorFade, displayId, displayState); return new DisplayPowerState(blanker, colorFade, displayId, displayState, new Handler(/*async=*/ true)); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, Loading
services/core/java/com/android/server/display/DisplayPowerController2.java +2 −3 Original line number Diff line number Diff line Loading @@ -324,8 +324,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal // Must only be accessed on the handler thread. private DisplayPowerState mPowerState; // The currently active screen on unblocker. This field is non-null whenever // we are waiting for a callback to release it and unblock the screen. private ScreenOnUnblocker mPendingScreenOnUnblocker; Loading Loading @@ -2884,7 +2882,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal DisplayPowerState getDisplayPowerState(DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { return new DisplayPowerState(blanker, colorFade, displayId, displayState); return new DisplayPowerState(blanker, colorFade, displayId, displayState, new Handler(/*async=*/ true)); } DualRampAnimator<DisplayPowerState> getDualRampAnimator(DisplayPowerState dps, Loading
services/core/java/com/android/server/display/DisplayPowerState.java +9 −2 Original line number Diff line number Diff line Loading @@ -74,8 +74,9 @@ final class DisplayPowerState { private volatile boolean mStopped; DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { mHandler = new Handler(true /*async*/); DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState, Handler handler) { mHandler = handler; mChoreographer = Choreographer.getInstance(); mBlanker = blanker; mColorFade = colorFade; Loading Loading @@ -317,6 +318,7 @@ final class DisplayPowerState { mStopped = true; mPhotonicModulator.interrupt(); dismissColorFade(); stopColorFade(); mCleanListener = null; mHandler.removeCallbacksAndMessages(null); } Loading Loading @@ -376,6 +378,11 @@ final class DisplayPowerState { } } // Clears up color fade resources. private void stopColorFade() { if (mColorFade != null) mColorFade.stop(); } private final Runnable mScreenUpdateRunnable = new Runnable() { @Override public void run() { Loading
services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java +15 −0 Original line number Diff line number Diff line Loading @@ -1104,6 +1104,21 @@ public final class DisplayPowerController2Test { verify(mDisplayWhiteBalanceControllerMock, times(1)).setStrongModeEnabled(true); } @Test public void testPowerStateStopsOnDpcStop() { // Set up DisplayPowerRequest dpr = new DisplayPowerRequest(); mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Stop dpc mHolder.dpc.stop(); advanceTime(1); // Ensure dps has stopped verify(mHolder.displayPowerState, times(1)).stop(); } /** * Creates a mock and registers it to {@link LocalServices}. */ Loading