Loading libs/renderengine/skia/AutoBackendTexture.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -28,19 +28,19 @@ namespace android { namespace renderengine { namespace skia { AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer) { AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isRender) { ATRACE_CALL(); AHardwareBuffer_Desc desc; AHardwareBuffer_describe(buffer, &desc); const bool createProtectedImage = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT); const bool isRenderable = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER); bool createProtectedImage = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT); GrBackendFormat backendFormat = GrAHardwareBufferUtils::GetBackendFormat(context, buffer, desc.format, false); mBackendTexture = GrAHardwareBufferUtils::MakeBackendTexture(context, buffer, desc.width, desc.height, &mDeleteProc, &mUpdateProc, &mImageCtx, createProtectedImage, backendFormat, isRenderable); isRender); mColorType = GrAHardwareBufferUtils::GetSkColorTypeFromBufferFormat(desc.format); } Loading libs/renderengine/skia/AutoBackendTexture.h +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ public: }; // Creates a GrBackendTexture whose contents come from the provided buffer. AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer); AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isRender); void ref() { mUsageCount++; } Loading libs/renderengine/skia/SkiaGLRenderEngine.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ void SkiaGLRenderEngine::cacheExternalTextureBuffer(const sp<GraphicBuffer>& buf std::shared_ptr<AutoBackendTexture::LocalRef> imageTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); imageTextureRef->setTexture( new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer())); new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer(), false)); cache.insert({buffer->getId(), imageTextureRef}); } // restore the original state of the protected context if necessary Loading Loading @@ -654,7 +654,7 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, ATRACE_NAME("Cache miss"); surfaceTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); surfaceTextureRef->setTexture( new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer())); new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer(), true)); if (useFramebufferCache) { ALOGD("Adding to cache"); cache.insert({buffer->getId(), surfaceTextureRef}); Loading Loading @@ -861,8 +861,9 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, imageTextureRef = iter->second; } else { imageTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); imageTextureRef->setTexture( new AutoBackendTexture(grContext.get(), item.buffer->toAHardwareBuffer())); imageTextureRef->setTexture(new AutoBackendTexture(grContext.get(), item.buffer->toAHardwareBuffer(), false)); cache.insert({item.buffer->getId(), imageTextureRef}); } Loading services/surfaceflinger/SurfaceFlinger.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -6048,11 +6048,8 @@ status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, const status_t bufferStatus = buffer->initCheck(); LOG_ALWAYS_FATAL_IF(bufferStatus != OK, "captureScreenCommon: Buffer failed to allocate: %d", bufferStatus); getRenderEngine().cacheExternalTextureBuffer(buffer); status_t result = captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, return captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, false /* regionSampling */, grayscale, captureListener); getRenderEngine().unbindExternalTextureBuffer(buffer->getId()); return result; } status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, Loading Loading @@ -6092,6 +6089,15 @@ status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, regionSampling, grayscale, captureResults); }); // TODO(b/180767535): Remove this once we optimize buffer lifecycle for RenderEngine // Only do this when we're not doing region sampling, to allow the region sampling thread to // manage buffer lifecycle itself. if (!regionSampling && getRenderEngine().getRenderEngineType() == renderengine::RenderEngine::RenderEngineType::SKIA_GL_THREADED) { getRenderEngine().unbindExternalTextureBuffer(buffer->getId()); } captureResults.result = result; captureListener->onScreenCaptureCompleted(captureResults); })); Loading Loading
libs/renderengine/skia/AutoBackendTexture.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -28,19 +28,19 @@ namespace android { namespace renderengine { namespace skia { AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer) { AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isRender) { ATRACE_CALL(); AHardwareBuffer_Desc desc; AHardwareBuffer_describe(buffer, &desc); const bool createProtectedImage = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT); const bool isRenderable = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER); bool createProtectedImage = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT); GrBackendFormat backendFormat = GrAHardwareBufferUtils::GetBackendFormat(context, buffer, desc.format, false); mBackendTexture = GrAHardwareBufferUtils::MakeBackendTexture(context, buffer, desc.width, desc.height, &mDeleteProc, &mUpdateProc, &mImageCtx, createProtectedImage, backendFormat, isRenderable); isRender); mColorType = GrAHardwareBufferUtils::GetSkColorTypeFromBufferFormat(desc.format); } Loading
libs/renderengine/skia/AutoBackendTexture.h +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ public: }; // Creates a GrBackendTexture whose contents come from the provided buffer. AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer); AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isRender); void ref() { mUsageCount++; } Loading
libs/renderengine/skia/SkiaGLRenderEngine.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ void SkiaGLRenderEngine::cacheExternalTextureBuffer(const sp<GraphicBuffer>& buf std::shared_ptr<AutoBackendTexture::LocalRef> imageTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); imageTextureRef->setTexture( new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer())); new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer(), false)); cache.insert({buffer->getId(), imageTextureRef}); } // restore the original state of the protected context if necessary Loading Loading @@ -654,7 +654,7 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, ATRACE_NAME("Cache miss"); surfaceTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); surfaceTextureRef->setTexture( new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer())); new AutoBackendTexture(grContext.get(), buffer->toAHardwareBuffer(), true)); if (useFramebufferCache) { ALOGD("Adding to cache"); cache.insert({buffer->getId(), surfaceTextureRef}); Loading Loading @@ -861,8 +861,9 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, imageTextureRef = iter->second; } else { imageTextureRef = std::make_shared<AutoBackendTexture::LocalRef>(); imageTextureRef->setTexture( new AutoBackendTexture(grContext.get(), item.buffer->toAHardwareBuffer())); imageTextureRef->setTexture(new AutoBackendTexture(grContext.get(), item.buffer->toAHardwareBuffer(), false)); cache.insert({item.buffer->getId(), imageTextureRef}); } Loading
services/surfaceflinger/SurfaceFlinger.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -6048,11 +6048,8 @@ status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, const status_t bufferStatus = buffer->initCheck(); LOG_ALWAYS_FATAL_IF(bufferStatus != OK, "captureScreenCommon: Buffer failed to allocate: %d", bufferStatus); getRenderEngine().cacheExternalTextureBuffer(buffer); status_t result = captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, return captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, false /* regionSampling */, grayscale, captureListener); getRenderEngine().unbindExternalTextureBuffer(buffer->getId()); return result; } status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, Loading Loading @@ -6092,6 +6089,15 @@ status_t SurfaceFlinger::captureScreenCommon(RenderAreaFuture renderAreaFuture, regionSampling, grayscale, captureResults); }); // TODO(b/180767535): Remove this once we optimize buffer lifecycle for RenderEngine // Only do this when we're not doing region sampling, to allow the region sampling thread to // manage buffer lifecycle itself. if (!regionSampling && getRenderEngine().getRenderEngineType() == renderengine::RenderEngine::RenderEngineType::SKIA_GL_THREADED) { getRenderEngine().unbindExternalTextureBuffer(buffer->getId()); } captureResults.result = result; captureListener->onScreenCaptureCompleted(captureResults); })); Loading