summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rachel Lee <rnlee@google.com> 2023-11-27 18:31:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-11-27 18:31:16 +0000
commitbea933df81f857e1e9258655a71a0b83a3187b7f (patch)
tree603323fa1cdbd188ad3a912d7ad22c310cb48e27
parent20690ec5a0af072efabce1938c94912e1c51f2eb (diff)
parentc87d03a0797c9fc0d136da991f6937aa1a16bdb6 (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
-rw-r--r--core/java/android/view/SurfaceControl.java32
-rw-r--r--core/java/android/window/SystemPerformanceHinter.java4
-rw-r--r--core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java14
-rw-r--r--tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/GraphicsActivity.java10
-rw-r--r--tests/CtsSurfaceControlTestsStaging/src/main/java/android/view/surfacecontroltests/SurfaceControlTest.java20
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);
+ }
}