summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Melody Hsu <melodymhsu@google.com> 2024-12-17 18:44:20 +0000
committer Melody Hsu <melodymhsu@google.com> 2024-12-17 18:49:15 +0000
commit77fb584c23527f881eebe5c7b3f25a7cf2c91a97 (patch)
treebadcf2a5f579edc1e2aa2497b1f5b6a6c93efdd1
parentc05c4e0ec183843b430e776def1b1e94b6fd8b73 (diff)
Guard Choreographer buffer stuffing recovery behind flag
Recent changes to how buffer stuffing is detected changes the assumptions for when recovery should occur, and those changes were missed in being guarded by the appropriate flag. Fixes: b/383893971 Test: presubmit, SysUI Jank Regression Dashboard Flag: android.view.flags.buffer_stuffing_recovery Change-Id: I07cec9c22af0078ee447614f4885d21cb4305171
-rw-r--r--core/java/android/view/Choreographer.java35
-rw-r--r--core/java/android/view/SurfaceControl.java9
2 files changed, 22 insertions, 22 deletions
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java
index 089b5c256b6e..6c50b5f945a5 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -16,6 +16,7 @@
package android.view;
+import static android.view.flags.Flags.bufferStuffingRecovery;
import static android.view.flags.Flags.FLAG_EXPECTED_PRESENTATION_TIME_API;
import static android.view.DisplayEventReceiver.VSYNC_SOURCE_APP;
import static android.view.DisplayEventReceiver.VSYNC_SOURCE_SURFACE_FLINGER;
@@ -965,22 +966,24 @@ public final class Choreographer {
// Evaluate if buffer stuffing recovery needs to start or end, and
// what actions need to be taken for recovery.
- switch (updateBufferStuffingState(frameTimeNanos, vsyncEventData)) {
- case NONE:
- // Without buffer stuffing recovery, offsetFrameTimeNanos is
- // synonymous with frameTimeNanos.
- break;
- case OFFSET:
- // Add animation offset. Used to update frame timeline with
- // offset before jitter is calculated.
- offsetFrameTimeNanos = frameTimeNanos - frameIntervalNanos;
- break;
- case DELAY_FRAME:
- // Intentional frame delay to help reduce queued buffer count.
- scheduleVsyncLocked();
- return;
- default:
- break;
+ if (bufferStuffingRecovery()) {
+ switch (updateBufferStuffingState(frameTimeNanos, vsyncEventData)) {
+ case NONE:
+ // Without buffer stuffing recovery, offsetFrameTimeNanos is
+ // synonymous with frameTimeNanos.
+ break;
+ case OFFSET:
+ // Add animation offset. Used to update frame timeline with
+ // offset before jitter is calculated.
+ offsetFrameTimeNanos = frameTimeNanos - frameIntervalNanos;
+ break;
+ case DELAY_FRAME:
+ // Intentional frame delay to help reduce queued buffer count.
+ scheduleVsyncLocked();
+ return;
+ default:
+ break;
+ }
}
try {
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index f22505b80948..833f2d98554e 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -22,7 +22,6 @@ import static android.graphics.Matrix.MSKEW_X;
import static android.graphics.Matrix.MSKEW_Y;
import static android.graphics.Matrix.MTRANS_X;
import static android.graphics.Matrix.MTRANS_Y;
-import static android.view.flags.Flags.bufferStuffingRecovery;
import static android.view.SurfaceControlProto.HASH_CODE;
import static android.view.SurfaceControlProto.LAYER_ID;
import static android.view.SurfaceControlProto.NAME;
@@ -5118,11 +5117,9 @@ public final class SurfaceControl implements Parcelable {
*/
@NonNull
public Transaction setRecoverableFromBufferStuffing(@NonNull SurfaceControl sc) {
- if (bufferStuffingRecovery()) {
- checkPreconditions(sc);
- nativeSetFlags(mNativeObject, sc.mNativeObject, RECOVERABLE_FROM_BUFFER_STUFFING,
- RECOVERABLE_FROM_BUFFER_STUFFING);
- }
+ checkPreconditions(sc);
+ nativeSetFlags(mNativeObject, sc.mNativeObject, RECOVERABLE_FROM_BUFFER_STUFFING,
+ RECOVERABLE_FROM_BUFFER_STUFFING);
return this;
}