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
This commit is contained in:
Tim Murray
2017-07-14 13:54:37 -07:00
parent f99ac67bdb
commit 1abbe60880

View File

@@ -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<void> &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<void> 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<void> 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();