summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Lesinski <adamlesinski@google.com>2015-06-05 17:08:22 -0700
committerAdam Lesinski <adamlesinski@google.com>2015-06-05 17:47:07 -0700
commit6b0331a03025f2ea8c966bf9406dd5788ffa176e (patch)
tree94ba40106157852a1d3fdf0812219748e3a548db
parent581cc1ee59d01fe4b4a31618ab4aedfa639e42b0 (diff)
downloadframeworks_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.cpp31
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[] = {