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

Commit 814f9fc4 authored by Matt Buckley's avatar Matt Buckley
Browse files

Prevent LOAD_RESET signal after too many false positives

If the hint session sends too many LOAD_RESET signals without an actual
workload happening, stop sending LOAD_RESET until something actually
happens.

Bug: 232329572
Test: manual
Change-Id: I8fb34a2ee0ff028c83e955a0283396cd69e52361
parent 9e6c6ca8
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ void HintSessionWrapper::updateTargetWorkDuration(long targetWorkDurationNanos)

void HintSessionWrapper::reportActualWorkDuration(long actualDurationNanos) {
    if (!init()) return;
    mResetsSinceLastReport = 0;
    if (actualDurationNanos > kSanityCheckLowerBound &&
        actualDurationNanos < kSanityCheckUpperBound) {
        gAPH_reportActualWorkDurationFn(mHintSession, actualDurationNanos);
@@ -163,9 +164,12 @@ void HintSessionWrapper::reportActualWorkDuration(long actualDurationNanos) {
}

void HintSessionWrapper::sendLoadResetHint() {
    static constexpr int kMaxResetsSinceLastReport = 2;
    if (!init()) return;
    nsecs_t now = systemTime();
    if (now - mLastFrameNotification > kResetHintTimeout) {
    if (now - mLastFrameNotification > kResetHintTimeout &&
        mResetsSinceLastReport <= kMaxResetsSinceLastReport) {
        ++mResetsSinceLastReport;
        gAPH_sendHintFn(mHintSession, static_cast<int>(SessionHint::CPU_LOAD_RESET));
    }
    mLastFrameNotification = now;
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ private:
    APerformanceHintSession* mHintSession = nullptr;
    std::future<APerformanceHintSession*> mHintSessionFuture;

    int mResetsSinceLastReport = 0;
    nsecs_t mLastFrameNotification = 0;
    nsecs_t mLastTargetWorkDuration = 0;