diff options
| author | 2022-12-02 14:09:21 +0000 | |
|---|---|---|
| committer | 2022-12-02 14:09:21 +0000 | |
| commit | 129a1053d2a57d914fda55492b30c24d29313178 (patch) | |
| tree | 33f0f16259280ac2c88dcbff2f914e328cccf783 | |
| parent | 0a968fefbb05ea1da9750024aa9a085655715ce2 (diff) | |
| parent | c96fbf2287c809f55caea29df87eaca699e3eede (diff) | |
Merge "Make count for numSyncsInProgress static"
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 44 |
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() { |