Merge "Revert "Drive SurfaceView visibility on renderthread"" into udc-dev
This commit is contained in:
@@ -851,14 +851,10 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
}
|
||||
mParentSurfaceSequenceId = viewRoot.getSurfaceSequenceId();
|
||||
|
||||
// Only control visibility if we're not hardware-accelerated. Otherwise we'll
|
||||
// let renderthread drive since offscreen SurfaceControls should not be visible.
|
||||
if (!isHardwareAccelerated()) {
|
||||
if (mViewVisibility) {
|
||||
surfaceUpdateTransaction.show(mSurfaceControl);
|
||||
} else {
|
||||
surfaceUpdateTransaction.hide(mSurfaceControl);
|
||||
}
|
||||
if (mViewVisibility) {
|
||||
surfaceUpdateTransaction.show(mSurfaceControl);
|
||||
} else {
|
||||
surfaceUpdateTransaction.hide(mSurfaceControl);
|
||||
}
|
||||
|
||||
updateBackgroundVisibility(surfaceUpdateTransaction);
|
||||
@@ -1421,10 +1417,12 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
}
|
||||
|
||||
private final Rect mRTLastReportedPosition = new Rect();
|
||||
private final Point mRTLastReportedSurfaceSize = new Point();
|
||||
|
||||
private class SurfaceViewPositionUpdateListener implements RenderNode.PositionUpdateListener {
|
||||
private final int mRtSurfaceWidth;
|
||||
private final int mRtSurfaceHeight;
|
||||
private boolean mRtFirst = true;
|
||||
private final SurfaceControl.Transaction mPositionChangedTransaction =
|
||||
new SurfaceControl.Transaction();
|
||||
|
||||
@@ -1435,6 +1433,15 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
|
||||
@Override
|
||||
public void positionChanged(long frameNumber, int left, int top, int right, int bottom) {
|
||||
if (!mRtFirst && (mRTLastReportedPosition.left == left
|
||||
&& mRTLastReportedPosition.top == top
|
||||
&& mRTLastReportedPosition.right == right
|
||||
&& mRTLastReportedPosition.bottom == bottom
|
||||
&& mRTLastReportedSurfaceSize.x == mRtSurfaceWidth
|
||||
&& mRTLastReportedSurfaceSize.y == mRtSurfaceHeight)) {
|
||||
return;
|
||||
}
|
||||
mRtFirst = false;
|
||||
try {
|
||||
if (DEBUG_POSITION) {
|
||||
Log.d(TAG, String.format(
|
||||
@@ -1445,8 +1452,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
}
|
||||
synchronized (mSurfaceControlLock) {
|
||||
if (mSurfaceControl == null) return;
|
||||
|
||||
mRTLastReportedPosition.set(left, top, right, bottom);
|
||||
mRTLastReportedSurfaceSize.set(mRtSurfaceWidth, mRtSurfaceHeight);
|
||||
onSetSurfacePositionAndScale(mPositionChangedTransaction, mSurfaceControl,
|
||||
mRTLastReportedPosition.left /*positionLeft*/,
|
||||
mRTLastReportedPosition.top /*positionTop*/,
|
||||
@@ -1454,8 +1461,10 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
/ (float) mRtSurfaceWidth /*postScaleX*/,
|
||||
mRTLastReportedPosition.height()
|
||||
/ (float) mRtSurfaceHeight /*postScaleY*/);
|
||||
|
||||
mPositionChangedTransaction.show(mSurfaceControl);
|
||||
if (mViewVisibility) {
|
||||
// b/131239825
|
||||
mPositionChangedTransaction.show(mSurfaceControl);
|
||||
}
|
||||
}
|
||||
applyOrMergeTransaction(mPositionChangedTransaction, frameNumber);
|
||||
} catch (Exception ex) {
|
||||
@@ -1481,6 +1490,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
|
||||
System.identityHashCode(this), frameNumber));
|
||||
}
|
||||
mRTLastReportedPosition.setEmpty();
|
||||
mRTLastReportedSurfaceSize.set(-1, -1);
|
||||
|
||||
// positionLost can be called while UI thread is un-paused.
|
||||
synchronized (mSurfaceControlLock) {
|
||||
|
||||
Reference in New Issue
Block a user