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

Commit 437e7e59 authored by Wei Wang's avatar Wei Wang Committed by Android (Google) Code Review
Browse files

Merge "Send load reset hint from SF in advance of frame"

parents a3232bf4 15ecd1ce
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ public:
    MOCK_METHOD(void, setExpensiveRenderingExpected, (DisplayId displayId, bool expected),
    MOCK_METHOD(void, setExpensiveRenderingExpected, (DisplayId displayId, bool expected),
                (override));
                (override));
    MOCK_METHOD(bool, isUsingExpensiveRendering, (), (override));
    MOCK_METHOD(bool, isUsingExpensiveRendering, (), (override));
    MOCK_METHOD(void, notifyDisplayUpdateImminent, (), (override));
    MOCK_METHOD(void, notifyDisplayUpdateImminentAndCpuReset, (), (override));
    MOCK_METHOD(bool, usePowerHintSession, (), (override));
    MOCK_METHOD(bool, usePowerHintSession, (), (override));
    MOCK_METHOD(bool, supportsPowerHintSession, (), (override));
    MOCK_METHOD(bool, supportsPowerHintSession, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
+10 −5
Original line number Original line Diff line number Diff line
@@ -57,6 +57,7 @@ using android::hardware::power::Boost;
using android::hardware::power::IPower;
using android::hardware::power::IPower;
using android::hardware::power::IPowerHintSession;
using android::hardware::power::IPowerHintSession;
using android::hardware::power::Mode;
using android::hardware::power::Mode;
using android::hardware::power::SessionHint;
using android::hardware::power::WorkDuration;
using android::hardware::power::WorkDuration;


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


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


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


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

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


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


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


+1 −1
Original line number Original line Diff line number Diff line
@@ -36,7 +36,7 @@ public:
    MockAidlPowerHalWrapper();
    MockAidlPowerHalWrapper();
    ~MockAidlPowerHalWrapper() override;
    ~MockAidlPowerHalWrapper() override;
    MOCK_METHOD(bool, setExpensiveRendering, (bool enabled), (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, supportsPowerHintSession, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
    MOCK_METHOD(bool, isPowerHintSessionRunning, (), (override));
    MOCK_METHOD(void, restartPowerHintSession, (), (override));
    MOCK_METHOD(void, restartPowerHintSession, (), (override));
Loading