Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a29c0ec authored by John Reck's avatar John Reck
Browse files

Fix EGLImage memory leak

bug: 31247709

Change-Id: Ifb3087a6e76d0d1304f55d13e468bafbd78418da
parent 994e5909
Loading
Loading
Loading
Loading
+12 −3
Original line number Original line Diff line number Diff line
@@ -169,7 +169,7 @@ CopyResult Readback::copySurfaceInto(renderthread::RenderThread& renderThread,
            EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs);
            EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs);


    if (sourceImage == EGL_NO_IMAGE_KHR) {
    if (sourceImage == EGL_NO_IMAGE_KHR) {
        ALOGW("Error creating image (%#x)", eglGetError());
        ALOGW("eglCreateImageKHR failed (%#x)", eglGetError());
        return CopyResult::UnknownError;
        return CopyResult::UnknownError;
    }
    }
    GLuint sourceTexId;
    GLuint sourceTexId;
@@ -180,7 +180,8 @@ CopyResult Readback::copySurfaceInto(renderthread::RenderThread& renderThread,


    GLenum status = GL_NO_ERROR;
    GLenum status = GL_NO_ERROR;
    while ((status = glGetError()) != 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;
        return CopyResult::UnknownError;
    }
    }


@@ -188,7 +189,15 @@ CopyResult Readback::copySurfaceInto(renderthread::RenderThread& renderThread,
    sourceTexture.wrap(sourceTexId,
    sourceTexture.wrap(sourceTexId,
            sourceBuffer->getWidth(), sourceBuffer->getHeight(), 0 /* total lie */);
            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,
CopyResult Readback::copyTextureLayerInto(renderthread::RenderThread& renderThread,