diff options
| author | chaviw <chaviw@google.com> | 2019-05-29 14:57:50 -0700 |
|---|---|---|
| committer | Chavi Weingarten <chaviw@google.com> | 2019-06-01 00:12:09 +0000 |
| commit | c0a8c4edbd63e5aad4650754306dfd95e40b5816 (patch) | |
| tree | 6e657db944c37bdd820d591da4d490d475c86114 /core/java/android/view/ViewRootImpl.java | |
| parent | 44bb9d7f6bb4add074b6c3128ac162091f80a58f (diff) | |
Only updateBoundsSurface when surface size has changed.
Currently, updateBoundsSurface was getting called when the surface
changed, not just when the size changed. This meant it could be calling
setWindowCrop and deferTransaction when no size had changed. If size
hadn't changed, there was a high possibility that no new frames would be
submitted by the client, causing the deferTransaction to wait forever.
Since the deferTransaction was still waiting, SurfaceFlinger would wake
up every vsync to check if it should call doTransaction for the deferred
transaction. This caused 60Hz composition even when frames were rendered
slower.
Fixes: 132110524
Test: SF doesn't compose 30fps app at 60Hz
Change-Id: Icf3a99b34c288575438bfcd05e9077ea7919b4ca
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e8356752f807..676018bd74ee 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2209,6 +2209,8 @@ public final class ViewRootImpl implements ViewParent, final boolean isViewVisible = viewVisibility == View.VISIBLE; final boolean windowRelayoutWasForced = mForceNextWindowRelayout; + boolean surfaceSizeChanged = false; + if (mFirst || windowShouldResize || insetsChanged || viewVisibilityChanged || params != null || mForceNextWindowRelayout) { mForceNextWindowRelayout = false; @@ -2287,7 +2289,7 @@ public final class ViewRootImpl implements ViewParent, final boolean cutoutChanged = !mPendingDisplayCutout.equals( mAttachInfo.mDisplayCutout); final boolean outsetsChanged = !mPendingOutsets.equals(mAttachInfo.mOutsets); - final boolean surfaceSizeChanged = (relayoutResult + surfaceSizeChanged = (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_SURFACE_RESIZED) != 0; surfaceChanged |= surfaceSizeChanged; final boolean alwaysConsumeSystemBarsChanged = @@ -2570,7 +2572,7 @@ public final class ViewRootImpl implements ViewParent, maybeHandleWindowMove(frame); } - if (surfaceChanged) { + if (surfaceSizeChanged) { updateBoundsSurface(); } |
