Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 192374c9 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Adjust how present semaphore is handled" into main

parents 08495046 5d3fac14
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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
@@ -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;
+3 −2
Original line number Diff line number Diff line
@@ -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;
+9 −8
Original line number Diff line number Diff line
@@ -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
@@ -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();

@@ -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();
@@ -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;
+3 −2
Original line number Diff line number Diff line
@@ -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;

+2 −2
Original line number Diff line number Diff line
@@ -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