summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewRootImpl.java
diff options
context:
space:
mode:
authorTony Huang <tonyychuang@google.com>2020-03-26 14:10:26 +0800
committerTony Huang <tonyychuang@google.com>2020-04-01 19:07:49 +0800
commit89d580c0563f283c2a0fc1a81bbcca9883899ef3 (patch)
tree1bb19706556f4393bad85c6970d3b479f5068add /core/java/android/view/ViewRootImpl.java
parentc9bdb4aa296fedbc4297a5e40c4b109617b5ec02 (diff)
Fix split divider janky
The janky caused by SurfaceFlingerVsyncChoreographer does not work reliably. Sometimes it didn't update but sometimes update twice per frame so cause janky. Fix this by removed using SurfaceFlingerVsyncChoreographer and use real surface flinger sync signal to update screen. Bug: 150874701 Test: enter split mode and drag divider to observer janky Change-Id: I5a8bce36738a97b0ddaf4c4e77949eb5295b4894
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
-rw-r--r--core/java/android/view/ViewRootImpl.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 51304dcfe8cb..9f03652a3f25 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -448,7 +448,7 @@ public final class ViewRootImpl implements ViewParent,
InputQueue mInputQueue;
@UnsupportedAppUsage
FallbackEventHandler mFallbackEventHandler;
- Choreographer mChoreographer;
+ final Choreographer mChoreographer;
// used in relayout to get SurfaceControl size
// for BLAST adapter surface setup
@@ -691,11 +691,18 @@ public final class ViewRootImpl implements ViewParent,
private SurfaceControl.Transaction mRtBLASTSyncTransaction = new SurfaceControl.Transaction();
private String mTag = TAG;
+
public ViewRootImpl(Context context, Display display) {
- this(context, display, WindowManagerGlobal.getWindowSession());
+ this(context, display, WindowManagerGlobal.getWindowSession(),
+ false /* useSfChoreographer */);
}
public ViewRootImpl(Context context, Display display, IWindowSession session) {
+ this(context, display, session, false /* useSfChoreographer */);
+ }
+
+ public ViewRootImpl(Context context, Display display, IWindowSession session,
+ boolean useSfChoreographer) {
mContext = context;
mWindowSession = session;
mDisplay = display;
@@ -731,7 +738,8 @@ public final class ViewRootImpl implements ViewParent,
mDensity = context.getResources().getDisplayMetrics().densityDpi;
mNoncompatDensity = context.getResources().getDisplayMetrics().noncompatDensityDpi;
mFallbackEventHandler = new PhoneFallbackEventHandler(context);
- mChoreographer = Choreographer.getInstance();
+ mChoreographer = useSfChoreographer
+ ? Choreographer.getSfInstance() : Choreographer.getInstance();
mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
mInsetsController = new InsetsController(this);