summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rob Carr <racarr@google.com> 2020-04-03 21:48:08 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-04-03 21:48:08 +0000
commit73e4cc48c7333c5defe5128cef01aa5b47048e8d (patch)
tree41f56f54d333b9450a083c3fa1d83902e797d4f0
parentfa25797fb184b1bd6abd5a7b7c9527933959794a (diff)
parent1dd148d9ac105af3dce7ee6776c8ba738ad2afad (diff)
Merge "BLASTBufferQueue: Fix unnecessary copying of Surface" into rvc-dev
-rw-r--r--core/java/android/view/ViewRootImpl.java16
1 files changed, 13 insertions, 3 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index b5e8dd8212e3..3534bb0f763f 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1748,13 +1748,17 @@ public final class ViewRootImpl implements ViewParent,
return null;
}
+ Surface ret = null;
if (mBlastBufferQueue == null) {
mBlastBufferQueue = new BLASTBufferQueue(
mBlastSurfaceControl, width, height);
+ // We only return the Surface the first time, as otherwise
+ // it hasn't changed and there is no need to update.
+ ret = mBlastBufferQueue.getSurface();
}
mBlastBufferQueue.update(mBlastSurfaceControl, width, height);
- return mBlastBufferQueue.getSurface();
+ return ret;
}
private void setBoundsLayerCrop() {
@@ -7349,8 +7353,14 @@ public final class ViewRootImpl implements ViewParent,
if (!mUseBLASTAdapter) {
mSurface.copyFrom(mSurfaceControl);
} else {
- mSurface.transferFrom(getOrCreateBLASTSurface(mSurfaceSize.x,
- mSurfaceSize.y));
+ final Surface blastSurface = getOrCreateBLASTSurface(mSurfaceSize.x,
+ mSurfaceSize.y);
+ // If blastSurface == null that means it hasn't changed since the last time we
+ // called. In this situation, avoid calling transferFrom as we would then
+ // inc the generation ID and cause EGL resources to be recreated.
+ if (blastSurface != null) {
+ mSurface.transferFrom(blastSurface);
+ }
}
} else {
destroySurface();