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
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 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 @@
}
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 @@
}
ALOGV("Got %d reasons", i);
- if (first_time) {
- i = 0;
- }
if (i > 0) {
irqs[0] = firstirq;
*mergedreasonpos = 0;
@@ -185,7 +178,7 @@
return -1;
}
- return first_time ? 0 : i;
+ return i;
}
static JNINativeMethod method_table[] = {