diff options
| -rw-r--r-- | libs/hwui/surfacetexture/ImageConsumer.cpp | 18 | ||||
| -rw-r--r-- | libs/hwui/surfacetexture/ImageConsumer.h | 5 |
2 files changed, 15 insertions, 8 deletions
diff --git a/libs/hwui/surfacetexture/ImageConsumer.cpp b/libs/hwui/surfacetexture/ImageConsumer.cpp index bae616bbc636..17ee17d5cd1d 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.cpp +++ b/libs/hwui/surfacetexture/ImageConsumer.cpp @@ -71,13 +71,16 @@ public: void makeImage(sp<GraphicBuffer>& graphicBuffer, android_dataspace dataspace, GrContext* context); + void newBufferContent(GrContext* context); + private: // The only way to invoke dtor is with unref, when mUsageCount is 0. ~AutoBackendTextureRelease() {} GrBackendTexture mBackendTexture; GrAHardwareBufferUtils::DeleteImageProc mDeleteProc; - GrAHardwareBufferUtils::DeleteImageCtx mDeleteCtx; + GrAHardwareBufferUtils::UpdateImageProc mUpdateProc; + GrAHardwareBufferUtils::TexImageCtx mImageCtx; // Starting with refcount 1, because the first ref is held by SurfaceTexture. Additional refs // are held by SkImages. @@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic buffer->getWidth(), buffer->getHeight(), &mDeleteProc, - &mDeleteCtx, + &mUpdateProc, + &mImageCtx, createProtectedImage, backendFormat, false); @@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) { mUsageCount--; if (mUsageCount <= 0) { if (mBackendTexture.isValid()) { - mDeleteProc(mDeleteCtx); + mDeleteProc(mImageCtx); mBackendTexture = {}; } delete this; @@ -154,6 +158,12 @@ void AutoBackendTextureRelease::makeImage(sp<GraphicBuffer>& graphicBuffer, } } +void AutoBackendTextureRelease::newBufferContent(GrContext* context) { + if (mBackendTexture.isValid()) { + mUpdateProc(mImageCtx, context); + } +} + void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer, android_dataspace dataspace, bool forceCreate, GrContext* context) { @@ -166,6 +176,8 @@ void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer, if (!mTextureRelease) { mTextureRelease = new AutoBackendTextureRelease(context, graphicBuffer.get()); + } else { + mTextureRelease->newBufferContent(context); } mDataspace = dataspace; diff --git a/libs/hwui/surfacetexture/ImageConsumer.h b/libs/hwui/surfacetexture/ImageConsumer.h index 2fdece989876..3e2a91a251f7 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.h +++ b/libs/hwui/surfacetexture/ImageConsumer.h @@ -26,11 +26,6 @@ #include <gui/BufferItem.h> #include <system/graphics.h> -namespace GrAHardwareBufferUtils { -typedef void* DeleteImageCtx; -typedef void (*DeleteImageProc)(DeleteImageCtx); -} - namespace android { namespace uirenderer { |