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

Commit 6b0331a0 authored by Adam Lesinski's avatar Adam Lesinski
Browse files

Wait for wakeup_reasons on first init

Previously if we were initializing the wakeup callback for the first time,
we would read the wakeup_reason file and ignore the contents, sending a
wakeup_reason of "unknown" up to BatteryStats.

Now we initialize the callback and wait on it immediately. Wakeup reasons are reset
when we go into sleep, so when we wakeup, we will always have fresh wakeup reasons.

Bug:21665793

Change-Id: I20832d8a143fc2715915fcecf4bb71980f279440
parent 581cc1ee
Loading
Loading
Loading
Loading
+12 −19
Original line number Diff line number Diff line
@@ -62,8 +62,6 @@ static void wakeup_callback(void)
static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
        jobjectArray outReasons)
{
    bool first_time = false;

    if (outIrqs == NULL || outReasons == NULL) {
        jniThrowException(env, "java/lang/NullPointerException", "null argument");
        return -1;
@@ -83,10 +81,9 @@ static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
        }
        ALOGV("Registering callback...");
        set_wakeup_callback(&wakeup_callback);
        // First time through, we will just drain the current wakeup reasons.
        first_time = true;
    } else {
        // On following calls, we need to wait for wakeup.
    }

    // Wait for wakeup.
    ALOGV("Waiting for wakeup...");
    int ret = sem_wait(&wakeup_sem);
    if (ret < 0) {
@@ -96,7 +93,6 @@ static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
        // Return 0 here to let it continue looping but not return results.
        return 0;
    }
    }

    FILE *fp = fopen(LAST_RESUME_REASON, "r");
    if (fp == NULL) {
@@ -169,9 +165,6 @@ static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
    }

    ALOGV("Got %d reasons", i);
    if (first_time) {
        i = 0;
    }
    if (i > 0) {
        irqs[0] = firstirq;
        *mergedreasonpos = 0;
@@ -185,7 +178,7 @@ static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
        return -1;
    }

    return first_time ? 0 : i;
    return i;
}

static JNINativeMethod method_table[] = {