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

Commit 1b99d789 authored by Matt Buckley's avatar Matt Buckley
Browse files

Send cached target duration when creating sessions

This fixes an issue where the default target duration was being sent
when re-creating sessions, after the true target duration was already
known. This caused the wrong value in PowerHAL, and no corrective update
was sent because the cached value never changed.

Bug: 301806277
Test: hwuitest
Change-Id: I80d90e855fce92264d8341aad78b19dc547b65f4
parent cab68154
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ void HintSessionWrapper::destroy() {
        mSessionValid = true;
        mHintSession = nullptr;
    }
    mResetsSinceLastReport = 0;
}

bool HintSessionWrapper::init() {
@@ -109,12 +110,13 @@ bool HintSessionWrapper::init() {
    tids.push_back(mUiThreadId);
    tids.push_back(mRenderThreadId);

    // Use a placeholder target value to initialize,
    // this will always be replaced elsewhere before it gets used
    int64_t defaultTargetDurationNanos = 16666667;
    // Use the cached target value if there is one, otherwise use a default. This is to ensure
    // the cached target and target in PowerHAL are consistent, and that it updates correctly
    // whenever there is a change.
    int64_t targetDurationNanos =
            mLastTargetWorkDuration == 0 ? kDefaultTargetDuration : mLastTargetWorkDuration;
    mHintSessionFuture = CommonPool::async([=, this, tids = std::move(tids)] {
        return mBinding->createSession(manager, tids.data(), tids.size(),
                                       defaultTargetDurationNanos);
        return mBinding->createSession(manager, tids.data(), tids.size(), targetDurationNanos);
    });
    return false;
}
+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ private:
    static constexpr nsecs_t kResetHintTimeout = 100_ms;
    static constexpr int64_t kSanityCheckLowerBound = 100_us;
    static constexpr int64_t kSanityCheckUpperBound = 10_s;
    static constexpr int64_t kDefaultTargetDuration = 16666667;

    // Allows easier stub when testing
    class HintSessionBinding {