Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1abbe608 authored by Tim Murray's avatar Tim Murray
Browse files

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
parent f99ac67b
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -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();