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
This commit is contained in:
Matt Buckley
2023-05-03 14:32:11 +00:00
parent 9e6c6ca843
commit 814f9fc4e4
2 changed files with 6 additions and 1 deletions

View File

@@ -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;

View File

@@ -42,6 +42,7 @@ private:
APerformanceHintSession* mHintSession = nullptr;
std::future<APerformanceHintSession*> mHintSessionFuture;
int mResetsSinceLastReport = 0;
nsecs_t mLastFrameNotification = 0;
nsecs_t mLastTargetWorkDuration = 0;