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

Commit 8fc39174 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "SF: reset idle state when RefreshRateConfigs changes" into sc-v2-dev am: 2731fe53

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/16235719

Change-Id: Ia851cb8d41c2b898b7a86826e967da30d02e8e09
parents ee88ea4c 2731fe53
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -701,7 +701,6 @@ void RefreshRateConfigs::initializeIdleTimer() {
                [getCallback] {
                    if (const auto callback = getCallback()) callback->onExpired();
                });
        mIdleTimer->start();
    }
}

+16 −4
Original line number Diff line number Diff line
@@ -362,10 +362,22 @@ public:
                               std::function<void()> kernelTimerExpired) {
        std::scoped_lock lock(mIdleTimerCallbacksMutex);
        mIdleTimerCallbacks.emplace();
        mIdleTimerCallbacks->platform.onReset = platformTimerReset;
        mIdleTimerCallbacks->platform.onExpired = platformTimerExpired;
        mIdleTimerCallbacks->kernel.onReset = kernelTimerReset;
        mIdleTimerCallbacks->kernel.onExpired = kernelTimerExpired;
        mIdleTimerCallbacks->platform.onReset = std::move(platformTimerReset);
        mIdleTimerCallbacks->platform.onExpired = std::move(platformTimerExpired);
        mIdleTimerCallbacks->kernel.onReset = std::move(kernelTimerReset);
        mIdleTimerCallbacks->kernel.onExpired = std::move(kernelTimerExpired);
    }

    void startIdleTimer() {
        if (mIdleTimer) {
            mIdleTimer->start();
        }
    }

    void stopIdleTimer() {
        if (mIdleTimer) {
            mIdleTimer->stop();
        }
    }

    void resetIdleTimer(bool kernelOnly) {
+26 −11
Original line number Diff line number Diff line
@@ -181,17 +181,32 @@ public:

    void setRefreshRateConfigs(std::shared_ptr<scheduler::RefreshRateConfigs> refreshRateConfigs)
            EXCLUDES(mRefreshRateConfigsLock) {
        // We need to stop the idle timer on the previous RefreshRateConfigs instance
        // and cleanup the scheduler's state before we switch to the other RefreshRateConfigs.
        {
            std::scoped_lock lock(mRefreshRateConfigsLock);
            if (mRefreshRateConfigs) mRefreshRateConfigs->stopIdleTimer();
        }
        {
            std::scoped_lock lock(mFeatureStateLock);
            mFeatures = {};
        }
        {
            std::scoped_lock lock(mRefreshRateConfigsLock);
            mRefreshRateConfigs = std::move(refreshRateConfigs);
            mRefreshRateConfigs->setIdleTimerCallbacks(
                    [this] { std::invoke(&Scheduler::idleTimerCallback, this, TimerState::Reset); },
                [this] { std::invoke(&Scheduler::idleTimerCallback, this, TimerState::Expired); },
                    [this] {
                        std::invoke(&Scheduler::idleTimerCallback, this, TimerState::Expired);
                    },
                    [this] {
                        std::invoke(&Scheduler::kernelIdleTimerCallback, this, TimerState::Reset);
                    },
                    [this] {
                        std::invoke(&Scheduler::kernelIdleTimerCallback, this, TimerState::Expired);
                    });
            mRefreshRateConfigs->startIdleTimer();
        }
    }

    nsecs_t getVsyncPeriodFromRefreshRateConfigs() const EXCLUDES(mRefreshRateConfigsLock) {