From 1abbe60880645aa8f15c09e5b46f59d20450c8ea Mon Sep 17 00:00:00 2001 From: Tim Murray Date: Fri, 14 Jul 2017 13:54:37 -0700 Subject: [PATCH] power: throttle interaction hints Don't send power HAL interaction hints more than every 100ms. Also can send userActivity calls every 100ms too (down from 500ms). Test: power HAL doesn't run every 8ms bug 63632697 Change-Id: Ic986f6fc51e58f8060f7bf2d2ac61a9906be5c1f --- ...droid_server_power_PowerManagerService.cpp | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index 23e3f67fd4bff..3ce9916d0943b 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -63,7 +63,7 @@ std::mutex gPowerHalMutex; static nsecs_t gLastEventTime[USER_ACTIVITY_EVENT_LAST + 1]; // Throttling interval for user activity calls. -static const nsecs_t MIN_TIME_BETWEEN_USERACTIVITIES = 500 * 1000000L; // 500ms +static const nsecs_t MIN_TIME_BETWEEN_USERACTIVITIES = 100 * 1000000L; // 100ms // ---------------------------------------------------------------------------- @@ -103,19 +103,6 @@ static void processReturn(const Return &ret, const char* functionName) { } void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType) { - // Tell the power HAL when user activity occurs. - gPowerHalMutex.lock(); - if (getPowerHal()) { - Return ret; - if (gPowerHalV1_1 != nullptr) { - ret = gPowerHalV1_1->powerHintAsync(PowerHint::INTERACTION, 0); - } else { - ret = gPowerHalV1_0->powerHint(PowerHint::INTERACTION, 0); - } - processReturn(ret, "powerHint"); - } - gPowerHalMutex.unlock(); - if (gPowerManagerServiceObj) { // Throttle calls into user activity by event type. // We're a little conservative about argument checking here in case the caller @@ -130,6 +117,21 @@ void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t return; } gLastEventTime[eventType] = eventTime; + + + // Tell the power HAL when user activity occurs. + gPowerHalMutex.lock(); + if (getPowerHal()) { + Return ret; + if (gPowerHalV1_1 != nullptr) { + ret = gPowerHalV1_1->powerHintAsync(PowerHint::INTERACTION, 0); + } else { + ret = gPowerHalV1_0->powerHint(PowerHint::INTERACTION, 0); + } + processReturn(ret, "powerHint"); + } + gPowerHalMutex.unlock(); + } JNIEnv* env = AndroidRuntime::getJNIEnv();