diff options
author | 2023-02-24 00:05:06 +0000 | |
---|---|---|
committer | 2023-02-24 00:43:48 +0000 | |
commit | 92f89fa2c5fe405950bdf895459ffff9634d4cf2 (patch) | |
tree | 6fbca8a7d378fada233f0fda665224ea92994d53 | |
parent | f625f0b6a018e9c839986d96022755b62e1dff11 (diff) |
Reduce number of copies into unmapExternalTextureBuffer
Make unmapExternalTextureBuffer take in an rvalue of sp<GraphicBuffer>,
which reduces the number sp copies.
Bug: 215661436
Test: builds
Change-Id: I4f9b6e3d6863ce6815810fdda038dc9e730f0b44
-rw-r--r-- | libs/renderengine/ExternalTexture.cpp | 2 | ||||
-rw-r--r-- | libs/renderengine/gl/GLESRenderEngine.cpp | 4 | ||||
-rw-r--r-- | libs/renderengine/gl/GLESRenderEngine.h | 2 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/RenderEngine.h | 2 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/mock/RenderEngine.h | 2 | ||||
-rw-r--r-- | libs/renderengine/skia/SkiaRenderEngine.cpp | 2 | ||||
-rw-r--r-- | libs/renderengine/skia/SkiaRenderEngine.h | 2 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.cpp | 11 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.h | 2 |
9 files changed, 15 insertions, 14 deletions
diff --git a/libs/renderengine/ExternalTexture.cpp b/libs/renderengine/ExternalTexture.cpp index 84771c0917..210dca5429 100644 --- a/libs/renderengine/ExternalTexture.cpp +++ b/libs/renderengine/ExternalTexture.cpp @@ -39,7 +39,7 @@ ExternalTexture::ExternalTexture(const sp<GraphicBuffer>& buffer, } ExternalTexture::~ExternalTexture() { - mRenderEngine.unmapExternalTextureBuffer(mBuffer); + mRenderEngine.unmapExternalTextureBuffer(std::move(mBuffer)); } } // namespace android::renderengine::impl diff --git a/libs/renderengine/gl/GLESRenderEngine.cpp b/libs/renderengine/gl/GLESRenderEngine.cpp index 13f766c3e1..0d7df101f4 100644 --- a/libs/renderengine/gl/GLESRenderEngine.cpp +++ b/libs/renderengine/gl/GLESRenderEngine.cpp @@ -800,7 +800,7 @@ status_t GLESRenderEngine::cacheExternalTextureBufferInternal(const sp<GraphicBu return NO_ERROR; } -void GLESRenderEngine::unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) { +void GLESRenderEngine::unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) { mImageManager->releaseAsync(buffer->getId(), nullptr); } @@ -1262,7 +1262,7 @@ void GLESRenderEngine::drawLayersInternal( // Do not cache protected EGLImage, protected memory is limited. if (gBuf->getUsage() & GRALLOC_USAGE_PROTECTED) { - unmapExternalTextureBuffer(gBuf); + unmapExternalTextureBuffer(std::move(gBuf)); } } diff --git a/libs/renderengine/gl/GLESRenderEngine.h b/libs/renderengine/gl/GLESRenderEngine.h index 1b3492154b..402ff529d7 100644 --- a/libs/renderengine/gl/GLESRenderEngine.h +++ b/libs/renderengine/gl/GLESRenderEngine.h @@ -101,7 +101,7 @@ protected: size_t getMaxViewportDims() const override; void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable) EXCLUDES(mRenderingMutex); - void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); + void unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) EXCLUDES(mRenderingMutex); bool canSkipPostRenderCleanup() const override; void drawLayersInternal(const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h index 39621cd080..0d910c9b29 100644 --- a/libs/renderengine/include/renderengine/RenderEngine.h +++ b/libs/renderengine/include/renderengine/RenderEngine.h @@ -231,7 +231,7 @@ protected: // asynchronously, but the caller can expect that map/unmap calls are performed in a manner // that's conflict serializable, i.e. unmap a buffer should never occur before binding the // buffer if the caller called mapExternalTextureBuffer before calling unmap. - virtual void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) = 0; + virtual void unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) = 0; // A thread safe query to determine if any post rendering cleanup is necessary. Returning true // is a signal that calling the postRenderCleanup method would be a no-op and that callers can diff --git a/libs/renderengine/include/renderengine/mock/RenderEngine.h b/libs/renderengine/include/renderengine/mock/RenderEngine.h index e3ce85dd07..d3035e24a5 100644 --- a/libs/renderengine/include/renderengine/mock/RenderEngine.h +++ b/libs/renderengine/include/renderengine/mock/RenderEngine.h @@ -63,7 +63,7 @@ public: protected: // mock renderengine still needs to implement these, but callers should never need to call them. void mapExternalTextureBuffer(const sp<GraphicBuffer>&, bool) {} - void unmapExternalTextureBuffer(const sp<GraphicBuffer>&) {} + void unmapExternalTextureBuffer(sp<GraphicBuffer>&&) {} }; } // namespace mock diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp index 413811ef99..5965d417f4 100644 --- a/libs/renderengine/skia/SkiaRenderEngine.cpp +++ b/libs/renderengine/skia/SkiaRenderEngine.cpp @@ -423,7 +423,7 @@ void SkiaRenderEngine::mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, } } -void SkiaRenderEngine::unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) { +void SkiaRenderEngine::unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) { ATRACE_CALL(); std::lock_guard<std::mutex> lock(mRenderingMutex); if (const auto& iter = mGraphicBufferExternalRefs.find(buffer->getId()); diff --git a/libs/renderengine/skia/SkiaRenderEngine.h b/libs/renderengine/skia/SkiaRenderEngine.h index 1973c7d065..dd6646ba71 100644 --- a/libs/renderengine/skia/SkiaRenderEngine.h +++ b/libs/renderengine/skia/SkiaRenderEngine.h @@ -130,7 +130,7 @@ protected: private: void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable) override final; - void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) override final; + void unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) override final; bool canSkipPostRenderCleanup() const override final; void initCanvas(SkCanvas* canvas, const DisplaySettings& display); diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp index 8aa41b3e50..6a1561abcd 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.cpp +++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp @@ -230,16 +230,17 @@ void RenderEngineThreaded::mapExternalTextureBuffer(const sp<GraphicBuffer>& buf mCondition.notify_one(); } -void RenderEngineThreaded::unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) { +void RenderEngineThreaded::unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) { ATRACE_CALL(); // This function is designed so it can run asynchronously, so we do not need to wait // for the futures. { std::lock_guard lock(mThreadMutex); - mFunctionCalls.push([=](renderengine::RenderEngine& instance) { - ATRACE_NAME("REThreaded::unmapExternalTextureBuffer"); - instance.unmapExternalTextureBuffer(buffer); - }); + mFunctionCalls.push( + [=, buffer = std::move(buffer)](renderengine::RenderEngine& instance) mutable { + ATRACE_NAME("REThreaded::unmapExternalTextureBuffer"); + instance.unmapExternalTextureBuffer(std::move(buffer)); + }); } mCondition.notify_one(); } diff --git a/libs/renderengine/threaded/RenderEngineThreaded.h b/libs/renderengine/threaded/RenderEngineThreaded.h index 168e2d2b06..6eb108e064 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.h +++ b/libs/renderengine/threaded/RenderEngineThreaded.h @@ -69,7 +69,7 @@ public: protected: void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable) override; - void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) override; + void unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) override; bool canSkipPostRenderCleanup() const override; void drawLayersInternal(const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, |