Loading core/java/android/hardware/display/DisplayManagerGlobal.java +22 −7 Original line number Diff line number Diff line Loading @@ -361,6 +361,11 @@ public final class DisplayManagerGlobal { for (int i = 0; i < numListeners; i++) { mask |= mDisplayListeners.get(i).mEventsMask; } if (mDispatchNativeCallbacks) { mask |= DisplayManager.EVENT_FLAG_DISPLAY_ADDED | DisplayManager.EVENT_FLAG_DISPLAY_CHANGED | DisplayManager.EVENT_FLAG_DISPLAY_REMOVED; } return mask; } Loading Loading @@ -1047,12 +1052,17 @@ public final class DisplayManagerGlobal { private static native void nSignalNativeCallbacks(float refreshRate); // Called from AChoreographer via JNI. // Registers AChoreographer so that refresh rate callbacks can be dispatched from DMS. private void registerNativeChoreographerForRefreshRateCallbacks() { /** * Called from AChoreographer via JNI. * Registers AChoreographer so that refresh rate callbacks can be dispatched from DMS. * Public for unit testing to be able to call this method. */ @VisibleForTesting public void registerNativeChoreographerForRefreshRateCallbacks() { synchronized (mLock) { registerCallbackIfNeededLocked(); mDispatchNativeCallbacks = true; registerCallbackIfNeededLocked(); updateCallbackIfNeededLocked(); DisplayInfo display = getDisplayInfoLocked(Display.DEFAULT_DISPLAY); if (display != null) { // We need to tell AChoreographer instances the current refresh rate so that apps Loading @@ -1063,11 +1073,16 @@ public final class DisplayManagerGlobal { } } // Called from AChoreographer via JNI. // Unregisters AChoreographer from receiving refresh rate callbacks. private void unregisterNativeChoreographerForRefreshRateCallbacks() { /** * Called from AChoreographer via JNI. * Unregisters AChoreographer from receiving refresh rate callbacks. * Public for unit testing to be able to call this method. */ @VisibleForTesting public void unregisterNativeChoreographerForRefreshRateCallbacks() { synchronized (mLock) { mDispatchNativeCallbacks = false; updateCallbackIfNeededLocked(); } } } core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java +41 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; Loading Loading @@ -121,6 +122,46 @@ public class DisplayManagerGlobalTest { Mockito.verifyZeroInteractions(mListener); } @Test public void testDisplayManagerGlobalRegistersWithDisplayManager_WhenThereAreNoOtherListeners() throws RemoteException { mDisplayManagerGlobal.registerNativeChoreographerForRefreshRateCallbacks(); Mockito.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(ALL_DISPLAY_EVENTS)); mDisplayManagerGlobal.unregisterNativeChoreographerForRefreshRateCallbacks(); Mockito.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(0L)); } @Test public void testDisplayManagerGlobalRegistersWithDisplayManager_WhenThereAreListeners() throws RemoteException { mDisplayManagerGlobal.registerDisplayListener(mListener, mHandler, DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS); InOrder inOrder = Mockito.inOrder(mDisplayManager); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.registerNativeChoreographerForRefreshRateCallbacks(); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(ALL_DISPLAY_EVENTS | DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.unregisterNativeChoreographerForRefreshRateCallbacks(); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.unregisterDisplayListener(mListener); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(0L)); } private void waitForHandler() { mHandler.runWithScissors(() -> { }, 0); } Loading Loading
core/java/android/hardware/display/DisplayManagerGlobal.java +22 −7 Original line number Diff line number Diff line Loading @@ -361,6 +361,11 @@ public final class DisplayManagerGlobal { for (int i = 0; i < numListeners; i++) { mask |= mDisplayListeners.get(i).mEventsMask; } if (mDispatchNativeCallbacks) { mask |= DisplayManager.EVENT_FLAG_DISPLAY_ADDED | DisplayManager.EVENT_FLAG_DISPLAY_CHANGED | DisplayManager.EVENT_FLAG_DISPLAY_REMOVED; } return mask; } Loading Loading @@ -1047,12 +1052,17 @@ public final class DisplayManagerGlobal { private static native void nSignalNativeCallbacks(float refreshRate); // Called from AChoreographer via JNI. // Registers AChoreographer so that refresh rate callbacks can be dispatched from DMS. private void registerNativeChoreographerForRefreshRateCallbacks() { /** * Called from AChoreographer via JNI. * Registers AChoreographer so that refresh rate callbacks can be dispatched from DMS. * Public for unit testing to be able to call this method. */ @VisibleForTesting public void registerNativeChoreographerForRefreshRateCallbacks() { synchronized (mLock) { registerCallbackIfNeededLocked(); mDispatchNativeCallbacks = true; registerCallbackIfNeededLocked(); updateCallbackIfNeededLocked(); DisplayInfo display = getDisplayInfoLocked(Display.DEFAULT_DISPLAY); if (display != null) { // We need to tell AChoreographer instances the current refresh rate so that apps Loading @@ -1063,11 +1073,16 @@ public final class DisplayManagerGlobal { } } // Called from AChoreographer via JNI. // Unregisters AChoreographer from receiving refresh rate callbacks. private void unregisterNativeChoreographerForRefreshRateCallbacks() { /** * Called from AChoreographer via JNI. * Unregisters AChoreographer from receiving refresh rate callbacks. * Public for unit testing to be able to call this method. */ @VisibleForTesting public void unregisterNativeChoreographerForRefreshRateCallbacks() { synchronized (mLock) { mDispatchNativeCallbacks = false; updateCallbackIfNeededLocked(); } } }
core/tests/coretests/src/android/hardware/display/DisplayManagerGlobalTest.java +41 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; Loading Loading @@ -121,6 +122,46 @@ public class DisplayManagerGlobalTest { Mockito.verifyZeroInteractions(mListener); } @Test public void testDisplayManagerGlobalRegistersWithDisplayManager_WhenThereAreNoOtherListeners() throws RemoteException { mDisplayManagerGlobal.registerNativeChoreographerForRefreshRateCallbacks(); Mockito.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(ALL_DISPLAY_EVENTS)); mDisplayManagerGlobal.unregisterNativeChoreographerForRefreshRateCallbacks(); Mockito.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(0L)); } @Test public void testDisplayManagerGlobalRegistersWithDisplayManager_WhenThereAreListeners() throws RemoteException { mDisplayManagerGlobal.registerDisplayListener(mListener, mHandler, DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS); InOrder inOrder = Mockito.inOrder(mDisplayManager); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.registerNativeChoreographerForRefreshRateCallbacks(); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(ALL_DISPLAY_EVENTS | DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.unregisterNativeChoreographerForRefreshRateCallbacks(); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS)); mDisplayManagerGlobal.unregisterDisplayListener(mListener); inOrder.verify(mDisplayManager) .registerCallbackWithEventMask(mCallbackCaptor.capture(), eq(0L)); } private void waitForHandler() { mHandler.runWithScissors(() -> { }, 0); } Loading