Loading libs/hwui/surfacetexture/ImageConsumer.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic buffer->getWidth(), buffer->getHeight(), &mDeleteProc, &mDeleteCtx, &mUpdateProc, &mImageCtx, createProtectedImage, backendFormat, false); Loading @@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) { mUsageCount--; if (mUsageCount <= 0) { if (mBackendTexture.isValid()) { mDeleteProc(mDeleteCtx); mDeleteProc(mImageCtx); mBackendTexture = {}; } delete this; Loading Loading @@ -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) { Loading @@ -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; Loading libs/hwui/surfacetexture/ImageConsumer.h +0 −5 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading
libs/hwui/surfacetexture/ImageConsumer.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic buffer->getWidth(), buffer->getHeight(), &mDeleteProc, &mDeleteCtx, &mUpdateProc, &mImageCtx, createProtectedImage, backendFormat, false); Loading @@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) { mUsageCount--; if (mUsageCount <= 0) { if (mBackendTexture.isValid()) { mDeleteProc(mDeleteCtx); mDeleteProc(mImageCtx); mBackendTexture = {}; } delete this; Loading Loading @@ -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) { Loading @@ -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; Loading
libs/hwui/surfacetexture/ImageConsumer.h +0 −5 Original line number Diff line number Diff line Loading @@ -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 { Loading