summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorRob Carr <racarr@google.com>2022-03-02 21:20:46 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-03-02 21:20:46 +0000
commitc406f6afa7dae39c8fff9892e820d3c19b914591 (patch)
tree3c80d77e4f9b45977c0422ac54957ca84594d043 /core/java/android
parent3906378004add158be9c539c9ff16b6baa657024 (diff)
parentf690bc649936e0bc2921853665f9d44bae67b132 (diff)
Merge "ViewRootImpl: Don't pause HWUI so much" into tm-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/ViewRootImpl.java33
1 files changed, 22 insertions, 11 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index d3d36255d05a..2685e0aada8c 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -829,6 +829,8 @@ public final class ViewRootImpl implements ViewParent,
private boolean mRelayoutRequested;
+ private int mLastTransformHint = Integer.MIN_VALUE;
+
private String mTag = TAG;
public ViewRootImpl(Context context, Display display) {
@@ -2886,16 +2888,6 @@ public final class ViewRootImpl implements ViewParent,
host.getMeasuredHeight() + ", params=" + params);
}
- if (mAttachInfo.mThreadedRenderer != null) {
- // relayoutWindow may decide to destroy mSurface. As that decision
- // happens in WindowManager service, we need to be defensive here
- // and stop using the surface in case it gets destroyed.
- if (mAttachInfo.mThreadedRenderer.pause()) {
- // Animations were running so we need to push a frame
- // to resume them
- mDirty.set(0, 0, mWidth, mHeight);
- }
- }
if (mFirst || viewVisibilityChanged) {
mViewFrameInfo.flags |= FrameInfo.FLAG_WINDOW_VISIBILITY_CHANGED;
}
@@ -8055,13 +8047,29 @@ public final class ViewRootImpl implements ViewParent,
final int transformHint = SurfaceControl.rotationToBufferTransform(
(mDisplayInstallOrientation + mDisplay.getRotation()) % 4);
- mSurfaceControl.setTransformHint(transformHint);
final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
final boolean dragResizing = (relayoutResult
& (RELAYOUT_RES_DRAG_RESIZING_DOCKED | RELAYOUT_RES_DRAG_RESIZING_FREEFORM)) != 0;
WindowLayout.computeSurfaceSize(mWindowAttributes, winConfig.getMaxBounds(), requestedWidth,
requestedHeight, mTmpFrames.frame, dragResizing, mSurfaceSize);
+
+ final boolean transformHintChanged = transformHint != mLastTransformHint;
+ final boolean sizeChanged = !mLastSurfaceSize.equals(mSurfaceSize);
+ final boolean surfaceControlChanged =
+ (relayoutResult & RELAYOUT_RES_SURFACE_CHANGED) == RELAYOUT_RES_SURFACE_CHANGED;
+ if (mAttachInfo.mThreadedRenderer != null &&
+ (transformHintChanged || sizeChanged || surfaceControlChanged)) {
+ if (mAttachInfo.mThreadedRenderer.pause()) {
+ // Animations were running so we need to push a frame
+ // to resume them
+ mDirty.set(0, 0, mWidth, mHeight);
+ }
+ }
+
+ mLastTransformHint = transformHint;
+
+ mSurfaceControl.setTransformHint(transformHint);
if (mAttachInfo.mContentCaptureManager != null) {
MainContentCaptureSession mainSession = mAttachInfo.mContentCaptureManager
@@ -8086,6 +8094,9 @@ public final class ViewRootImpl implements ViewParent,
dispatchTransformHintChanged(transformHint);
}
} else {
+ if (mAttachInfo.mThreadedRenderer != null && mAttachInfo.mThreadedRenderer.pause()) {
+ mDirty.set(0, 0, mWidth, mHeight);
+ }
destroySurface();
}