summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chavi Weingarten <chaviw@google.com> 2022-12-02 14:09:21 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-12-02 14:09:21 +0000
commit129a1053d2a57d914fda55492b30c24d29313178 (patch)
tree33f0f16259280ac2c88dcbff2f914e328cccf783
parent0a968fefbb05ea1da9750024aa9a085655715ce2 (diff)
parentc96fbf2287c809f55caea29df87eaca699e3eede (diff)
Merge "Make count for numSyncsInProgress static"
-rw-r--r--core/java/android/view/ViewRootImpl.java44
1 files changed, 26 insertions, 18 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 0f970bf4f91c..09a9d46ba257 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -853,7 +853,12 @@ public final class ViewRootImpl implements ViewParent,
private SurfaceSyncGroup mSyncGroup;
private SurfaceSyncGroup.TransactionReadyCallback mTransactionReadyCallback;
- private int mNumSyncsInProgress = 0;
+
+ private static final Object sSyncProgressLock = new Object();
+ // The count needs to be static since it's used to enable or disable RT animations which is
+ // done at a global level per process. If any VRI syncs are in progress, we can't enable RT
+ // animations until all are done.
+ private static int sNumSyncsInProgress = 0;
private HashSet<ScrollCaptureCallback> mRootScrollCaptureCallbacks;
@@ -11229,13 +11234,6 @@ public final class ViewRootImpl implements ViewParent,
});
}
- private final Executor mPostAtFrontExecutor = new Executor() {
- @Override
- public void execute(Runnable command) {
- mHandler.postAtFrontOfQueue(command);
- }
- };
-
public final SurfaceSyncGroup.SyncTarget mSyncTarget = new SurfaceSyncGroup.SyncTarget() {
@Override
public void onAddedToSyncGroup(SurfaceSyncGroup parentSyncGroup,
@@ -11245,9 +11243,6 @@ public final class ViewRootImpl implements ViewParent,
// Always sync the buffer if the sync request did not come from VRI.
mSyncBuffer = true;
}
- if (mAttachInfo.mThreadedRenderer != null) {
- HardwareRenderer.setRtAnimationsEnabled(false);
- }
if (mTransactionReadyCallback != null) {
Log.d(mTag, "Already set sync for the next draw.");
@@ -11261,16 +11256,29 @@ public final class ViewRootImpl implements ViewParent,
scheduleTraversals();
}
}
+ };
+
+ private final Executor mSimpleExecutor = Runnable::run;
+
+ private void updateSyncInProgressCount(SurfaceSyncGroup syncGroup) {
+ if (mAttachInfo.mThreadedRenderer == null) {
+ return;
+ }
+
+ synchronized (sSyncProgressLock) {
+ if (sNumSyncsInProgress++ == 0) {
+ HardwareRenderer.setRtAnimationsEnabled(false);
+ }
+ }
- private void updateSyncInProgressCount(SurfaceSyncGroup parentSyncGroup) {
- mNumSyncsInProgress++;
- parentSyncGroup.addSyncCompleteCallback(mPostAtFrontExecutor, () -> {
- if (--mNumSyncsInProgress == 0 && mAttachInfo.mThreadedRenderer != null) {
+ syncGroup.addSyncCompleteCallback(mSimpleExecutor, () -> {
+ synchronized (sSyncProgressLock) {
+ if (--sNumSyncsInProgress == 0) {
HardwareRenderer.setRtAnimationsEnabled(true);
}
- });
- }
- };
+ }
+ });
+ }
@Override
public SurfaceSyncGroup.SyncTarget getSyncTarget() {