Fix EGLImage memory leak

bug: 31247709

Change-Id: Ifb3087a6e76d0d1304f55d13e468bafbd78418da
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 60eadff..65a8ebb 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -169,7 +169,7 @@
             EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs);
 
     if (sourceImage == EGL_NO_IMAGE_KHR) {
-        ALOGW("Error creating image (%#x)", eglGetError());
+        ALOGW("eglCreateImageKHR failed (%#x)", eglGetError());
         return CopyResult::UnknownError;
     }
     GLuint sourceTexId;
@@ -180,7 +180,8 @@
 
     GLenum status = GL_NO_ERROR;
     while ((status = glGetError()) != GL_NO_ERROR) {
-        ALOGW("Error creating image (%#x)", status);
+        ALOGW("glEGLImageTargetTexture2DOES failed (%#x)", status);
+        eglDestroyImageKHR(display, sourceImage);
         return CopyResult::UnknownError;
     }
 
@@ -188,7 +189,15 @@
     sourceTexture.wrap(sourceTexId,
             sourceBuffer->getWidth(), sourceBuffer->getHeight(), 0 /* total lie */);
 
-    return copyTextureInto(caches, renderThread.renderState(), sourceTexture, texTransform, bitmap);
+    CopyResult copyResult = copyTextureInto(caches, renderThread.renderState(),
+            sourceTexture, texTransform, bitmap);
+    sourceTexture.deleteTexture();
+    // All we're flushing & finishing is the deletion of the texture since
+    // copyTextureInto already did a major flush & finish as an implicit
+    // part of glReadPixels, so this shouldn't pose any major stalls.
+    glFinish();
+    eglDestroyImageKHR(display, sourceImage);
+    return copyResult;
 }
 
 CopyResult Readback::copyTextureLayerInto(renderthread::RenderThread& renderThread,