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

Commit ae00b8c5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Enable per-device GPU clock configuration"

parents ad19d128 2dd6f393
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -57,6 +57,9 @@ struct CompositionRefreshArgs {
    // Forces a color mode on the outputs being refreshed
    // Forces a color mode on the outputs being refreshed
    ui::ColorMode forceOutputColorMode{ui::ColorMode::NATIVE};
    ui::ColorMode forceOutputColorMode{ui::ColorMode::NATIVE};


    // If true, GPU clocks will be increased when rendering blurs
    bool blursAreExpensive{false};

    // If true, the complete output geometry needs to be recomputed this frame
    // If true, the complete output geometry needs to be recomputed this frame
    bool updatingOutputGeometryThisFrame{false};
    bool updatingOutputGeometryThisFrame{false};


+2 −1
Original line number Original line Diff line number Diff line
@@ -265,7 +265,8 @@ protected:
    virtual void prepareFrame() = 0;
    virtual void prepareFrame() = 0;
    virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0;
    virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0;
    virtual void finishFrame(const CompositionRefreshArgs&) = 0;
    virtual void finishFrame(const CompositionRefreshArgs&) = 0;
    virtual std::optional<base::unique_fd> composeSurfaces(const Region&) = 0;
    virtual std::optional<base::unique_fd> composeSurfaces(
            const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) = 0;
    virtual void postFramebuffer() = 0;
    virtual void postFramebuffer() = 0;
    virtual void chooseCompositionStrategy() = 0;
    virtual void chooseCompositionStrategy() = 0;
    virtual bool getSkipColorTransform() const = 0;
    virtual bool getSkipColorTransform() const = 0;
+2 −1
Original line number Original line Diff line number Diff line
@@ -83,7 +83,8 @@ public:
    void prepareFrame() override;
    void prepareFrame() override;
    void devOptRepaintFlash(const CompositionRefreshArgs&) override;
    void devOptRepaintFlash(const CompositionRefreshArgs&) override;
    void finishFrame(const CompositionRefreshArgs&) override;
    void finishFrame(const CompositionRefreshArgs&) override;
    std::optional<base::unique_fd> composeSurfaces(const Region&) override;
    std::optional<base::unique_fd> composeSurfaces(
            const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) override;
    void postFramebuffer() override;
    void postFramebuffer() override;
    void cacheClientCompositionRequests(uint32_t) override;
    void cacheClientCompositionRequests(uint32_t) override;


+4 −1
Original line number Original line Diff line number Diff line
@@ -98,7 +98,10 @@ public:


    MOCK_METHOD1(finishFrame, void(const compositionengine::CompositionRefreshArgs&));
    MOCK_METHOD1(finishFrame, void(const compositionengine::CompositionRefreshArgs&));


    MOCK_METHOD1(composeSurfaces, std::optional<base::unique_fd>(const Region&));
    MOCK_METHOD2(composeSurfaces,
                 std::optional<base::unique_fd>(
                         const Region&,
                         const compositionengine::CompositionRefreshArgs& refreshArgs));
    MOCK_CONST_METHOD0(getSkipColorTransform, bool());
    MOCK_CONST_METHOD0(getSkipColorTransform, bool());


    MOCK_METHOD0(postFramebuffer, void());
    MOCK_METHOD0(postFramebuffer, void());
+8 −5
Original line number Original line Diff line number Diff line
@@ -774,7 +774,7 @@ void Output::devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&
        if (!dirtyRegion.isEmpty()) {
        if (!dirtyRegion.isEmpty()) {
            base::unique_fd readyFence;
            base::unique_fd readyFence;
            // redraw the whole screen
            // redraw the whole screen
            static_cast<void>(composeSurfaces(dirtyRegion));
            static_cast<void>(composeSurfaces(dirtyRegion, refreshArgs));


            mRenderSurface->queueBuffer(std::move(readyFence));
            mRenderSurface->queueBuffer(std::move(readyFence));
        }
        }
@@ -787,7 +787,7 @@ void Output::devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&
    prepareFrame();
    prepareFrame();
}
}


void Output::finishFrame(const compositionengine::CompositionRefreshArgs&) {
void Output::finishFrame(const compositionengine::CompositionRefreshArgs& refreshArgs) {
    ATRACE_CALL();
    ATRACE_CALL();
    ALOGV(__FUNCTION__);
    ALOGV(__FUNCTION__);


@@ -797,7 +797,7 @@ void Output::finishFrame(const compositionengine::CompositionRefreshArgs&) {


    // Repaint the framebuffer (if needed), getting the optional fence for when
    // Repaint the framebuffer (if needed), getting the optional fence for when
    // the composition completes.
    // the composition completes.
    auto optReadyFence = composeSurfaces(Region::INVALID_REGION);
    auto optReadyFence = composeSurfaces(Region::INVALID_REGION, refreshArgs);
    if (!optReadyFence) {
    if (!optReadyFence) {
        return;
        return;
    }
    }
@@ -806,7 +806,8 @@ void Output::finishFrame(const compositionengine::CompositionRefreshArgs&) {
    mRenderSurface->queueBuffer(std::move(*optReadyFence));
    mRenderSurface->queueBuffer(std::move(*optReadyFence));
}
}


std::optional<base::unique_fd> Output::composeSurfaces(const Region& debugRegion) {
std::optional<base::unique_fd> Output::composeSurfaces(
        const Region& debugRegion, const compositionengine::CompositionRefreshArgs& refreshArgs) {
    ATRACE_CALL();
    ATRACE_CALL();
    ALOGV(__FUNCTION__);
    ALOGV(__FUNCTION__);


@@ -894,8 +895,10 @@ std::optional<base::unique_fd> Output::composeSurfaces(const Region& debugRegion
    // or complex GPU shaders and it's expensive. We boost the GPU frequency so that
    // or complex GPU shaders and it's expensive. We boost the GPU frequency so that
    // GPU composition can finish in time. We must reset GPU frequency afterwards,
    // GPU composition can finish in time. We must reset GPU frequency afterwards,
    // because high frequency consumes extra battery.
    // because high frequency consumes extra battery.
    const bool expensiveBlurs =
            refreshArgs.blursAreExpensive && mLayerRequestingBackgroundBlur != nullptr;
    const bool expensiveRenderingExpected =
    const bool expensiveRenderingExpected =
            clientCompositionDisplay.outputDataspace == ui::Dataspace::DISPLAY_P3;
            clientCompositionDisplay.outputDataspace == ui::Dataspace::DISPLAY_P3 || expensiveBlurs;
    if (expensiveRenderingExpected) {
    if (expensiveRenderingExpected) {
        setExpensiveRenderingExpected(true);
        setExpensiveRenderingExpected(true);
    }
    }
Loading