diff options
author | Adam Lesinski <adamlesinski@google.com> | 2015-06-05 17:08:22 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2015-06-05 17:47:07 -0700 |
commit | 6b0331a03025f2ea8c966bf9406dd5788ffa176e (patch) | |
tree | 94ba40106157852a1d3fdf0812219748e3a548db | |
parent | 581cc1ee59d01fe4b4a31618ab4aedfa639e42b0 (diff) | |
download | frameworks_base-6b0331a03025f2ea8c966bf9406dd5788ffa176e.zip frameworks_base-6b0331a03025f2ea8c966bf9406dd5788ffa176e.tar.gz frameworks_base-6b0331a03025f2ea8c966bf9406dd5788ffa176e.tar.bz2 |
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
-rw-r--r-- | services/core/jni/com_android_server_am_BatteryStatsService.cpp | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/services/core/jni/com_android_server_am_BatteryStatsService.cpp b/services/core/jni/com_android_server_am_BatteryStatsService.cpp index da4cc48..3b9cc9d 100644 --- a/services/core/jni/com_android_server_am_BatteryStatsService.cpp +++ b/services/core/jni/com_android_server_am_BatteryStatsService.cpp @@ -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,19 +81,17 @@ 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. - ALOGV("Waiting for wakeup..."); - int ret = sem_wait(&wakeup_sem); - if (ret < 0) { - char buf[80]; - strerror_r(errno, buf, sizeof(buf)); - ALOGE("Error waiting on semaphore: %s\n", buf); - // Return 0 here to let it continue looping but not return results. - return 0; - } + } + + // Wait for wakeup. + ALOGV("Waiting for wakeup..."); + int ret = sem_wait(&wakeup_sem); + if (ret < 0) { + char buf[80]; + strerror_r(errno, buf, sizeof(buf)); + ALOGE("Error waiting on semaphore: %s\n", buf); + // Return 0 here to let it continue looping but not return results. + return 0; } FILE *fp = fopen(LAST_RESUME_REASON, "r"); @@ -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[] = { |