Loading libs/renderengine/gl/GLESRenderEngine.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -841,6 +841,7 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer bool useFramebufferCache) { sp<GraphicBuffer> graphicBuffer = GraphicBuffer::from(nativeBuffer); if (useFramebufferCache) { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); for (const auto& image : mFramebufferImageCache) { if (image.first == graphicBuffer->getId()) { return image.second; Loading @@ -856,6 +857,7 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer nativeBuffer, attributes); if (useFramebufferCache) { if (image != EGL_NO_IMAGE_KHR) { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); if (mFramebufferImageCache.size() >= mFramebufferImageCacheSize) { EGLImageKHR expired = mFramebufferImageCache.front().second; mFramebufferImageCache.pop_front(); Loading Loading @@ -1266,6 +1268,23 @@ void GLESRenderEngine::dump(std::string& result) { StringAppendF(&result, "RenderEngine last dataspace conversion: (%s) to (%s)\n", dataspaceDetails(static_cast<android_dataspace>(mDataSpace)).c_str(), dataspaceDetails(static_cast<android_dataspace>(mOutputDataSpace)).c_str()); { std::lock_guard<std::mutex> lock(mRenderingMutex); StringAppendF(&result, "RenderEngine image cache size: %zu\n", mImageCache.size()); StringAppendF(&result, "Dumping buffer ids...\n"); for (const auto& [id, unused] : mImageCache) { StringAppendF(&result, "0x%" PRIx64 "\n", id); } } { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); StringAppendF(&result, "RenderEngine framebuffer image cache size: %zu\n", mFramebufferImageCache.size()); StringAppendF(&result, "Dumping buffer ids...\n"); for (const auto& [id, unused] : mFramebufferImageCache) { StringAppendF(&result, "0x%" PRIx64 "\n", id); } } } GLESRenderEngine::GlesVersion GLESRenderEngine::parseGlesVersion(const char* str) { Loading Loading @@ -1392,7 +1411,7 @@ bool GLESRenderEngine::isImageCachedForTesting(uint64_t bufferId) { } bool GLESRenderEngine::isFramebufferImageCachedForTesting(uint64_t bufferId) { std::lock_guard<std::mutex> lock(mRenderingMutex); std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); return std::any_of(mFramebufferImageCache.cbegin(), mFramebufferImageCache.cend(), [=](std::pair<uint64_t, EGLImageKHR> image) { return image.first == bufferId; Loading libs/renderengine/gl/GLESRenderEngine.h +11 −4 Original line number Diff line number Diff line Loading @@ -78,17 +78,20 @@ public: EGLDisplay getEGLDisplay() const { return mEGLDisplay; } // Creates an output image for rendering to EGLImageKHR createFramebufferImageIfNeeded(ANativeWindowBuffer* nativeBuffer, bool isProtected, bool useFramebufferCache); bool useFramebufferCache) EXCLUDES(mFramebufferImageCacheMutex); // Test-only methods // Returns true iff mImageCache contains an image keyed by bufferId bool isImageCachedForTesting(uint64_t bufferId) EXCLUDES(mRenderingMutex); // Returns true iff mFramebufferImageCache contains an image keyed by bufferId bool isFramebufferImageCachedForTesting(uint64_t bufferId) EXCLUDES(mRenderingMutex); bool isFramebufferImageCachedForTesting(uint64_t bufferId) EXCLUDES(mFramebufferImageCacheMutex); protected: Framebuffer* getFramebufferForDrawing() override; void dump(std::string& result) override; void dump(std::string& result) override EXCLUDES(mRenderingMutex) EXCLUDES(mFramebufferImageCacheMutex); size_t getMaxTextureSize() const override; size_t getMaxViewportDims() const override; Loading Loading @@ -190,7 +193,11 @@ private: uint32_t mFramebufferImageCacheSize = 0; // Cache of output images, keyed by corresponding GraphicBuffer ID. std::deque<std::pair<uint64_t, EGLImageKHR>> mFramebufferImageCache; std::deque<std::pair<uint64_t, EGLImageKHR>> mFramebufferImageCache GUARDED_BY(mFramebufferImageCacheMutex); // The only reason why we have this mutex is so that we don't segfault when // dumping info. std::mutex mFramebufferImageCacheMutex; // Current dataspace of layer being rendered ui::Dataspace mDataSpace = ui::Dataspace::UNKNOWN; Loading Loading
libs/renderengine/gl/GLESRenderEngine.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -841,6 +841,7 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer bool useFramebufferCache) { sp<GraphicBuffer> graphicBuffer = GraphicBuffer::from(nativeBuffer); if (useFramebufferCache) { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); for (const auto& image : mFramebufferImageCache) { if (image.first == graphicBuffer->getId()) { return image.second; Loading @@ -856,6 +857,7 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer nativeBuffer, attributes); if (useFramebufferCache) { if (image != EGL_NO_IMAGE_KHR) { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); if (mFramebufferImageCache.size() >= mFramebufferImageCacheSize) { EGLImageKHR expired = mFramebufferImageCache.front().second; mFramebufferImageCache.pop_front(); Loading Loading @@ -1266,6 +1268,23 @@ void GLESRenderEngine::dump(std::string& result) { StringAppendF(&result, "RenderEngine last dataspace conversion: (%s) to (%s)\n", dataspaceDetails(static_cast<android_dataspace>(mDataSpace)).c_str(), dataspaceDetails(static_cast<android_dataspace>(mOutputDataSpace)).c_str()); { std::lock_guard<std::mutex> lock(mRenderingMutex); StringAppendF(&result, "RenderEngine image cache size: %zu\n", mImageCache.size()); StringAppendF(&result, "Dumping buffer ids...\n"); for (const auto& [id, unused] : mImageCache) { StringAppendF(&result, "0x%" PRIx64 "\n", id); } } { std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); StringAppendF(&result, "RenderEngine framebuffer image cache size: %zu\n", mFramebufferImageCache.size()); StringAppendF(&result, "Dumping buffer ids...\n"); for (const auto& [id, unused] : mFramebufferImageCache) { StringAppendF(&result, "0x%" PRIx64 "\n", id); } } } GLESRenderEngine::GlesVersion GLESRenderEngine::parseGlesVersion(const char* str) { Loading Loading @@ -1392,7 +1411,7 @@ bool GLESRenderEngine::isImageCachedForTesting(uint64_t bufferId) { } bool GLESRenderEngine::isFramebufferImageCachedForTesting(uint64_t bufferId) { std::lock_guard<std::mutex> lock(mRenderingMutex); std::lock_guard<std::mutex> lock(mFramebufferImageCacheMutex); return std::any_of(mFramebufferImageCache.cbegin(), mFramebufferImageCache.cend(), [=](std::pair<uint64_t, EGLImageKHR> image) { return image.first == bufferId; Loading
libs/renderengine/gl/GLESRenderEngine.h +11 −4 Original line number Diff line number Diff line Loading @@ -78,17 +78,20 @@ public: EGLDisplay getEGLDisplay() const { return mEGLDisplay; } // Creates an output image for rendering to EGLImageKHR createFramebufferImageIfNeeded(ANativeWindowBuffer* nativeBuffer, bool isProtected, bool useFramebufferCache); bool useFramebufferCache) EXCLUDES(mFramebufferImageCacheMutex); // Test-only methods // Returns true iff mImageCache contains an image keyed by bufferId bool isImageCachedForTesting(uint64_t bufferId) EXCLUDES(mRenderingMutex); // Returns true iff mFramebufferImageCache contains an image keyed by bufferId bool isFramebufferImageCachedForTesting(uint64_t bufferId) EXCLUDES(mRenderingMutex); bool isFramebufferImageCachedForTesting(uint64_t bufferId) EXCLUDES(mFramebufferImageCacheMutex); protected: Framebuffer* getFramebufferForDrawing() override; void dump(std::string& result) override; void dump(std::string& result) override EXCLUDES(mRenderingMutex) EXCLUDES(mFramebufferImageCacheMutex); size_t getMaxTextureSize() const override; size_t getMaxViewportDims() const override; Loading Loading @@ -190,7 +193,11 @@ private: uint32_t mFramebufferImageCacheSize = 0; // Cache of output images, keyed by corresponding GraphicBuffer ID. std::deque<std::pair<uint64_t, EGLImageKHR>> mFramebufferImageCache; std::deque<std::pair<uint64_t, EGLImageKHR>> mFramebufferImageCache GUARDED_BY(mFramebufferImageCacheMutex); // The only reason why we have this mutex is so that we don't segfault when // dumping info. std::mutex mFramebufferImageCacheMutex; // Current dataspace of layer being rendered ui::Dataspace mDataSpace = ui::Dataspace::UNKNOWN; Loading