Loading libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -187,11 +187,12 @@ IRenderPipeline::DrawResult SkiaOpenGLPipeline::draw( dumpResourceCacheUsage(); } return {true, IRenderPipeline::DrawResult::kUnknownTime}; return {true, IRenderPipeline::DrawResult::kUnknownTime, android::base::unique_fd{}}; } bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { GL_CHECKPOINT(LOW); // Even if we decided to cancel the frame, from the perspective of jank Loading @@ -202,7 +203,7 @@ bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect return false; } *requireSwap = drew || mEglManager.damageRequiresSwap(); *requireSwap = drawResult.success || mEglManager.damageRequiresSwap(); if (*requireSwap && (CC_UNLIKELY(!mEglManager.swapBuffers(frame, screenDirty)))) { return false; Loading libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h +3 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,9 @@ public: const std::vector<sp<RenderNode> >& renderNodes, FrameInfoVisualizer* profiler, const renderthread::HardwareBufferRenderParams& bufferParams) override; GrSurfaceOrigin getSurfaceOrigin() override { return kBottomLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; bool swapBuffers(const renderthread::Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior) override; [[nodiscard]] android::base::unique_fd flush() override; Loading libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( } if (backBuffer.get() == nullptr) { return {false, -1}; return {false, -1, android::base::unique_fd{}}; } // update the coordinates of the global light position based on surface rotation Loading @@ -110,10 +110,10 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( profiler->draw(profileRenderer); } nsecs_t submissionTime = IRenderPipeline::DrawResult::kUnknownTime; VulkanManager::VkDrawResult drawResult; { ATRACE_NAME("flush commands"); submissionTime = vulkanManager().finishFrame(backBuffer.get()); drawResult = vulkanManager().finishFrame(backBuffer.get()); } layerUpdateQueue->clear(); Loading @@ -122,11 +122,12 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( dumpResourceCacheUsage(); } return {true, submissionTime}; return {true, drawResult.submissionTime, std::move(drawResult.presentFence)}; } bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { // Even if we decided to cancel the frame, from the perspective of jank // metrics the frame was swapped at this point currentFrameInfo->markSwapBuffers(); Loading @@ -135,10 +136,10 @@ bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect return false; } *requireSwap = drew; *requireSwap = drawResult.success; if (*requireSwap) { vulkanManager().swapBuffers(mVkSurface, screenDirty); vulkanManager().swapBuffers(mVkSurface, screenDirty, std::move(drawResult.presentFence)); } return *requireSwap; Loading libs/hwui/pipeline/skia/SkiaVulkanPipeline.h +3 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,9 @@ public: const std::vector<sp<RenderNode> >& renderNodes, FrameInfoVisualizer* profiler, const renderthread::HardwareBufferRenderParams& bufferParams) override; GrSurfaceOrigin getSurfaceOrigin() override { return kTopLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; bool swapBuffers(const renderthread::Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; [[nodiscard]] android::base::unique_fd flush() override; Loading libs/hwui/renderthread/CanvasContext.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -664,8 +664,8 @@ void CanvasContext::draw(bool solelyTextureViewUpdates) { bool didDraw = false; int error = OK; bool didSwap = mRenderPipeline->swapBuffers(frame, drawResult.success, windowDirty, mCurrentFrameInfo, &requireSwap); bool didSwap = mRenderPipeline->swapBuffers(frame, drawResult, windowDirty, mCurrentFrameInfo, &requireSwap); mCurrentFrameInfo->set(FrameInfoIndex::CommandSubmissionCompleted) = std::max( drawResult.commandSubmissionTime, mCurrentFrameInfo->get(FrameInfoIndex::SwapBuffers)); Loading Loading
libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -187,11 +187,12 @@ IRenderPipeline::DrawResult SkiaOpenGLPipeline::draw( dumpResourceCacheUsage(); } return {true, IRenderPipeline::DrawResult::kUnknownTime}; return {true, IRenderPipeline::DrawResult::kUnknownTime, android::base::unique_fd{}}; } bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { GL_CHECKPOINT(LOW); // Even if we decided to cancel the frame, from the perspective of jank Loading @@ -202,7 +203,7 @@ bool SkiaOpenGLPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect return false; } *requireSwap = drew || mEglManager.damageRequiresSwap(); *requireSwap = drawResult.success || mEglManager.damageRequiresSwap(); if (*requireSwap && (CC_UNLIKELY(!mEglManager.swapBuffers(frame, screenDirty)))) { return false; Loading
libs/hwui/pipeline/skia/SkiaOpenGLPipeline.h +3 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,9 @@ public: const std::vector<sp<RenderNode> >& renderNodes, FrameInfoVisualizer* profiler, const renderthread::HardwareBufferRenderParams& bufferParams) override; GrSurfaceOrigin getSurfaceOrigin() override { return kBottomLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; bool swapBuffers(const renderthread::Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior) override; [[nodiscard]] android::base::unique_fd flush() override; Loading
libs/hwui/pipeline/skia/SkiaVulkanPipeline.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( } if (backBuffer.get() == nullptr) { return {false, -1}; return {false, -1, android::base::unique_fd{}}; } // update the coordinates of the global light position based on surface rotation Loading @@ -110,10 +110,10 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( profiler->draw(profileRenderer); } nsecs_t submissionTime = IRenderPipeline::DrawResult::kUnknownTime; VulkanManager::VkDrawResult drawResult; { ATRACE_NAME("flush commands"); submissionTime = vulkanManager().finishFrame(backBuffer.get()); drawResult = vulkanManager().finishFrame(backBuffer.get()); } layerUpdateQueue->clear(); Loading @@ -122,11 +122,12 @@ IRenderPipeline::DrawResult SkiaVulkanPipeline::draw( dumpResourceCacheUsage(); } return {true, submissionTime}; return {true, drawResult.submissionTime, std::move(drawResult.presentFence)}; } bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) { // Even if we decided to cancel the frame, from the perspective of jank // metrics the frame was swapped at this point currentFrameInfo->markSwapBuffers(); Loading @@ -135,10 +136,10 @@ bool SkiaVulkanPipeline::swapBuffers(const Frame& frame, bool drew, const SkRect return false; } *requireSwap = drew; *requireSwap = drawResult.success; if (*requireSwap) { vulkanManager().swapBuffers(mVkSurface, screenDirty); vulkanManager().swapBuffers(mVkSurface, screenDirty, std::move(drawResult.presentFence)); } return *requireSwap; Loading
libs/hwui/pipeline/skia/SkiaVulkanPipeline.h +3 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,9 @@ public: const std::vector<sp<RenderNode> >& renderNodes, FrameInfoVisualizer* profiler, const renderthread::HardwareBufferRenderParams& bufferParams) override; GrSurfaceOrigin getSurfaceOrigin() override { return kTopLeft_GrSurfaceOrigin; } bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; bool swapBuffers(const renderthread::Frame& frame, IRenderPipeline::DrawResult& drawResult, const SkRect& screenDirty, FrameInfo* currentFrameInfo, bool* requireSwap) override; DeferredLayerUpdater* createTextureLayer() override; [[nodiscard]] android::base::unique_fd flush() override; Loading
libs/hwui/renderthread/CanvasContext.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -664,8 +664,8 @@ void CanvasContext::draw(bool solelyTextureViewUpdates) { bool didDraw = false; int error = OK; bool didSwap = mRenderPipeline->swapBuffers(frame, drawResult.success, windowDirty, mCurrentFrameInfo, &requireSwap); bool didSwap = mRenderPipeline->swapBuffers(frame, drawResult, windowDirty, mCurrentFrameInfo, &requireSwap); mCurrentFrameInfo->set(FrameInfoIndex::CommandSubmissionCompleted) = std::max( drawResult.commandSubmissionTime, mCurrentFrameInfo->get(FrameInfoIndex::SwapBuffers)); Loading