Loading libs/renderengine/RenderEngine.cpp +7 −6 Original line number Original line Diff line number Diff line Loading @@ -63,12 +63,13 @@ void RenderEngine::validateOutputBufferUsage(const sp<GraphicBuffer>& buffer) { "output buffer not gpu writeable"); "output buffer not gpu writeable"); } } std::future<RenderEngineResult> RenderEngine::drawLayers( ftl::Future<FenceResult> RenderEngine::drawLayers(const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) { base::unique_fd&& bufferFence) { const auto resultPromise = std::make_shared<std::promise<RenderEngineResult>>(); const auto resultPromise = std::make_shared<std::promise<FenceResult>>(); std::future<RenderEngineResult> resultFuture = resultPromise->get_future(); std::future<FenceResult> resultFuture = resultPromise->get_future(); drawLayersInternal(std::move(resultPromise), display, layers, buffer, useFramebufferCache, drawLayersInternal(std::move(resultPromise), display, layers, buffer, useFramebufferCache, std::move(bufferFence)); std::move(bufferFence)); return resultFuture; return resultFuture; Loading libs/renderengine/benchmark/RenderEngineBench.cpp +8 −7 Original line number Original line Diff line number Diff line Loading @@ -159,9 +159,10 @@ static std::shared_ptr<ExternalTexture> copyBuffer(RenderEngine& re, }; }; auto layers = std::vector<LayerSettings>{layer}; auto layers = std::vector<LayerSettings>{layer}; auto [status, drawFence] = sp<Fence> waitFence = re.drawLayers(display, layers, texture, kUseFrameBufferCache, base::unique_fd()).get(); re.drawLayers(display, layers, texture, kUseFrameBufferCache, base::unique_fd()) sp<Fence> waitFence = sp<Fence>::make(std::move(drawFence)); .get() .value(); waitFence->waitForever(LOG_TAG); waitFence->waitForever(LOG_TAG); return texture; return texture; } } Loading Loading @@ -190,10 +191,10 @@ static void benchDrawLayers(RenderEngine& re, const std::vector<LayerSettings>& // This loop starts and stops the timer. // This loop starts and stops the timer. for (auto _ : benchState) { for (auto _ : benchState) { auto [status, drawFence] = re.drawLayers(display, layers, outputBuffer, sp<Fence> waitFence = re.drawLayers(display, layers, outputBuffer, kUseFrameBufferCache, kUseFrameBufferCache, base::unique_fd()) base::unique_fd()) .get(); .get() sp<Fence> waitFence = sp<Fence>::make(std::move(drawFence)); .value(); waitFence->waitForever(LOG_TAG); waitFence->waitForever(LOG_TAG); } } Loading libs/renderengine/gl/GLESRenderEngine.cpp +10 −11 Original line number Original line Diff line number Diff line Loading @@ -1081,14 +1081,14 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer } } void GLESRenderEngine::drawLayersInternal( void GLESRenderEngine::drawLayersInternal( const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) { base::unique_fd&& bufferFence) { ATRACE_CALL(); ATRACE_CALL(); if (layers.empty()) { if (layers.empty()) { ALOGV("Drawing empty layer stack"); ALOGV("Drawing empty layer stack"); resultPromise->set_value({NO_ERROR, base::unique_fd()}); resultPromise->set_value(Fence::NO_FENCE); return; return; } } Loading @@ -1103,7 +1103,7 @@ void GLESRenderEngine::drawLayersInternal( if (buffer == nullptr) { if (buffer == nullptr) { ALOGE("No output buffer provided. Aborting GPU composition."); ALOGE("No output buffer provided. Aborting GPU composition."); resultPromise->set_value({BAD_VALUE, base::unique_fd()}); resultPromise->set_value(base::unexpected(BAD_VALUE)); return; return; } } Loading Loading @@ -1132,7 +1132,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors(); checkErrors(); resultPromise->set_value({fbo->getStatus(), base::unique_fd()}); resultPromise->set_value(base::unexpected(fbo->getStatus())); return; return; } } setViewportAndProjection(display.physicalDisplay, display.clip); setViewportAndProjection(display.physicalDisplay, display.clip); Loading @@ -1144,7 +1144,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to prepare blur filter! Aborting GPU composition for buffer (%p).", ALOGE("Failed to prepare blur filter! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors(); checkErrors(); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } } } Loading Loading @@ -1178,7 +1178,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't render first blur pass"); checkErrors("Can't render first blur pass"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } Loading @@ -1201,7 +1201,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't bind native framebuffer"); checkErrors("Can't bind native framebuffer"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } Loading @@ -1210,7 +1210,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't render blur filter"); checkErrors("Can't render blur filter"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } } } Loading Loading @@ -1310,7 +1310,7 @@ void GLESRenderEngine::drawLayersInternal( checkErrors(); checkErrors(); // Chances are, something illegal happened (either the caller passed // Chances are, something illegal happened (either the caller passed // us bad parameters, or we messed up our shader generation). // us bad parameters, or we messed up our shader generation). resultPromise->set_value({INVALID_OPERATION, std::move(drawFence)}); resultPromise->set_value(base::unexpected(INVALID_OPERATION)); return; return; } } mLastDrawFence = nullptr; mLastDrawFence = nullptr; Loading @@ -1322,8 +1322,7 @@ void GLESRenderEngine::drawLayersInternal( mPriorResourcesCleaned = false; mPriorResourcesCleaned = false; checkErrors(); checkErrors(); resultPromise->set_value({NO_ERROR, std::move(drawFence)}); resultPromise->set_value(sp<Fence>::make(std::move(drawFence))); return; } } void GLESRenderEngine::setViewportAndProjection(Rect viewport, Rect clip) { void GLESRenderEngine::setViewportAndProjection(Rect viewport, Rect clip) { Loading libs/renderengine/gl/GLESRenderEngine.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <renderengine/RenderEngine.h> #include <renderengine/RenderEngine.h> #include <renderengine/private/Description.h> #include <renderengine/private/Description.h> #include <sys/types.h> #include <sys/types.h> #include <ui/FenceResult.h> #include "GLShadowTexture.h" #include "GLShadowTexture.h" #include "ImageManager.h" #include "ImageManager.h" Loading Loading @@ -102,7 +103,7 @@ protected: EXCLUDES(mRenderingMutex); EXCLUDES(mRenderingMutex); void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); bool canSkipPostRenderCleanup() const override; bool canSkipPostRenderCleanup() const override; void drawLayersInternal(const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, void drawLayersInternal(const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const std::shared_ptr<ExternalTexture>& buffer, Loading libs/renderengine/include/renderengine/RenderEngine.h +10 −15 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define SF_RENDERENGINE_H_ #define SF_RENDERENGINE_H_ #include <android-base/unique_fd.h> #include <android-base/unique_fd.h> #include <ftl/future.h> #include <math/mat4.h> #include <math/mat4.h> #include <renderengine/DisplaySettings.h> #include <renderengine/DisplaySettings.h> #include <renderengine/ExternalTexture.h> #include <renderengine/ExternalTexture.h> Loading @@ -26,6 +27,7 @@ #include <renderengine/LayerSettings.h> #include <renderengine/LayerSettings.h> #include <stdint.h> #include <stdint.h> #include <sys/types.h> #include <sys/types.h> #include <ui/FenceResult.h> #include <ui/GraphicTypes.h> #include <ui/GraphicTypes.h> #include <ui/Transform.h> #include <ui/Transform.h> Loading Loading @@ -68,7 +70,6 @@ class Image; class Mesh; class Mesh; class Texture; class Texture; struct RenderEngineCreationArgs; struct RenderEngineCreationArgs; struct RenderEngineResult; namespace threaded { namespace threaded { class RenderEngineThreaded; class RenderEngineThreaded; Loading Loading @@ -158,11 +159,12 @@ public: // parameter does nothing. // parameter does nothing. // @param bufferFence Fence signalling that the buffer is ready to be drawn // @param bufferFence Fence signalling that the buffer is ready to be drawn // to. // to. // @return A future object of RenderEngineResult struct indicating whether // @return A future object of FenceResult indicating whether drawing was // drawing was successful in async mode. // successful in async mode. virtual std::future<RenderEngineResult> drawLayers( virtual ftl::Future<FenceResult> drawLayers(const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence); base::unique_fd&& bufferFence); // Clean-up method that should be called on the main thread after the // Clean-up method that should be called on the main thread after the Loading Loading @@ -237,7 +239,7 @@ protected: const RenderEngineType mRenderEngineType; const RenderEngineType mRenderEngineType; virtual void drawLayersInternal( virtual void drawLayersInternal( const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) = 0; base::unique_fd&& bufferFence) = 0; Loading Loading @@ -327,13 +329,6 @@ private: RenderEngine::RenderEngineType::SKIA_GL_THREADED; RenderEngine::RenderEngineType::SKIA_GL_THREADED; }; }; struct RenderEngineResult { // status indicates if drawing is successful status_t status; // drawFence will fire when the buffer has been drawn to and is ready to be examined. base::unique_fd drawFence; }; } // namespace renderengine } // namespace renderengine } // namespace android } // namespace android Loading Loading
libs/renderengine/RenderEngine.cpp +7 −6 Original line number Original line Diff line number Diff line Loading @@ -63,12 +63,13 @@ void RenderEngine::validateOutputBufferUsage(const sp<GraphicBuffer>& buffer) { "output buffer not gpu writeable"); "output buffer not gpu writeable"); } } std::future<RenderEngineResult> RenderEngine::drawLayers( ftl::Future<FenceResult> RenderEngine::drawLayers(const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) { base::unique_fd&& bufferFence) { const auto resultPromise = std::make_shared<std::promise<RenderEngineResult>>(); const auto resultPromise = std::make_shared<std::promise<FenceResult>>(); std::future<RenderEngineResult> resultFuture = resultPromise->get_future(); std::future<FenceResult> resultFuture = resultPromise->get_future(); drawLayersInternal(std::move(resultPromise), display, layers, buffer, useFramebufferCache, drawLayersInternal(std::move(resultPromise), display, layers, buffer, useFramebufferCache, std::move(bufferFence)); std::move(bufferFence)); return resultFuture; return resultFuture; Loading
libs/renderengine/benchmark/RenderEngineBench.cpp +8 −7 Original line number Original line Diff line number Diff line Loading @@ -159,9 +159,10 @@ static std::shared_ptr<ExternalTexture> copyBuffer(RenderEngine& re, }; }; auto layers = std::vector<LayerSettings>{layer}; auto layers = std::vector<LayerSettings>{layer}; auto [status, drawFence] = sp<Fence> waitFence = re.drawLayers(display, layers, texture, kUseFrameBufferCache, base::unique_fd()).get(); re.drawLayers(display, layers, texture, kUseFrameBufferCache, base::unique_fd()) sp<Fence> waitFence = sp<Fence>::make(std::move(drawFence)); .get() .value(); waitFence->waitForever(LOG_TAG); waitFence->waitForever(LOG_TAG); return texture; return texture; } } Loading Loading @@ -190,10 +191,10 @@ static void benchDrawLayers(RenderEngine& re, const std::vector<LayerSettings>& // This loop starts and stops the timer. // This loop starts and stops the timer. for (auto _ : benchState) { for (auto _ : benchState) { auto [status, drawFence] = re.drawLayers(display, layers, outputBuffer, sp<Fence> waitFence = re.drawLayers(display, layers, outputBuffer, kUseFrameBufferCache, kUseFrameBufferCache, base::unique_fd()) base::unique_fd()) .get(); .get() sp<Fence> waitFence = sp<Fence>::make(std::move(drawFence)); .value(); waitFence->waitForever(LOG_TAG); waitFence->waitForever(LOG_TAG); } } Loading
libs/renderengine/gl/GLESRenderEngine.cpp +10 −11 Original line number Original line Diff line number Diff line Loading @@ -1081,14 +1081,14 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer } } void GLESRenderEngine::drawLayersInternal( void GLESRenderEngine::drawLayersInternal( const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) { base::unique_fd&& bufferFence) { ATRACE_CALL(); ATRACE_CALL(); if (layers.empty()) { if (layers.empty()) { ALOGV("Drawing empty layer stack"); ALOGV("Drawing empty layer stack"); resultPromise->set_value({NO_ERROR, base::unique_fd()}); resultPromise->set_value(Fence::NO_FENCE); return; return; } } Loading @@ -1103,7 +1103,7 @@ void GLESRenderEngine::drawLayersInternal( if (buffer == nullptr) { if (buffer == nullptr) { ALOGE("No output buffer provided. Aborting GPU composition."); ALOGE("No output buffer provided. Aborting GPU composition."); resultPromise->set_value({BAD_VALUE, base::unique_fd()}); resultPromise->set_value(base::unexpected(BAD_VALUE)); return; return; } } Loading Loading @@ -1132,7 +1132,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors(); checkErrors(); resultPromise->set_value({fbo->getStatus(), base::unique_fd()}); resultPromise->set_value(base::unexpected(fbo->getStatus())); return; return; } } setViewportAndProjection(display.physicalDisplay, display.clip); setViewportAndProjection(display.physicalDisplay, display.clip); Loading @@ -1144,7 +1144,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to prepare blur filter! Aborting GPU composition for buffer (%p).", ALOGE("Failed to prepare blur filter! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors(); checkErrors(); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } } } Loading Loading @@ -1178,7 +1178,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't render first blur pass"); checkErrors("Can't render first blur pass"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } Loading @@ -1201,7 +1201,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't bind native framebuffer"); checkErrors("Can't bind native framebuffer"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } Loading @@ -1210,7 +1210,7 @@ void GLESRenderEngine::drawLayersInternal( ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", ALOGE("Failed to render blur effect! Aborting GPU composition for buffer (%p).", buffer->getBuffer()->handle); buffer->getBuffer()->handle); checkErrors("Can't render blur filter"); checkErrors("Can't render blur filter"); resultPromise->set_value({status, base::unique_fd()}); resultPromise->set_value(base::unexpected(status)); return; return; } } } } Loading Loading @@ -1310,7 +1310,7 @@ void GLESRenderEngine::drawLayersInternal( checkErrors(); checkErrors(); // Chances are, something illegal happened (either the caller passed // Chances are, something illegal happened (either the caller passed // us bad parameters, or we messed up our shader generation). // us bad parameters, or we messed up our shader generation). resultPromise->set_value({INVALID_OPERATION, std::move(drawFence)}); resultPromise->set_value(base::unexpected(INVALID_OPERATION)); return; return; } } mLastDrawFence = nullptr; mLastDrawFence = nullptr; Loading @@ -1322,8 +1322,7 @@ void GLESRenderEngine::drawLayersInternal( mPriorResourcesCleaned = false; mPriorResourcesCleaned = false; checkErrors(); checkErrors(); resultPromise->set_value({NO_ERROR, std::move(drawFence)}); resultPromise->set_value(sp<Fence>::make(std::move(drawFence))); return; } } void GLESRenderEngine::setViewportAndProjection(Rect viewport, Rect clip) { void GLESRenderEngine::setViewportAndProjection(Rect viewport, Rect clip) { Loading
libs/renderengine/gl/GLESRenderEngine.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <renderengine/RenderEngine.h> #include <renderengine/RenderEngine.h> #include <renderengine/private/Description.h> #include <renderengine/private/Description.h> #include <sys/types.h> #include <sys/types.h> #include <ui/FenceResult.h> #include "GLShadowTexture.h" #include "GLShadowTexture.h" #include "ImageManager.h" #include "ImageManager.h" Loading Loading @@ -102,7 +103,7 @@ protected: EXCLUDES(mRenderingMutex); EXCLUDES(mRenderingMutex); void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); bool canSkipPostRenderCleanup() const override; bool canSkipPostRenderCleanup() const override; void drawLayersInternal(const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, void drawLayersInternal(const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const std::shared_ptr<ExternalTexture>& buffer, Loading
libs/renderengine/include/renderengine/RenderEngine.h +10 −15 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define SF_RENDERENGINE_H_ #define SF_RENDERENGINE_H_ #include <android-base/unique_fd.h> #include <android-base/unique_fd.h> #include <ftl/future.h> #include <math/mat4.h> #include <math/mat4.h> #include <renderengine/DisplaySettings.h> #include <renderengine/DisplaySettings.h> #include <renderengine/ExternalTexture.h> #include <renderengine/ExternalTexture.h> Loading @@ -26,6 +27,7 @@ #include <renderengine/LayerSettings.h> #include <renderengine/LayerSettings.h> #include <stdint.h> #include <stdint.h> #include <sys/types.h> #include <sys/types.h> #include <ui/FenceResult.h> #include <ui/GraphicTypes.h> #include <ui/GraphicTypes.h> #include <ui/Transform.h> #include <ui/Transform.h> Loading Loading @@ -68,7 +70,6 @@ class Image; class Mesh; class Mesh; class Texture; class Texture; struct RenderEngineCreationArgs; struct RenderEngineCreationArgs; struct RenderEngineResult; namespace threaded { namespace threaded { class RenderEngineThreaded; class RenderEngineThreaded; Loading Loading @@ -158,11 +159,12 @@ public: // parameter does nothing. // parameter does nothing. // @param bufferFence Fence signalling that the buffer is ready to be drawn // @param bufferFence Fence signalling that the buffer is ready to be drawn // to. // to. // @return A future object of RenderEngineResult struct indicating whether // @return A future object of FenceResult indicating whether drawing was // drawing was successful in async mode. // successful in async mode. virtual std::future<RenderEngineResult> drawLayers( virtual ftl::Future<FenceResult> drawLayers(const DisplaySettings& display, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence); base::unique_fd&& bufferFence); // Clean-up method that should be called on the main thread after the // Clean-up method that should be called on the main thread after the Loading Loading @@ -237,7 +239,7 @@ protected: const RenderEngineType mRenderEngineType; const RenderEngineType mRenderEngineType; virtual void drawLayersInternal( virtual void drawLayersInternal( const std::shared_ptr<std::promise<RenderEngineResult>>&& resultPromise, const std::shared_ptr<std::promise<FenceResult>>&& resultPromise, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const DisplaySettings& display, const std::vector<LayerSettings>& layers, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, const std::shared_ptr<ExternalTexture>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence) = 0; base::unique_fd&& bufferFence) = 0; Loading Loading @@ -327,13 +329,6 @@ private: RenderEngine::RenderEngineType::SKIA_GL_THREADED; RenderEngine::RenderEngineType::SKIA_GL_THREADED; }; }; struct RenderEngineResult { // status indicates if drawing is successful status_t status; // drawFence will fire when the buffer has been drawn to and is ready to be examined. base::unique_fd drawFence; }; } // namespace renderengine } // namespace renderengine } // namespace android } // namespace android Loading