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

This commit is contained in:
Rob Carr
2022-03-02 21:20:46 +00:00
committed by Android (Google) Code Review

View File

@@ -829,6 +829,8 @@ public final class ViewRootImpl implements ViewParent,
private boolean mRelayoutRequested; private boolean mRelayoutRequested;
private int mLastTransformHint = Integer.MIN_VALUE;
private String mTag = TAG; private String mTag = TAG;
public ViewRootImpl(Context context, Display display) { public ViewRootImpl(Context context, Display display) {
@@ -2886,16 +2888,6 @@ public final class ViewRootImpl implements ViewParent,
host.getMeasuredHeight() + ", params=" + params); 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) { if (mFirst || viewVisibilityChanged) {
mViewFrameInfo.flags |= FrameInfo.FLAG_WINDOW_VISIBILITY_CHANGED; mViewFrameInfo.flags |= FrameInfo.FLAG_WINDOW_VISIBILITY_CHANGED;
} }
@@ -8055,7 +8047,6 @@ public final class ViewRootImpl implements ViewParent,
final int transformHint = SurfaceControl.rotationToBufferTransform( final int transformHint = SurfaceControl.rotationToBufferTransform(
(mDisplayInstallOrientation + mDisplay.getRotation()) % 4); (mDisplayInstallOrientation + mDisplay.getRotation()) % 4);
mSurfaceControl.setTransformHint(transformHint);
final WindowConfiguration winConfig = getConfiguration().windowConfiguration; final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
final boolean dragResizing = (relayoutResult final boolean dragResizing = (relayoutResult
@@ -8063,6 +8054,23 @@ public final class ViewRootImpl implements ViewParent,
WindowLayout.computeSurfaceSize(mWindowAttributes, winConfig.getMaxBounds(), requestedWidth, WindowLayout.computeSurfaceSize(mWindowAttributes, winConfig.getMaxBounds(), requestedWidth,
requestedHeight, mTmpFrames.frame, dragResizing, mSurfaceSize); 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) { if (mAttachInfo.mContentCaptureManager != null) {
MainContentCaptureSession mainSession = mAttachInfo.mContentCaptureManager MainContentCaptureSession mainSession = mAttachInfo.mContentCaptureManager
.getMainContentCaptureSession(); .getMainContentCaptureSession();
@@ -8086,6 +8094,9 @@ public final class ViewRootImpl implements ViewParent,
dispatchTransformHintChanged(transformHint); dispatchTransformHintChanged(transformHint);
} }
} else { } else {
if (mAttachInfo.mThreadedRenderer != null && mAttachInfo.mThreadedRenderer.pause()) {
mDirty.set(0, 0, mWidth, mHeight);
}
destroySurface(); destroySurface();
} }