From 0f48c45ec06f98b10b17ebe0231b0e60508c135f Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Tue, 29 Nov 2016 17:54:50 -0800 Subject: [PATCH] [sensorservice] Init batterystats service when needed This avoid race condition at parallel services start up that may results in sensor power usage not being properly recorded. Test: check all sensors, they still work Bug: 33199244 Bug: 33623300 Change-Id: I48946667db54fc72d9be6c13b981b44d1bab88c2 (cherry picked from commit 0a031596e12ce0f081b9ee116f48f4f4635d516e) --- services/sensorservice/BatteryService.cpp | 24 +++++++++++++++--------- services/sensorservice/BatteryService.h | 1 + 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/services/sensorservice/BatteryService.cpp b/services/sensorservice/BatteryService.cpp index 81f32cdc58..452c8c64b0 100644 --- a/services/sensorservice/BatteryService.cpp +++ b/services/sensorservice/BatteryService.cpp @@ -30,12 +30,7 @@ namespace android { // --------------------------------------------------------------------------- -BatteryService::BatteryService() { - const sp sm(defaultServiceManager()); - if (sm != NULL) { - const String16 name("batterystats"); - mBatteryStatService = interface_cast(sm->getService(name)); - } +BatteryService::BatteryService() : mBatteryStatService(nullptr) { } bool BatteryService::addSensor(uid_t uid, int handle) { @@ -61,7 +56,7 @@ bool BatteryService::removeSensor(uid_t uid, int handle) { void BatteryService::enableSensorImpl(uid_t uid, int handle) { - if (mBatteryStatService != 0) { + if (checkService()) { if (addSensor(uid, handle)) { int64_t identity = IPCThreadState::self()->clearCallingIdentity(); mBatteryStatService->noteStartSensor(uid, handle); @@ -70,7 +65,7 @@ void BatteryService::enableSensorImpl(uid_t uid, int handle) { } } void BatteryService::disableSensorImpl(uid_t uid, int handle) { - if (mBatteryStatService != 0) { + if (checkService()) { if (removeSensor(uid, handle)) { int64_t identity = IPCThreadState::self()->clearCallingIdentity(); mBatteryStatService->noteStopSensor(uid, handle); @@ -80,7 +75,7 @@ void BatteryService::disableSensorImpl(uid_t uid, int handle) { } void BatteryService::cleanupImpl(uid_t uid) { - if (mBatteryStatService != 0) { + if (checkService()) { Mutex::Autolock _l(mActivationsLock); int64_t identity = IPCThreadState::self()->clearCallingIdentity(); for (size_t i=0 ; i sm(defaultServiceManager()); + if (sm != NULL) { + const String16 name("batterystats"); + mBatteryStatService = interface_cast(sm->getService(name)); + } + } + return mBatteryStatService != nullptr; +} + ANDROID_SINGLETON_STATIC_INSTANCE(BatteryService) // --------------------------------------------------------------------------- diff --git a/services/sensorservice/BatteryService.h b/services/sensorservice/BatteryService.h index 08ba857518..43a750c6c2 100644 --- a/services/sensorservice/BatteryService.h +++ b/services/sensorservice/BatteryService.h @@ -49,6 +49,7 @@ class BatteryService : public Singleton { SortedVector mActivations; bool addSensor(uid_t uid, int handle); bool removeSensor(uid_t uid, int handle); + bool checkService(); public: static void enableSensor(uid_t uid, int handle) { -- 2.11.0