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

Commit 15ecd1ce authored by Matt Buckley's avatar Matt Buckley
Browse files

Send load reset hint from SF in advance of frame

Send a load reset hint from SF to wake the session, to help move
responsibility for this to individual sessions and away from
DISPLAY_UPDATE_IMMINENT.

Bug: b/256918431
Test: atest libsurfaceflinger_unittest
Change-Id: I5a3c04682993866d9c0b4531ab69cfb903500813
parent d1c36ee0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ public:
    MOCK_METHOD(void, setExpensiveRenderingExpected, (DisplayId displayId, bool expected),
                (override));
    MOCK_METHOD(bool, isUsingExpensiveRendering, (), (override));
    MOCK_METHOD(void, notifyDisplayUpdateImminent, (), (override));
    MOCK_METHOD(void, notifyDisplayUpdateImminentAndCpuReset, (), (override));
    MOCK_METHOD(bool, usePowerHintSession, (), (override));
    MOCK_METHOD(bool, supportsPowerHintSession, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
+10 −5
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ using android::hardware::power::Boost;
using android::hardware::power::IPower;
using android::hardware::power::IPowerHintSession;
using android::hardware::power::Mode;
using android::hardware::power::SessionHint;
using android::hardware::power::WorkDuration;

PowerAdvisor::~PowerAdvisor() = default;
@@ -140,7 +141,7 @@ void PowerAdvisor::setExpensiveRenderingExpected(DisplayId displayId, bool expec
    }
}

void PowerAdvisor::notifyDisplayUpdateImminent() {
void PowerAdvisor::notifyDisplayUpdateImminentAndCpuReset() {
    // Only start sending this notification once the system has booted so we don't introduce an
    // early-boot dependency on Power HAL
    if (!mBootFinished.load()) {
@@ -154,7 +155,7 @@ void PowerAdvisor::notifyDisplayUpdateImminent() {
            return;
        }

        if (!halWrapper->notifyDisplayUpdateImminent()) {
        if (!halWrapper->notifyDisplayUpdateImminentAndCpuReset()) {
            // The HAL has become unavailable; attempt to reconnect later
            mReconnectPowerHal = true;
            return;
@@ -599,7 +600,7 @@ public:
        return ret.isOk();
    }

    bool notifyDisplayUpdateImminent() override {
    bool notifyDisplayUpdateImminentAndCpuReset() override {
        // Power HAL 1.x doesn't have a notification for this
        ALOGV("HIDL notifyUpdateImminent received but can't send");
        return true;
@@ -675,8 +676,12 @@ bool AidlPowerHalWrapper::setExpensiveRendering(bool enabled) {
    return ret.isOk();
}

bool AidlPowerHalWrapper::notifyDisplayUpdateImminent() {
    ALOGV("AIDL notifyDisplayUpdateImminent");
bool AidlPowerHalWrapper::notifyDisplayUpdateImminentAndCpuReset() {
    ALOGV("AIDL notifyDisplayUpdateImminentAndCpuReset");
    if (isPowerHintSessionRunning()) {
        mPowerHintSession->sendHint(SessionHint::CPU_LOAD_RESET);
    }

    if (!mHasDisplayUpdateImminent) {
        ALOGV("Skipped sending DISPLAY_UPDATE_IMMINENT because HAL doesn't support it");
        return true;
+4 −4
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ public:
    virtual void onBootFinished() = 0;
    virtual void setExpensiveRenderingExpected(DisplayId displayId, bool expected) = 0;
    virtual bool isUsingExpensiveRendering() = 0;
    virtual void notifyDisplayUpdateImminent() = 0;
    virtual void notifyDisplayUpdateImminentAndCpuReset() = 0;
    // Checks both if it supports and if it's enabled
    virtual bool usePowerHintSession() = 0;
    virtual bool supportsPowerHintSession() = 0;
@@ -106,7 +106,7 @@ public:
        virtual ~HalWrapper() = default;

        virtual bool setExpensiveRendering(bool enabled) = 0;
        virtual bool notifyDisplayUpdateImminent() = 0;
        virtual bool notifyDisplayUpdateImminentAndCpuReset() = 0;
        virtual bool supportsPowerHintSession() = 0;
        virtual bool isPowerHintSessionRunning() = 0;
        virtual void restartPowerHintSession() = 0;
@@ -126,7 +126,7 @@ public:
    void onBootFinished() override;
    void setExpensiveRenderingExpected(DisplayId displayId, bool expected) override;
    bool isUsingExpensiveRendering() override { return mNotifiedExpensiveRendering; };
    void notifyDisplayUpdateImminent() override;
    void notifyDisplayUpdateImminentAndCpuReset() override;
    bool usePowerHintSession() override;
    bool supportsPowerHintSession() override;
    bool isPowerHintSessionRunning() override;
@@ -289,7 +289,7 @@ public:
    static std::unique_ptr<HalWrapper> connect();

    bool setExpensiveRendering(bool enabled) override;
    bool notifyDisplayUpdateImminent() override;
    bool notifyDisplayUpdateImminentAndCpuReset() override;
    bool supportsPowerHintSession() override;
    bool isPowerHintSessionRunning() override;
    void restartPowerHintSession() override;
+1 −1
Original line number Diff line number Diff line
@@ -1806,7 +1806,7 @@ void SurfaceFlinger::scheduleCommit(FrameHint hint) {
    if (hint == FrameHint::kActive) {
        mScheduler->resetIdleTimer();
    }
    mPowerAdvisor->notifyDisplayUpdateImminent();
    mPowerAdvisor->notifyDisplayUpdateImminentAndCpuReset();
    mScheduler->scheduleFrame();
}

+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ public:
    MockAidlPowerHalWrapper();
    ~MockAidlPowerHalWrapper() override;
    MOCK_METHOD(bool, setExpensiveRendering, (bool enabled), (override));
    MOCK_METHOD(bool, notifyDisplayUpdateImminent, (), (override));
    MOCK_METHOD(bool, notifyDisplayUpdateImminentAndCpuReset, (), (override));
    MOCK_METHOD(bool, supportsPowerHintSession, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
    MOCK_METHOD(void, restartPowerHintSession, (), (override));
Loading