diff options
| -rw-r--r-- | core/java/android/window/SystemPerformanceHinter.java | 24 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java | 70 |
2 files changed, 69 insertions, 25 deletions
diff --git a/core/java/android/window/SystemPerformanceHinter.java b/core/java/android/window/SystemPerformanceHinter.java index b2c977bb1e57..e1a2b9485e13 100644 --- a/core/java/android/window/SystemPerformanceHinter.java +++ b/core/java/android/window/SystemPerformanceHinter.java @@ -17,6 +17,8 @@ package android.window; 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; @@ -29,8 +31,6 @@ import android.os.Trace; import android.util.Log; import android.view.SurfaceControl; -import com.android.internal.annotations.VisibleForTesting; - import java.io.PrintWriter; import java.util.ArrayList; import java.util.Random; @@ -148,7 +148,6 @@ public class SystemPerformanceHinter { * Constructor for the hinter. * @hide */ - @VisibleForTesting public SystemPerformanceHinter(@NonNull Context context, @Nullable DisplayRootProvider displayRootProvider, @Nullable Supplier<SurfaceControl.Transaction> transactionSupplier) { @@ -208,11 +207,14 @@ public class SystemPerformanceHinter { boolean transactionChanged = false; // Per-display flags if (nowEnabled(oldPerDisplayFlags, newPerDisplayFlags, HINT_SF_FRAME_RATE)) { - mTransaction.setFrameRateSelectionStrategy( - mDisplayRootProvider.getRootForDisplay(session.displayId), + SurfaceControl displaySurfaceControl = mDisplayRootProvider.getRootForDisplay( + session.displayId); + mTransaction.setFrameRateSelectionStrategy(displaySurfaceControl, FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN); + mTransaction.setFrameRateCategory(displaySurfaceControl, FRAME_RATE_CATEGORY_HIGH); transactionChanged = true; - Trace.beginAsyncSection("PerfHint-framerate-" + session.reason, session.traceCookie); + Trace.beginAsyncSection("PerfHint-framerate-" + session.displayId + "-" + + session.reason, session.traceCookie); } // Global flags @@ -226,7 +228,7 @@ public class SystemPerformanceHinter { Trace.beginAsyncSection("PerfHint-adpf-" + session.reason, session.traceCookie); } if (transactionChanged) { - mTransaction.apply(); + mTransaction.applyAsyncUnsafe(); } } @@ -245,9 +247,11 @@ public class SystemPerformanceHinter { boolean transactionChanged = false; // Per-display flags if (nowDisabled(oldPerDisplayFlags, newPerDisplayFlags, HINT_SF_FRAME_RATE)) { - mTransaction.setFrameRateSelectionStrategy( - mDisplayRootProvider.getRootForDisplay(session.displayId), + SurfaceControl displaySurfaceControl = mDisplayRootProvider.getRootForDisplay( + session.displayId); + mTransaction.setFrameRateSelectionStrategy(displaySurfaceControl, FRAME_RATE_SELECTION_STRATEGY_SELF); + mTransaction.setFrameRateCategory(displaySurfaceControl, FRAME_RATE_CATEGORY_DEFAULT); transactionChanged = true; Trace.endAsyncSection("PerfHint-framerate-" + session.reason, session.traceCookie); } @@ -263,7 +267,7 @@ public class SystemPerformanceHinter { Trace.endAsyncSection("PerfHint-adpf-" + session.reason, session.traceCookie); } if (transactionChanged) { - mTransaction.apply(); + mTransaction.applyAsyncUnsafe(); } } diff --git a/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java b/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java index 25f5819fb671..263e563bc224 100644 --- a/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java +++ b/core/tests/coretests/src/android/window/SystemPerformanceHinterTests.java @@ -18,6 +18,8 @@ package android.window; import static android.os.PerformanceHintManager.Session.CPU_LOAD_RESET; 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.window.SystemPerformanceHinter.HINT_ADPF; @@ -150,7 +152,10 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN)); - verify(mTransaction).apply(); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_HIGH)); + verify(mTransaction).applyAsyncUnsafe(); } @Test @@ -164,7 +169,10 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); - verify(mTransaction).apply(); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); + verify(mTransaction).applyAsyncUnsafe(); } @Test @@ -177,7 +185,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF verify(mTransaction).setEarlyWakeupStart(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); } @Test @@ -189,7 +197,7 @@ public class SystemPerformanceHinterTests { // Verify we call SF verify(mTransaction).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); } @Test @@ -231,8 +239,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_HIGH)); verify(mTransaction).setEarlyWakeupStart(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); } @@ -248,8 +259,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); verify(mTransaction).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } @@ -265,8 +279,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); verify(mTransaction).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } } @@ -280,8 +297,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_HIGH)); verify(mTransaction).setEarlyWakeupStart(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); reset(mAdpfSession); @@ -290,15 +310,17 @@ public class SystemPerformanceHinterTests { mHinter.startSession(HINT_ALL, DEFAULT_DISPLAY_ID, TEST_OTHER_REASON); // Verify we never call SF and perf manager since session1 is already running verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt()); + verify(mTransaction, never()).setFrameRateCategory(any(), anyInt()); verify(mTransaction, never()).setEarlyWakeupEnd(); - verify(mTransaction, never()).apply(); + verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); session2.close(); // Verify we have not cleaned up because session1 is still running verify(mTransaction, never()).setFrameRateSelectionStrategy(any(), anyInt()); + verify(mTransaction, never()).setFrameRateCategory(any(), anyInt()); verify(mTransaction, never()).setEarlyWakeupEnd(); - verify(mTransaction, never()).apply(); + verify(mTransaction, never()).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); session1.close(); @@ -306,8 +328,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); verify(mTransaction).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } @@ -321,8 +346,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_HIGH)); verify(mTransaction).setEarlyWakeupStart(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_UP)); reset(mTransaction); reset(mAdpfSession); @@ -333,8 +361,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mSecondaryDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_OVERRIDE_CHILDREN)); + verify(mTransaction).setFrameRateCategory( + eq(mSecondaryDisplayRoot), + eq(FRAME_RATE_CATEGORY_HIGH)); verify(mTransaction, never()).setEarlyWakeupStart(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); reset(mAdpfSession); @@ -345,11 +376,17 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mDefaultDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + verify(mTransaction).setFrameRateCategory( + eq(mDefaultDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); verify(mTransaction, never()).setFrameRateSelectionStrategy( eq(mSecondaryDisplayRoot), anyInt()); + verify(mTransaction, never()).setFrameRateCategory( + eq(mSecondaryDisplayRoot), + anyInt()); verify(mTransaction, never()).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession, never()).sendHint(anyInt()); reset(mTransaction); reset(mAdpfSession); @@ -362,8 +399,11 @@ public class SystemPerformanceHinterTests { verify(mTransaction).setFrameRateSelectionStrategy( eq(mSecondaryDisplayRoot), eq(FRAME_RATE_SELECTION_STRATEGY_SELF)); + verify(mTransaction).setFrameRateCategory( + eq(mSecondaryDisplayRoot), + eq(FRAME_RATE_CATEGORY_DEFAULT)); verify(mTransaction).setEarlyWakeupEnd(); - verify(mTransaction).apply(); + verify(mTransaction).applyAsyncUnsafe(); verify(mAdpfSession).sendHint(eq(CPU_LOAD_RESET)); } |