Fix TextureView calling eglCreateImage with a destructed buffer
Fix an issue with hardware buffer passed from the SurfaceTexture
being destroyed before an SkImage is created. This CL is matched
by a change in frameworks/native
I2e025e683052168546f2e271a20a857b1e556b64.
Test: Ran TextureView CTS tests and a few apps that use TextureView.
Test: Fix verified by partner Mediatek
Bug: 160930384
Bug: 152781833
Bug: 153045874
Bug: 156047948
Bug: 160514803
Bug: 155545635
Bug: 155171712
Change-Id: I4d121f087fc842ce317745e7b7e2656f80a52b7d
(cherry picked from commit d125b447d7e1c29cb97f59aa58fd6bff8769a19f)
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
index 5a50245..67d8c07 100644
--- a/libs/hwui/DeferredLayerUpdater.cpp
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -149,6 +149,9 @@
sk_sp<SkImage> layerImage = mImageSlots[slot].createIfNeeded(
hardwareBuffer, dataspace, newContent,
mRenderState.getRenderThread().getGrContext());
+ // unref to match the ref added by ASurfaceTexture_dequeueBuffer. eglCreateImageKHR
+ // (invoked by createIfNeeded) will add a ref to the AHardwareBuffer.
+ AHardwareBuffer_release(hardwareBuffer);
if (layerImage.get()) {
SkMatrix textureTransform;
mat4(transformMatrix).copyTo(textureTransform);