Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bea933df authored by Rachel Lee's avatar Rachel Lee Committed by Android (Google) Code Review
Browse files

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
parents 20690ec5 c87d03a0
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -859,32 +859,46 @@ 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.
     *
+2 −2
Original line number Diff line number Diff line
@@ -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.
+7 −7
Original line number Diff line number Diff line
@@ -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),
+8 −2
Original line number Diff line number Diff line
@@ -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);

            // 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 =
+11 −9
Original line number Diff line number Diff line
@@ -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);
    }
}