summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Buckley <mattbuckley@google.com> 2023-05-03 14:32:11 +0000
committer Matt Buckley <mattbuckley@google.com> 2023-05-11 22:27:47 +0000
commit814f9fc4e4bafe154da21d5e0989886ad14cc9a6 (patch)
tree27679af9ed73b653b05f5b9602d90d2ff0285b43
parent9e6c6ca843de25a488a57f62a1d945b2179576dc (diff)
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
-rw-r--r--libs/hwui/renderthread/HintSessionWrapper.cpp6
-rw-r--r--libs/hwui/renderthread/HintSessionWrapper.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/libs/hwui/renderthread/HintSessionWrapper.cpp b/libs/hwui/renderthread/HintSessionWrapper.cpp
index 597cbf732d82..814ac4d90028 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.cpp
+++ b/libs/hwui/renderthread/HintSessionWrapper.cpp
@@ -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;
diff --git a/libs/hwui/renderthread/HintSessionWrapper.h b/libs/hwui/renderthread/HintSessionWrapper.h
index b7a433fb4eae..24b8150dd489 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.h
+++ b/libs/hwui/renderthread/HintSessionWrapper.h
@@ -42,6 +42,7 @@ private:
APerformanceHintSession* mHintSession = nullptr;
std::future<APerformanceHintSession*> mHintSessionFuture;
+ int mResetsSinceLastReport = 0;
nsecs_t mLastFrameNotification = 0;
nsecs_t mLastTargetWorkDuration = 0;