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

Commit 07950eaa authored by Xiang Wang's avatar Xiang Wang Committed by Android (Google) Code Review
Browse files

Merge "Add ADPF GPU duration reporting for SurfaceFlinger" into main

parents f808d398 aab3116b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -321,7 +321,9 @@ protected:
            const Region& flashRegion,
            std::vector<LayerFE::LayerSettings>& clientCompositionLayers) = 0;
    virtual void setExpensiveRenderingExpected(bool enabled) = 0;
    virtual void setHintSessionGpuStart(TimePoint startTime) = 0;
    virtual void setHintSessionGpuFence(std::unique_ptr<FenceTime>&& gpuFence) = 0;
    virtual void setHintSessionRequiresRenderEngine(bool requiresRenderEngine) = 0;
    virtual bool isPowerHintSessionEnabled() = 0;
    virtual void cacheClientCompositionRequests(uint32_t cacheSize) = 0;
    virtual bool canPredictCompositionStrategy(const CompositionRefreshArgs&) = 0;
+2 −0
Original line number Diff line number Diff line
@@ -93,7 +93,9 @@ public:

private:
    bool isPowerHintSessionEnabled() override;
    void setHintSessionGpuStart(TimePoint startTime) override;
    void setHintSessionGpuFence(std::unique_ptr<FenceTime>&& gpuFence) override;
    void setHintSessionRequiresRenderEngine(bool requiresRenderEngine) override;
    DisplayId mId;
    bool mIsDisconnected = false;
    Hwc2::PowerAdvisor* mPowerAdvisor = nullptr;
+2 −0
Original line number Diff line number Diff line
@@ -144,7 +144,9 @@ protected:
            std::vector<LayerFE*>& outLayerFEs) override;
    void appendRegionFlashRequests(const Region&, std::vector<LayerFE::LayerSettings>&) override;
    void setExpensiveRenderingExpected(bool enabled) override;
    void setHintSessionGpuStart(TimePoint startTime) override;
    void setHintSessionGpuFence(std::unique_ptr<FenceTime>&& gpuFence) override;
    void setHintSessionRequiresRenderEngine(bool requiresRenderEngine) override;
    bool isPowerHintSessionEnabled() override;
    void dumpBase(std::string&) const;

+2 −0
Original line number Diff line number Diff line
@@ -134,7 +134,9 @@ public:
    MOCK_METHOD1(canPredictCompositionStrategy, bool(const CompositionRefreshArgs&));
    MOCK_METHOD1(setPredictCompositionStrategy, void(bool));
    MOCK_METHOD1(setTreat170mAsSrgb, void(bool));
    MOCK_METHOD(void, setHintSessionGpuStart, (TimePoint startTime));
    MOCK_METHOD(void, setHintSessionGpuFence, (std::unique_ptr<FenceTime> && gpuFence));
    MOCK_METHOD(void, setHintSessionRequiresRenderEngine, (bool requiresRenderEngine));
    MOCK_METHOD(bool, isPowerHintSessionEnabled, ());
};

+10 −4
Original line number Diff line number Diff line
@@ -252,10 +252,6 @@ bool Display::chooseCompositionStrategy(
    auto& hwc = getCompositionEngine().getHwComposer();
    const bool requiresClientComposition = anyLayersRequireClientComposition();

    if (isPowerHintSessionEnabled()) {
        mPowerAdvisor->setRequiresClientComposition(mId, requiresClientComposition);
    }

    const TimePoint hwcValidateStartTime = TimePoint::now();

    if (status_t result = hwc.getDeviceCompositionChanges(*halDisplayId, requiresClientComposition,
@@ -416,10 +412,20 @@ bool Display::isPowerHintSessionEnabled() {
    return mPowerAdvisor != nullptr && mPowerAdvisor->usePowerHintSession();
}

// For ADPF GPU v0 this is expected to set start time to when the GPU commands are submitted with
// fence returned, i.e. when RenderEngine flushes the commands and returns the draw fence.
void Display::setHintSessionGpuStart(TimePoint startTime) {
    mPowerAdvisor->setGpuStartTime(mId, startTime);
}

void Display::setHintSessionGpuFence(std::unique_ptr<FenceTime>&& gpuFence) {
    mPowerAdvisor->setGpuFenceTime(mId, std::move(gpuFence));
}

void Display::setHintSessionRequiresRenderEngine(bool requiresRenderEngine) {
    mPowerAdvisor->setRequiresRenderEngine(mId, requiresRenderEngine);
}

void Display::finishFrame(GpuCompositionResult&& result) {
    // We only need to actually compose the display if:
    // 1) It is being handled by hardware composer, which may need this to
Loading