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