diff options
| author | 2023-11-27 18:31:16 +0000 | |
|---|---|---|
| committer | 2023-11-27 18:31:16 +0000 | |
| commit | bea933df81f857e1e9258655a71a0b83a3187b7f (patch) | |
| tree | 603323fa1cdbd188ad3a912d7ad22c310cb48e27 | |
| parent | 20690ec5a0af072efabce1938c94912e1c51f2eb (diff) | |
| parent | c87d03a0797c9fc0d136da991f6937aa1a16bdb6 (diff) | |
Merge changes from topics "rename", "strategy-donotprop" into main
* changes:
Rename frame rate selection strategies
New selection strategy "DoNotPropagate"
Remove SF FrontEnd flag check from test
5 files changed, 51 insertions, 29 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 8befe8a2be85..23d0de32874f 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -859,33 +859,47 @@ public final class SurfaceControl implements Parcelable { /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"FRAME_RATE_SELECTION_STRATEGY_"}, - value = {FRAME_RATE_SELECTION_STRATEGY_SELF, - FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN}) + value = {FRAME_RATE_SELECTION_STRATEGY_PROPAGATE, + FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN, + FRAME_RATE_SELECTION_STRATEGY_SELF}) public @interface FrameRateSelectionStrategy {} // From window.h. Keep these in sync. /** * Default value. The layer uses its own frame rate specifications, assuming it has any - * specifications, instead of its parent's. + * specifications, instead of its parent's. If it does not have its own frame rate + * specifications, it will try to use its parent's. It will propagate its specifications to any + * descendants that do not have their own. + * * However, {@link #FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN} on an ancestor layer - * supersedes this behavior, meaning that this layer will inherit the frame rate specifications - * of that ancestor layer. + * supersedes this behavior, meaning that this layer will inherit frame rate specifications + * regardless of whether it has its own. * @hide */ - public static final int FRAME_RATE_SELECTION_STRATEGY_SELF = 0; + public static final int FRAME_RATE_SELECTION_STRATEGY_PROPAGATE = 0; /** * The layer's frame rate specifications will propagate to and override those of its descendant * layers. - * The layer with this strategy has the {@link #FRAME_RATE_SELECTION_STRATEGY_SELF} behavior - * for itself. This does mean that any parent or ancestor layer that also has the strategy - * {@link FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN} will override this layer's + * + * The layer itself has the {@link #FRAME_RATE_SELECTION_STRATEGY_PROPAGATE} behavior. + * Thus, ancestor layer that also has the strategy + * {@link #FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN} will override this layer's * frame rate specifications. * @hide */ public static final int FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN = 1; /** + * The layer's frame rate specifications will not propagate to its descendant + * layers, even if the descendant layer has no frame rate specifications. + * However, {@link #FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN} on an ancestor + * layer supersedes this behavior. + * @hide + */ + public static final int FRAME_RATE_SELECTION_STRATEGY_SELF = 2; + + /** * Builder class for {@link SurfaceControl} objects. * * By default the surface will be hidden, and have "unset" bounds, meaning it can diff --git a/core/java/android/window/SystemPerformanceHinter.java b/core/java/android/window/SystemPerformanceHinter.java index 5b0d8d1233c6..cc2329fc47cb 100644 --- a/core/java/android/window/SystemPerformanceHinter.java +++ b/core/java/android/window/SystemPerformanceHinter.java @@ -20,7 +20,7 @@ import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Surface.FRAME_RATE_CATEGORY_DEFAULT; import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH; import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN; -import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF; +import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_PROPAGATE; import android.annotation.IntDef; import android.annotation.NonNull; @@ -303,7 +303,7 @@ public class SystemPerformanceHinter { SurfaceControl displaySurfaceControl = mDisplayRootProvider.getRootForDisplay( session.displayId); mTransaction.setFrameRateSelectionStrategy(displaySurfaceControl, - FRAME_RATE_SELECTION_STRATEGY_SELF); + FRAME_RATE_SELECTION_STRATEGY_PROPAGATE); // smoothSwitchOnly is false to request a higher framerate, even if it means switching // the display mode will cause would jank on non-VRR devices because keeping a lower // refresh rate would mean a poorer user experience. diff --git a/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java b/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java index 6229530dc33f..3147eac30705 100644 --- a/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java +++ b/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java @@ -21,7 +21,7 @@ import static android.os.PerformanceHintManager.Session.CPU_LOAD_UP; import static android.view.Surface.FRAME_RATE_CATEGORY_DEFAULT; import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH; import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN; -import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF; +import static android.view.SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_PROPAGATE; import static android.window.SystemPerformanceHinter.HINT_ADPF; import static android.window.SystemPerformanceHinter.HINT_ALL; import static android.window.SystemPerformanceHinter.HINT_SF_EARLY_WAKEUP; @@ -170,7 +170,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), @@ -262,7 +262,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF and perf manager to clean up verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), @@ -283,7 +283,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF and perf manager to clean up verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), @@ -334,7 +334,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF and perf manager to clean up verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), @@ -385,7 +385,7 @@ public class SystemPerformanceHinterTests { session1.close(); verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mDefaultDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), @@ -410,7 +410,7 @@ public class SystemPerformanceHinterTests { anyInt()); verify(mTransaction).setFrameRateSelectionStrategy( eq(mSecondaryDisplayRoot), - eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + eq(FRAME_RATE_SELECTION_STRATEGY_PROPAGATE)); verify(mTransaction).setFrameRateCategory( eq(mSecondaryDisplayRoot), eq(FRAME_RATE_CATEGORY_DEFAULT), diff --git a/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/GraphicsActivity.java b/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/GraphicsActivity.java index 4548a7df6874..1e5f33f26dc2 100644 --- a/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/GraphicsActivity.java +++ b/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/GraphicsActivity.java @@ -710,9 +710,15 @@ public class GraphicsActivity extends Activity { float childFrameRate = Collections.max(frameRates); float parentFrameRate = childFrameRate / 2; int initialNumEvents = mModeChangedEvents.size(); - parent.setFrameRate(parentFrameRate); parent.setFrameRateSelectionStrategy(parentStrategy); - child.setFrameRate(childFrameRate); + + // For Self case, we want to test that child gets default behavior + if (parentStrategy == SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF) { + parent.setFrameRateCategory(Surface.FRAME_RATE_CATEGORY_NO_PREFERENCE); + } else { + parent.setFrameRate(parentFrameRate); + child.setFrameRate(childFrameRate); + } // Verify float expectedFrameRate = diff --git a/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/SurfaceControlTest.java b/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/SurfaceControlTest.java index bed9cff75e1d..29f6879f37c3 100644 --- a/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/SurfaceControlTest.java +++ b/tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/SurfaceControlTest.java @@ -16,11 +16,8 @@ package android.view.surfacecontroltests; -import static org.junit.Assume.assumeTrue; - import android.Manifest; import android.hardware.display.DisplayManager; -import android.os.SystemProperties; import android.support.test.uiautomator.UiDevice; import android.view.Surface; import android.view.SurfaceControl; @@ -54,10 +51,6 @@ public class SurfaceControlTest { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - // TODO(b/290634611): clean this up once SF new front end is enabled by default - assumeTrue(SystemProperties.getBoolean( - "persist.debug.sf.enable_layer_lifecycle_manager", false)); - uiDevice.wakeUp(); uiDevice.executeShellCommand("wm dismiss-keyguard"); @@ -118,10 +111,11 @@ public class SurfaceControlTest { } @Test - public void testSurfaceControlFrameRateSelectionStrategySelf() throws InterruptedException { + public void testSurfaceControlFrameRateSelectionStrategyPropagate() + throws InterruptedException { GraphicsActivity activity = mActivityRule.getActivity(); activity.testSurfaceControlFrameRateSelectionStrategy( - SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF); + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_PROPAGATE); } @Test @@ -131,4 +125,12 @@ public class SurfaceControlTest { activity.testSurfaceControlFrameRateSelectionStrategy( SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); } + + @Test + public void testSurfaceControlFrameRateSelectionStrategySelf() + throws InterruptedException { + GraphicsActivity activity = mActivityRule.getActivity(); + activity.testSurfaceControlFrameRateSelectionStrategy( + SurfaceControl.FRAME_RATE_SELECTION_STRATEGY_SELF); + } } |