Merge "ViewRootImpl: Don't pause HWUI so much" into tm-dev am: c406f6afa7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16981759

Change-Id: Ifae5153d92f9324d0b5b1b8b31ece15b9696457d
This commit is contained in:
Rob Carr
2022-03-02 21:38:17 +00:00
committed by Automerger Merge Worker

View File

@@ -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();
}