Loading services/core/java/com/android/server/display/DisplayManagerService.java +13 −26 Original line number Diff line number Diff line Loading @@ -105,7 +105,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.provider.Settings; import android.sysprop.DisplayProperties; import android.text.TextUtils; import android.util.ArraySet; import android.util.EventLog; Loading Loading @@ -451,8 +450,6 @@ public final class DisplayManagerService extends SystemService { } }; private final boolean mAllowNonNativeRefreshRateOverride; private final BrightnessSynchronizer mBrightnessSynchronizer; /** Loading Loading @@ -506,7 +503,6 @@ public final class DisplayManagerService extends SystemService { ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces(); mWideColorSpace = colorSpaces[1]; mOverlayProperties = SurfaceControl.getOverlaySupport(); mAllowNonNativeRefreshRateOverride = mInjector.getAllowNonNativeRefreshRateOverride(); mSystemReady = false; } Loading Loading @@ -930,7 +926,6 @@ public final class DisplayManagerService extends SystemService { } } if (mAllowNonNativeRefreshRateOverride) { overriddenInfo.refreshRateOverride = frameRateHz; if (!CompatChanges.isChangeEnabled(DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE, callingUid)) { Loading @@ -947,9 +942,6 @@ public final class DisplayManagerService extends SystemService { return overriddenInfo; } return info; } private DisplayInfo getDisplayInfoInternal(int displayId, int callingUid) { synchronized (mSyncRoot) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId); Loading Loading @@ -2602,11 +2594,6 @@ public final class DisplayManagerService extends SystemService { long getDefaultDisplayDelayTimeout() { return WAIT_FOR_DEFAULT_DISPLAY_TIMEOUT; } boolean getAllowNonNativeRefreshRateOverride() { return DisplayProperties .debug_allow_non_native_refresh_rate_override().orElse(true); } } @VisibleForTesting Loading services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java +28 −60 Original line number Diff line number Diff line Loading @@ -171,22 +171,6 @@ public class DisplayManagerServiceTest { private final DisplayManagerService.Injector mBasicInjector = new BasicInjector(); private final DisplayManagerService.Injector mAllowNonNativeRefreshRateOverrideInjector = new BasicInjector() { @Override boolean getAllowNonNativeRefreshRateOverride() { return true; } }; private final DisplayManagerService.Injector mDenyNonNativeRefreshRateOverrideInjector = new BasicInjector() { @Override boolean getAllowNonNativeRefreshRateOverride() { return false; } }; @Mock InputManagerInternal mMockInputManagerInternal; @Mock VirtualDeviceManagerInternal mMockVirtualDeviceManagerInternal; @Mock IVirtualDisplayCallback.Stub mMockAppToken; Loading Loading @@ -1113,13 +1097,32 @@ public class DisplayManagerServiceTest { } /** * Tests that the frame rate override is updated accordingly to the * allowNonNativeRefreshRateOverride policy. * Tests that the frame rate override is returning the correct value from * DisplayInfo#getRefreshRate */ @Test public void testDisplayInfoNonNativeFrameRateOverride() throws Exception { testDisplayInfoNonNativeFrameRateOverride(mDenyNonNativeRefreshRateOverrideInjector); testDisplayInfoNonNativeFrameRateOverride(mAllowNonNativeRefreshRateOverrideInjector); DisplayManagerService displayManager = new DisplayManagerService(mContext, mBasicInjector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); FakeDisplayDevice displayDevice = createFakeDisplayDevice(displayManager, new float[]{60f}); int displayId = getDisplayIdForDisplayDevice(displayManager, displayManagerBinderService, displayDevice); DisplayInfo displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(60f, displayInfo.getRefreshRate(), 0.01f); updateFrameRateOverride(displayManager, displayDevice, new DisplayEventReceiver.FrameRateOverride[]{ new DisplayEventReceiver.FrameRateOverride( Process.myUid(), 20f) }); displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(20f, displayInfo.getRefreshRate(), 0.01f); } /** Loading Loading @@ -1147,10 +1150,7 @@ public class DisplayManagerServiceTest { @Test @DisableCompatChanges({DisplayManagerService.DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE}) public void testDisplayInfoNonNativeFrameRateOverrideModeCompat() throws Exception { testDisplayInfoNonNativeFrameRateOverrideMode(mDenyNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ false); testDisplayInfoNonNativeFrameRateOverrideMode(mAllowNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ false); testDisplayInfoNonNativeFrameRateOverrideMode(/*compatChangeEnabled*/ false); } /** Loading @@ -1159,10 +1159,7 @@ public class DisplayManagerServiceTest { @Test @EnableCompatChanges({DisplayManagerService.DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE}) public void testDisplayInfoNonNativeFrameRateOverrideMode() throws Exception { testDisplayInfoNonNativeFrameRateOverrideMode(mDenyNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ true); testDisplayInfoNonNativeFrameRateOverrideMode(mAllowNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ true); testDisplayInfoNonNativeFrameRateOverrideMode(/*compatChangeEnabled*/ true); } /** Loading Loading @@ -1385,10 +1382,9 @@ public class DisplayManagerServiceTest { assertEquals(expectedMode, displayInfo.getMode()); } private void testDisplayInfoNonNativeFrameRateOverrideMode( DisplayManagerService.Injector injector, boolean compatChangeEnabled) { private void testDisplayInfoNonNativeFrameRateOverrideMode(boolean compatChangeEnabled) { DisplayManagerService displayManager = new DisplayManagerService(mContext, injector); new DisplayManagerService(mContext, mBasicInjector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); Loading @@ -1410,40 +1406,12 @@ public class DisplayManagerServiceTest { Display.Mode expectedMode; if (compatChangeEnabled) { expectedMode = new Display.Mode(1, 100, 200, 60f); } else if (injector.getAllowNonNativeRefreshRateOverride()) { expectedMode = new Display.Mode(255, 100, 200, 20f); } else { expectedMode = new Display.Mode(1, 100, 200, 60f); expectedMode = new Display.Mode(255, 100, 200, 20f); } assertEquals(expectedMode, displayInfo.getMode()); } private void testDisplayInfoNonNativeFrameRateOverride( DisplayManagerService.Injector injector) { DisplayManagerService displayManager = new DisplayManagerService(mContext, injector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); FakeDisplayDevice displayDevice = createFakeDisplayDevice(displayManager, new float[]{60f}); int displayId = getDisplayIdForDisplayDevice(displayManager, displayManagerBinderService, displayDevice); DisplayInfo displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(60f, displayInfo.getRefreshRate(), 0.01f); updateFrameRateOverride(displayManager, displayDevice, new DisplayEventReceiver.FrameRateOverride[]{ new DisplayEventReceiver.FrameRateOverride( Process.myUid(), 20f) }); displayInfo = displayManagerBinderService.getDisplayInfo(displayId); float expectedRefreshRate = injector.getAllowNonNativeRefreshRateOverride() ? 20f : 60f; assertEquals(expectedRefreshRate, displayInfo.getRefreshRate(), 0.01f); } private int getDisplayIdForDisplayDevice( DisplayManagerService displayManager, DisplayManagerService.BinderService displayManagerBinderService, Loading Loading
services/core/java/com/android/server/display/DisplayManagerService.java +13 −26 Original line number Diff line number Diff line Loading @@ -105,7 +105,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.provider.Settings; import android.sysprop.DisplayProperties; import android.text.TextUtils; import android.util.ArraySet; import android.util.EventLog; Loading Loading @@ -451,8 +450,6 @@ public final class DisplayManagerService extends SystemService { } }; private final boolean mAllowNonNativeRefreshRateOverride; private final BrightnessSynchronizer mBrightnessSynchronizer; /** Loading Loading @@ -506,7 +503,6 @@ public final class DisplayManagerService extends SystemService { ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces(); mWideColorSpace = colorSpaces[1]; mOverlayProperties = SurfaceControl.getOverlaySupport(); mAllowNonNativeRefreshRateOverride = mInjector.getAllowNonNativeRefreshRateOverride(); mSystemReady = false; } Loading Loading @@ -930,7 +926,6 @@ public final class DisplayManagerService extends SystemService { } } if (mAllowNonNativeRefreshRateOverride) { overriddenInfo.refreshRateOverride = frameRateHz; if (!CompatChanges.isChangeEnabled(DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE, callingUid)) { Loading @@ -947,9 +942,6 @@ public final class DisplayManagerService extends SystemService { return overriddenInfo; } return info; } private DisplayInfo getDisplayInfoInternal(int displayId, int callingUid) { synchronized (mSyncRoot) { final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId); Loading Loading @@ -2602,11 +2594,6 @@ public final class DisplayManagerService extends SystemService { long getDefaultDisplayDelayTimeout() { return WAIT_FOR_DEFAULT_DISPLAY_TIMEOUT; } boolean getAllowNonNativeRefreshRateOverride() { return DisplayProperties .debug_allow_non_native_refresh_rate_override().orElse(true); } } @VisibleForTesting Loading
services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java +28 −60 Original line number Diff line number Diff line Loading @@ -171,22 +171,6 @@ public class DisplayManagerServiceTest { private final DisplayManagerService.Injector mBasicInjector = new BasicInjector(); private final DisplayManagerService.Injector mAllowNonNativeRefreshRateOverrideInjector = new BasicInjector() { @Override boolean getAllowNonNativeRefreshRateOverride() { return true; } }; private final DisplayManagerService.Injector mDenyNonNativeRefreshRateOverrideInjector = new BasicInjector() { @Override boolean getAllowNonNativeRefreshRateOverride() { return false; } }; @Mock InputManagerInternal mMockInputManagerInternal; @Mock VirtualDeviceManagerInternal mMockVirtualDeviceManagerInternal; @Mock IVirtualDisplayCallback.Stub mMockAppToken; Loading Loading @@ -1113,13 +1097,32 @@ public class DisplayManagerServiceTest { } /** * Tests that the frame rate override is updated accordingly to the * allowNonNativeRefreshRateOverride policy. * Tests that the frame rate override is returning the correct value from * DisplayInfo#getRefreshRate */ @Test public void testDisplayInfoNonNativeFrameRateOverride() throws Exception { testDisplayInfoNonNativeFrameRateOverride(mDenyNonNativeRefreshRateOverrideInjector); testDisplayInfoNonNativeFrameRateOverride(mAllowNonNativeRefreshRateOverrideInjector); DisplayManagerService displayManager = new DisplayManagerService(mContext, mBasicInjector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); FakeDisplayDevice displayDevice = createFakeDisplayDevice(displayManager, new float[]{60f}); int displayId = getDisplayIdForDisplayDevice(displayManager, displayManagerBinderService, displayDevice); DisplayInfo displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(60f, displayInfo.getRefreshRate(), 0.01f); updateFrameRateOverride(displayManager, displayDevice, new DisplayEventReceiver.FrameRateOverride[]{ new DisplayEventReceiver.FrameRateOverride( Process.myUid(), 20f) }); displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(20f, displayInfo.getRefreshRate(), 0.01f); } /** Loading Loading @@ -1147,10 +1150,7 @@ public class DisplayManagerServiceTest { @Test @DisableCompatChanges({DisplayManagerService.DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE}) public void testDisplayInfoNonNativeFrameRateOverrideModeCompat() throws Exception { testDisplayInfoNonNativeFrameRateOverrideMode(mDenyNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ false); testDisplayInfoNonNativeFrameRateOverrideMode(mAllowNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ false); testDisplayInfoNonNativeFrameRateOverrideMode(/*compatChangeEnabled*/ false); } /** Loading @@ -1159,10 +1159,7 @@ public class DisplayManagerServiceTest { @Test @EnableCompatChanges({DisplayManagerService.DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE}) public void testDisplayInfoNonNativeFrameRateOverrideMode() throws Exception { testDisplayInfoNonNativeFrameRateOverrideMode(mDenyNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ true); testDisplayInfoNonNativeFrameRateOverrideMode(mAllowNonNativeRefreshRateOverrideInjector, /*compatChangeEnabled*/ true); testDisplayInfoNonNativeFrameRateOverrideMode(/*compatChangeEnabled*/ true); } /** Loading Loading @@ -1385,10 +1382,9 @@ public class DisplayManagerServiceTest { assertEquals(expectedMode, displayInfo.getMode()); } private void testDisplayInfoNonNativeFrameRateOverrideMode( DisplayManagerService.Injector injector, boolean compatChangeEnabled) { private void testDisplayInfoNonNativeFrameRateOverrideMode(boolean compatChangeEnabled) { DisplayManagerService displayManager = new DisplayManagerService(mContext, injector); new DisplayManagerService(mContext, mBasicInjector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); Loading @@ -1410,40 +1406,12 @@ public class DisplayManagerServiceTest { Display.Mode expectedMode; if (compatChangeEnabled) { expectedMode = new Display.Mode(1, 100, 200, 60f); } else if (injector.getAllowNonNativeRefreshRateOverride()) { expectedMode = new Display.Mode(255, 100, 200, 20f); } else { expectedMode = new Display.Mode(1, 100, 200, 60f); expectedMode = new Display.Mode(255, 100, 200, 20f); } assertEquals(expectedMode, displayInfo.getMode()); } private void testDisplayInfoNonNativeFrameRateOverride( DisplayManagerService.Injector injector) { DisplayManagerService displayManager = new DisplayManagerService(mContext, injector); DisplayManagerService.BinderService displayManagerBinderService = displayManager.new BinderService(); registerDefaultDisplays(displayManager); displayManager.onBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY); FakeDisplayDevice displayDevice = createFakeDisplayDevice(displayManager, new float[]{60f}); int displayId = getDisplayIdForDisplayDevice(displayManager, displayManagerBinderService, displayDevice); DisplayInfo displayInfo = displayManagerBinderService.getDisplayInfo(displayId); assertEquals(60f, displayInfo.getRefreshRate(), 0.01f); updateFrameRateOverride(displayManager, displayDevice, new DisplayEventReceiver.FrameRateOverride[]{ new DisplayEventReceiver.FrameRateOverride( Process.myUid(), 20f) }); displayInfo = displayManagerBinderService.getDisplayInfo(displayId); float expectedRefreshRate = injector.getAllowNonNativeRefreshRateOverride() ? 20f : 60f; assertEquals(expectedRefreshRate, displayInfo.getRefreshRate(), 0.01f); } private int getDisplayIdForDisplayDevice( DisplayManagerService displayManager, DisplayManagerService.BinderService displayManagerBinderService, Loading