From 9f174f4bbbf9a3ec26f8b4ab72d933b28601c8a1 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Thu, 11 Nov 2021 22:56:05 -0800 Subject: [PATCH] Send the hint immediately when actual > target Send the hint immediately when actual duration is longer than target duration. Test: boot Bug: 198379880 Signed-off-by: Wei Wang Change-Id: I6c80940b27d65a1e34e40f61eef3f81990957711 --- native/android/performance_hint.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/native/android/performance_hint.cpp b/native/android/performance_hint.cpp index 65428de95519..d627984c7fff 100644 --- a/native/android/performance_hint.cpp +++ b/native/android/performance_hint.cpp @@ -184,13 +184,13 @@ int APerformanceHintSession::reportActualWorkDuration(int64_t actualDurationNano mTimestampsNanos.push_back(now); /** - * Use current sample to determine the rate limit. We can pick a shorter rate limit - * if any sample underperformed, however, it could be the lower level system is slow - * to react. So here we explicitly choose the rate limit with the latest sample. + * Cache the hint if the hint is not overtime and the mLastUpdateTimestamp is + * still in the mPreferredRateNanos duration. */ - int64_t rateLimit = actualDurationNanos > mTargetDurationNanos ? mPreferredRateNanos - : 10 * mPreferredRateNanos; - if (now - mLastUpdateTimestamp <= rateLimit) return 0; + if (actualDurationNanos < mTargetDurationNanos && + now - mLastUpdateTimestamp <= mPreferredRateNanos) { + return 0; + } binder::Status ret = mHintSession->reportActualWorkDuration(mActualDurationsNanos, mTimestampsNanos);