Loading services/core/java/com/android/server/display/DisplayPowerState.java +14 −1 Original line number Diff line number Diff line Loading @@ -26,9 +26,12 @@ import android.util.Slog; import android.view.Choreographer; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.BackgroundThread; import com.android.server.display.utils.DebugUtils; import java.io.PrintWriter; import java.util.concurrent.Executor; /** * Controls the display power state. Loading Loading @@ -75,10 +78,19 @@ final class DisplayPowerState { private Runnable mCleanListener; private Executor mAsyncDestroyExecutor; private volatile boolean mStopped; DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { this(blanker, colorFade, displayId, displayState, BackgroundThread.getExecutor()); } @VisibleForTesting DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState, Executor asyncDestroyExecutor) { mHandler = new Handler(true /*async*/); mChoreographer = Choreographer.getInstance(); mBlanker = blanker; Loading @@ -86,6 +98,7 @@ final class DisplayPowerState { mPhotonicModulator = new PhotonicModulator(); mPhotonicModulator.start(); mDisplayId = displayId; mAsyncDestroyExecutor = asyncDestroyExecutor; // At boot time, we don't know the screen's brightness, // so prepare to set it to a known state when the state is next applied. Loading Loading @@ -321,7 +334,7 @@ final class DisplayPowerState { mStopped = true; mPhotonicModulator.interrupt(); if (mColorFade != null) { mColorFade.destroy(); mAsyncDestroyExecutor.execute(mColorFade::destroy); } mCleanListener = null; mHandler.removeCallbacksAndMessages(null); Loading services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -23,8 +23,10 @@ import org.junit.Rule import org.junit.Test import org.mockito.junit.MockitoJUnit import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.mock import org.mockito.kotlin.verify import java.util.concurrent.Executor @SmallTest class DisplayPowerStateTest { Loading @@ -36,15 +38,21 @@ class DisplayPowerStateTest { private val mockBlanker = mock<DisplayBlanker>() private val mockColorFade = mock<ColorFade>() private val mockExecutor = mock<Executor>() @Before fun setUp() { displayPowerState = DisplayPowerState(mockBlanker, mockColorFade, 123, Display.STATE_ON) displayPowerState = DisplayPowerState(mockBlanker, mockColorFade, 123, Display.STATE_ON, mockExecutor) } @Test fun `destroys ColorFade on stop`() { displayPowerState.stop() val runnableCaptor = argumentCaptor<Runnable>() verify(mockExecutor).execute(runnableCaptor.capture()) runnableCaptor.firstValue.run() verify(mockColorFade).destroy() } Loading Loading
services/core/java/com/android/server/display/DisplayPowerState.java +14 −1 Original line number Diff line number Diff line Loading @@ -26,9 +26,12 @@ import android.util.Slog; import android.view.Choreographer; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.BackgroundThread; import com.android.server.display.utils.DebugUtils; import java.io.PrintWriter; import java.util.concurrent.Executor; /** * Controls the display power state. Loading Loading @@ -75,10 +78,19 @@ final class DisplayPowerState { private Runnable mCleanListener; private Executor mAsyncDestroyExecutor; private volatile boolean mStopped; DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState) { this(blanker, colorFade, displayId, displayState, BackgroundThread.getExecutor()); } @VisibleForTesting DisplayPowerState( DisplayBlanker blanker, ColorFade colorFade, int displayId, int displayState, Executor asyncDestroyExecutor) { mHandler = new Handler(true /*async*/); mChoreographer = Choreographer.getInstance(); mBlanker = blanker; Loading @@ -86,6 +98,7 @@ final class DisplayPowerState { mPhotonicModulator = new PhotonicModulator(); mPhotonicModulator.start(); mDisplayId = displayId; mAsyncDestroyExecutor = asyncDestroyExecutor; // At boot time, we don't know the screen's brightness, // so prepare to set it to a known state when the state is next applied. Loading Loading @@ -321,7 +334,7 @@ final class DisplayPowerState { mStopped = true; mPhotonicModulator.interrupt(); if (mColorFade != null) { mColorFade.destroy(); mAsyncDestroyExecutor.execute(mColorFade::destroy); } mCleanListener = null; mHandler.removeCallbacksAndMessages(null); Loading
services/tests/displayservicetests/src/com/android/server/display/DisplayPowerStateTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -23,8 +23,10 @@ import org.junit.Rule import org.junit.Test import org.mockito.junit.MockitoJUnit import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.mock import org.mockito.kotlin.verify import java.util.concurrent.Executor @SmallTest class DisplayPowerStateTest { Loading @@ -36,15 +38,21 @@ class DisplayPowerStateTest { private val mockBlanker = mock<DisplayBlanker>() private val mockColorFade = mock<ColorFade>() private val mockExecutor = mock<Executor>() @Before fun setUp() { displayPowerState = DisplayPowerState(mockBlanker, mockColorFade, 123, Display.STATE_ON) displayPowerState = DisplayPowerState(mockBlanker, mockColorFade, 123, Display.STATE_ON, mockExecutor) } @Test fun `destroys ColorFade on stop`() { displayPowerState.stop() val runnableCaptor = argumentCaptor<Runnable>() verify(mockExecutor).execute(runnableCaptor.capture()) runnableCaptor.firstValue.run() verify(mockColorFade).destroy() } Loading