diff options
| author | 2024-11-04 15:03:04 +0800 | |
|---|---|---|
| committer | 2024-11-04 15:03:31 +0800 | |
| commit | e820781d5b95696446d6eeaf88b1185d2cba11a9 (patch) | |
| tree | 48879176fbfda82d07a83ee60766f59895d06e74 | |
| parent | 38c9e553a2bee27e7417dfa963f9b8c3f0a382d3 (diff) | |
Remove enabled flag explicit_refresh_rate_hints
It has been enabled for a year.
Bug: 300019131
Test: TransitionTests#testTransitionsTriggerPerformanceHints
Flag: EXEMPT removing com.android.window.flags.explicit_refresh_rate_hints
Change-Id: I26b717c8ac6c53faef5d1a51b65ea490643a2146
8 files changed, 27 insertions, 215 deletions
diff --git a/core/java/android/window/flags/window_surfaces.aconfig b/core/java/android/window/flags/window_surfaces.aconfig index 460df3103488..392c307de7ba 100644 --- a/core/java/android/window/flags/window_surfaces.aconfig +++ b/core/java/android/window/flags/window_surfaces.aconfig @@ -13,14 +13,6 @@ flag { flag { namespace: "window_surfaces" - name: "explicit_refresh_rate_hints" - description: "Performance related hints during transitions" - is_fixed_read_only: true - bug: "300019131" -} - -flag { - namespace: "window_surfaces" name: "delete_capture_display" description: "Delete uses of ScreenCapture#captureDisplay" is_fixed_read_only: true diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java index 2a5a519272c7..77e041ee7cdb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java @@ -401,9 +401,6 @@ public abstract class WMShellBaseModule { ShellInit shellInit, ShellCommandHandler shellCommandHandler, RootTaskDisplayAreaOrganizer rootTdaOrganizer) { - if (!com.android.window.flags.Flags.explicitRefreshRateHints()) { - return Optional.empty(); - } final PerfHintController perfHintController = new PerfHintController(context, shellInit, shellCommandHandler, rootTdaOrganizer); return Optional.of(perfHintController.getHinter()); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index d6ded51f538b..a066e4d52c77 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -159,7 +159,6 @@ import static com.android.server.wm.utils.DisplayInfoOverrides.WM_OVERRIDE_FIELD import static com.android.server.wm.utils.DisplayInfoOverrides.copyDisplayInfoFields; import static com.android.server.wm.utils.RegionUtils.forEachRectReverse; import static com.android.server.wm.utils.RegionUtils.rectListToRegion; -import static com.android.window.flags.Flags.explicitRefreshRateHints; import android.annotation.IntDef; import android.annotation.NonNull; @@ -3426,14 +3425,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (!mWmService.mSupportsHighPerfTransitions) { return; } - if (!explicitRefreshRateHints()) { - if (enable) { - getPendingTransaction().setEarlyWakeupStart(); - } else { - getPendingTransaction().setEarlyWakeupEnd(); - } - return; - } if (enable) { if (mTransitionPrefSession == null) { mTransitionPrefSession = mWmService.mSystemPerformanceHinter.createSession( @@ -3446,10 +3437,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } void enableHighFrameRate(boolean enable) { - if (!explicitRefreshRateHints()) { - // Done by RefreshRatePolicy. - return; - } if (enable) { if (mHighFrameRateSession == null) { mHighFrameRateSession = mWmService.mSystemPerformanceHinter.createSession( diff --git a/services/core/java/com/android/server/wm/RefreshRatePolicy.java b/services/core/java/com/android/server/wm/RefreshRatePolicy.java index 8cab7d979d07..e4c34ed52359 100644 --- a/services/core/java/com/android/server/wm/RefreshRatePolicy.java +++ b/services/core/java/com/android/server/wm/RefreshRatePolicy.java @@ -19,8 +19,6 @@ package com.android.server.wm; import static android.hardware.display.DisplayManager.SWITCHING_TYPE_NONE; import static android.hardware.display.DisplayManager.SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY; -import static com.android.window.flags.Flags.explicitRefreshRateHints; - import android.hardware.display.DisplayManager; import android.view.Display; import android.view.Display.Mode; @@ -60,7 +58,6 @@ class RefreshRatePolicy { } private final DisplayInfo mDisplayInfo; - private final Mode mDefaultMode; private final Mode mLowRefreshRateMode; private final PackageRefreshRate mNonHighRefreshRatePackages = new PackageRefreshRate(); private final HighRefreshRateDenylist mHighRefreshRateDenylist; @@ -92,8 +89,7 @@ class RefreshRatePolicy { RefreshRatePolicy(WindowManagerService wmService, DisplayInfo displayInfo, HighRefreshRateDenylist denylist) { mDisplayInfo = displayInfo; - mDefaultMode = displayInfo.getDefaultMode(); - mLowRefreshRateMode = findLowRefreshRateMode(displayInfo, mDefaultMode); + mLowRefreshRateMode = findLowRefreshRateMode(displayInfo); mHighRefreshRateDenylist = denylist; mWmService = wmService; } @@ -102,7 +98,8 @@ class RefreshRatePolicy { * Finds the mode id with the lowest refresh rate which is >= 60hz and same resolution as the * default mode. */ - private Mode findLowRefreshRateMode(DisplayInfo displayInfo, Mode defaultMode) { + private Mode findLowRefreshRateMode(DisplayInfo displayInfo) { + final Mode defaultMode = displayInfo.getDefaultMode(); float[] refreshRates = displayInfo.getDefaultRefreshRates(); float bestRefreshRate = defaultMode.getRefreshRate(); mMinSupportedRefreshRate = bestRefreshRate; @@ -135,33 +132,6 @@ class RefreshRatePolicy { // Unspecified, use default mode. return 0; } - - // If app is animating, it's not able to control refresh rate because we want the animation - // to run in default refresh rate. But if the display size of default mode is different - // from the using preferred mode, then still keep the preferred mode to avoid disturbing - // the animation. - if (!explicitRefreshRateHints() && w.isAnimationRunningSelfOrParent()) { - Display.Mode preferredMode = null; - for (Display.Mode mode : mDisplayInfo.supportedModes) { - if (preferredDisplayModeId == mode.getModeId()) { - preferredMode = mode; - break; - } - } - if (preferredMode != null) { - final int pW = preferredMode.getPhysicalWidth(); - final int pH = preferredMode.getPhysicalHeight(); - if ((pW != mDefaultMode.getPhysicalWidth() - || pH != mDefaultMode.getPhysicalHeight()) - && pW == mDisplayInfo.getNaturalWidth() - && pH == mDisplayInfo.getNaturalHeight()) { - // Prefer not to change display size when animating. - return preferredDisplayModeId; - } - } - return 0; - } - return preferredDisplayModeId; } @@ -264,12 +234,6 @@ class RefreshRatePolicy { return w.mFrameRateVote.reset(); } - // If app is animating, it's not able to control refresh rate because we want the animation - // to run in default refresh rate. - if (!explicitRefreshRateHints() && w.isAnimationRunningSelfOrParent()) { - return w.mFrameRateVote.reset(); - } - // If the app set a preferredDisplayModeId, the preferred refresh rate is the refresh rate // of that mode id. if (refreshRateSwitchingType != SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 614187682ef4..86cd0c986792 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -181,7 +181,6 @@ import static com.android.server.wm.WindowStateProto.UNRESTRICTED_KEEP_CLEAR_ARE import static com.android.server.wm.WindowStateProto.VIEW_VISIBILITY; import static com.android.server.wm.WindowStateProto.WINDOW_CONTAINER; import static com.android.server.wm.WindowStateProto.WINDOW_FRAMES; -import static com.android.window.flags.Flags.explicitRefreshRateHints; import static com.android.window.flags.Flags.secureWindowState; import static com.android.window.flags.Flags.surfaceTrustedOverlay; @@ -5294,12 +5293,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (voteChanged) { getPendingTransaction() .setFrameRate(mSurfaceControl, mFrameRateVote.mRefreshRate, - mFrameRateVote.mCompatibility, Surface.CHANGE_FRAME_RATE_ALWAYS); - if (explicitRefreshRateHints()) { - getPendingTransaction().setFrameRateSelectionStrategy(mSurfaceControl, - mFrameRateVote.mSelectionStrategy); - } - + mFrameRateVote.mCompatibility, Surface.CHANGE_FRAME_RATE_ALWAYS) + .setFrameRateSelectionStrategy(mSurfaceControl, + mFrameRateVote.mSelectionStrategy); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java index eacb8e9d628d..a0c5b54603f9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/FrameRateSelectionPriorityTests.java @@ -25,7 +25,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq; import static com.android.dx.mockito.inline.extended.ExtendedMockito.never; import static com.android.dx.mockito.inline.extended.ExtendedMockito.times; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; -import static com.android.window.flags.Flags.explicitRefreshRateHints; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -190,14 +189,9 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { verify(appWindow.getPendingTransaction(), times(1)).setFrameRate( eq(appWindow.getSurfaceControl()), anyFloat(), eq(Surface.FRAME_RATE_COMPATIBILITY_EXACT), eq(Surface.CHANGE_FRAME_RATE_ALWAYS)); - if (explicitRefreshRateHints()) { - verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( - appWindow.getSurfaceControl(), - SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); - } else { - verify(appWindow.getPendingTransaction(), never()).setFrameRateSelectionStrategy( - any(SurfaceControl.class), anyInt()); - } + verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( + appWindow.getSurfaceControl(), + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); } @Test @@ -226,14 +220,9 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { verify(appWindow.getPendingTransaction(), times(1)).setFrameRate( eq(appWindow.getSurfaceControl()), anyFloat(), eq(Surface.FRAME_RATE_COMPATIBILITY_EXACT), eq(Surface.CHANGE_FRAME_RATE_ALWAYS)); - if (explicitRefreshRateHints()) { - verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( - appWindow.getSurfaceControl(), - SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); - } else { - verify(appWindow.getPendingTransaction(), never()).setFrameRateSelectionStrategy( - any(SurfaceControl.class), anyInt()); - } + verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( + appWindow.getSurfaceControl(), + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); } @Test @@ -288,14 +277,9 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { verify(appWindow.getPendingTransaction(), times(1)).setFrameRate( appWindow.getSurfaceControl(), 60, Surface.FRAME_RATE_COMPATIBILITY_EXACT, Surface.CHANGE_FRAME_RATE_ALWAYS); - if (explicitRefreshRateHints()) { - verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( - appWindow.getSurfaceControl(), - SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); - } else { - verify(appWindow.getPendingTransaction(), never()).setFrameRateSelectionStrategy( - any(SurfaceControl.class), anyInt()); - } + verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( + appWindow.getSurfaceControl(), + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); } @Test @@ -352,13 +336,8 @@ public class FrameRateSelectionPriorityTests extends WindowTestsBase { verify(appWindow.getPendingTransaction(), times(1)).setFrameRate( appWindow.getSurfaceControl(), 60, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT, Surface.CHANGE_FRAME_RATE_ALWAYS); - if (explicitRefreshRateHints()) { - verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( - appWindow.getSurfaceControl(), - SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); - } else { - verify(appWindow.getPendingTransaction(), never()).setFrameRateSelectionStrategy( - any(SurfaceControl.class), anyInt()); - } + verify(appWindow.getPendingTransaction(), times(1)).setFrameRateSelectionStrategy( + appWindow.getSurfaceControl(), + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java index 3fa38bfe7185..3d08ca2905f3 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RefreshRatePolicyTest.java @@ -21,14 +21,11 @@ import static android.view.SurfaceControl.RefreshRateRange.FLOAT_TOLERANCE; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; -import static com.android.window.flags.Flags.explicitRefreshRateHints; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.hardware.display.DisplayManager; @@ -36,7 +33,6 @@ import android.os.Parcel; import android.platform.test.annotations.Presubmit; import android.view.Display.Mode; import android.view.Surface; -import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import androidx.test.filters.SmallTest; @@ -274,97 +270,6 @@ public class RefreshRatePolicyTest extends WindowTestsBase { } @Test - public void testAnimatingAppOverridePreferredModeId() { - final WindowState overrideWindow = createWindow("overrideWindow"); - overrideWindow.mAttrs.packageName = "com.android.test"; - overrideWindow.mAttrs.preferredDisplayModeId = LOW_MODE_ID; - parcelLayoutParams(overrideWindow); - assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow)); - assertTrue(mPolicy.updateFrameRateVote(overrideWindow)); - assertEquals(FRAME_RATE_VOTE_LOW_EXACT, overrideWindow.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); - - if (explicitRefreshRateHints()) { - return; - } - overrideWindow.mActivityRecord.mSurfaceAnimator.startAnimation( - overrideWindow.getPendingTransaction(), mock(AnimationAdapter.class), - false /* hidden */, ANIMATION_TYPE_APP_TRANSITION); - assertEquals(0, mPolicy.getPreferredModeId(overrideWindow)); - assertTrue(mPolicy.updateFrameRateVote(overrideWindow)); - assertEquals(FRAME_RATE_VOTE_NONE, overrideWindow.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); - - // Use default mode if it is animating by shell transition. - overrideWindow.mActivityRecord.mSurfaceAnimator.cancelAnimation(); - registerTestTransitionPlayer(); - final Transition transition = overrideWindow.mTransitionController.createTransition( - WindowManager.TRANSIT_OPEN); - transition.collect(overrideWindow.mActivityRecord); - assertEquals(0, mPolicy.getPreferredModeId(overrideWindow)); - - // If there will be display size change when switching from preferred mode to default mode, - // then keep the current preferred mode during animating. - mDisplayInfo = spy(mDisplayInfo); - final Mode defaultMode = new Mode(4321 /* width */, 1234 /* height */, LOW_REFRESH_RATE); - doReturn(defaultMode).when(mDisplayInfo).getDefaultMode(); - mPolicy = new RefreshRatePolicy(mWm, mDisplayInfo, mDenylist); - assertEquals(LOW_MODE_ID, mPolicy.getPreferredModeId(overrideWindow)); - } - - @Test - public void testAnimatingAppOverridePreferredRefreshRate() { - final WindowState overrideWindow = createWindow("overrideWindow"); - overrideWindow.mAttrs.packageName = "com.android.test"; - overrideWindow.mAttrs.preferredRefreshRate = LOW_REFRESH_RATE; - parcelLayoutParams(overrideWindow); - assertEquals(0, mPolicy.getPreferredModeId(overrideWindow)); - assertTrue(mPolicy.updateFrameRateVote(overrideWindow)); - assertEquals(FRAME_RATE_VOTE_LOW_PREFERRED, overrideWindow.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); - - if (explicitRefreshRateHints()) { - return; - } - overrideWindow.mActivityRecord.mSurfaceAnimator.startAnimation( - overrideWindow.getPendingTransaction(), mock(AnimationAdapter.class), - false /* hidden */, ANIMATION_TYPE_APP_TRANSITION); - assertEquals(0, mPolicy.getPreferredModeId(overrideWindow)); - assertTrue(mPolicy.updateFrameRateVote(overrideWindow)); - assertEquals(FRAME_RATE_VOTE_NONE, overrideWindow.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE); - } - - @Test - public void testAnimatingDenylist() { - final WindowState window = createWindow("overrideWindow"); - window.mAttrs.packageName = "com.android.test"; - parcelLayoutParams(window); - when(mDenylist.isDenylisted("com.android.test")).thenReturn(true); - assertEquals(0, mPolicy.getPreferredModeId(window)); - assertTrue(mPolicy.updateFrameRateVote(window)); - assertEquals(FRAME_RATE_VOTE_DENY_LIST, window.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE); - - if (explicitRefreshRateHints()) { - return; - } - window.mActivityRecord.mSurfaceAnimator.startAnimation( - window.getPendingTransaction(), mock(AnimationAdapter.class), - false /* hidden */, ANIMATION_TYPE_APP_TRANSITION); - assertEquals(0, mPolicy.getPreferredModeId(window)); - assertTrue(mPolicy.updateFrameRateVote(window)); - assertEquals(FRAME_RATE_VOTE_NONE, window.mFrameRateVote); - assertEquals(0, mPolicy.getPreferredMinRefreshRate(window), FLOAT_TOLERANCE); - assertEquals(0, mPolicy.getPreferredMaxRefreshRate(window), FLOAT_TOLERANCE); - } - - @Test public void testAnimatingCamera() { final WindowState cameraUsingWindow = createWindow("cameraUsingWindow"); cameraUsingWindow.mAttrs.packageName = "com.android.test"; diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java index e8779c2b9ead..21524b7dcbf4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java @@ -51,7 +51,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.server.wm.WindowContainer.POSITION_TOP; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; -import static com.android.window.flags.Flags.explicitRefreshRateHints; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -2883,17 +2882,14 @@ public class TransitionTests extends WindowTestsBase { @Test public void testTransitionsTriggerPerformanceHints() { - final boolean explicitRefreshRateHints = explicitRefreshRateHints(); final var session = new SystemPerformanceHinter.HighPerfSession[1]; - if (explicitRefreshRateHints) { - final SystemPerformanceHinter perfHinter = mWm.mSystemPerformanceHinter; - spyOn(perfHinter); - doAnswer(invocation -> { - session[0] = (SystemPerformanceHinter.HighPerfSession) invocation.callRealMethod(); - spyOn(session[0]); - return session[0]; - }).when(perfHinter).createSession(anyInt(), anyInt(), anyString()); - } + final SystemPerformanceHinter perfHinter = mWm.mSystemPerformanceHinter; + spyOn(perfHinter); + doAnswer(invocation -> { + session[0] = (SystemPerformanceHinter.HighPerfSession) invocation.callRealMethod(); + spyOn(session[0]); + return session[0]; + }).when(perfHinter).createSession(anyInt(), anyInt(), anyString()); final TransitionController controller = mDisplayContent.mTransitionController; final TestTransitionPlayer player = registerTestTransitionPlayer(); final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true).build(); @@ -2905,15 +2901,11 @@ public class TransitionTests extends WindowTestsBase { player.start(); verify(mDisplayContent).enableHighPerfTransition(true); - if (explicitRefreshRateHints) { - verify(session[0]).start(); - } + verify(session[0]).start(); player.finish(); verify(mDisplayContent).enableHighPerfTransition(false); - if (explicitRefreshRateHints) { - verify(session[0]).close(); - } + verify(session[0]).close(); } @Test |