summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/statsd/Android.bp4
-rw-r--r--cmds/statsd/src/external/StatsPullerManager.cpp4
-rw-r--r--services/core/jni/Android.bp1
-rw-r--r--services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp15
-rw-r--r--services/core/jni/stats/SubsystemSleepStatePuller.cpp (renamed from cmds/statsd/src/external/SubsystemSleepStatePuller.cpp)225
-rw-r--r--services/core/jni/stats/SubsystemSleepStatePuller.h (renamed from cmds/statsd/src/external/SubsystemSleepStatePuller.h)20
6 files changed, 132 insertions, 137 deletions
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp
index f26062b3eea3..bd4397afaeb7 100644
--- a/cmds/statsd/Android.bp
+++ b/cmds/statsd/Android.bp
@@ -71,7 +71,6 @@ cc_defaults {
"src/external/StatsCallbackPuller.cpp",
"src/external/StatsPuller.cpp",
"src/external/StatsPullerManager.cpp",
- "src/external/SubsystemSleepStatePuller.cpp",
"src/external/TrainInfoPuller.cpp",
"src/FieldValue.cpp",
"src/guardrail/StatsdStats.cpp",
@@ -120,9 +119,6 @@ cc_defaults {
static_libs: [
"android.frameworks.stats@1.0",
- "android.hardware.power.stats@1.0",
- "android.hardware.power@1.0",
- "android.hardware.power@1.1",
"libbase",
"libcutils",
"liblog",
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index 982aab5a6380..fef213dad60e 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -34,7 +34,6 @@
#include "../statscompanion_util.h"
#include "GpuStatsPuller.h"
#include "StatsCallbackPuller.h"
-#include "SubsystemSleepStatePuller.h"
#include "TrainInfoPuller.h"
#include "statslog.h"
@@ -54,9 +53,6 @@ const int64_t NO_ALARM_UPDATE = INT64_MAX;
StatsPullerManager::StatsPullerManager()
: kAllPullAtomInfo({
- // subsystem_sleep_state
- {{.atomTag = android::util::SUBSYSTEM_SLEEP_STATE}, new SubsystemSleepStatePuller()},
-
// TrainInfo.
{{.atomTag = android::util::TRAIN_INFO}, new TrainInfoPuller()},
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 9e01fd60885f..390068e1fa75 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -23,6 +23,7 @@ cc_library_static {
"BroadcastRadio/convert.cpp",
"BroadcastRadio/regions.cpp",
"stats/PowerStatsPuller.cpp",
+ "stats/SubsystemSleepStatePuller.cpp",
"com_android_server_am_BatteryStatsService.cpp",
"com_android_server_connectivity_Vpn.cpp",
"com_android_server_ConsumerIrService.cpp",
diff --git a/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp b/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
index f6c0a8307b13..f5b778e85e5c 100644
--- a/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
+++ b/services/core/jni/com_android_server_stats_pull_StatsPullAtomService.cpp
@@ -24,10 +24,12 @@
#include <statslog.h>
#include "stats/PowerStatsPuller.h"
+#include "stats/SubsystemSleepStatePuller.h"
namespace android {
static server::stats::PowerStatsPuller gPowerStatsPuller;
+static server::stats::SubsystemSleepStatePuller gSubsystemSleepStatePuller;
static status_pull_atom_return_t onDevicePowerMeasurementCallback(int32_t atom_tag,
pulled_stats_event_list* data,
@@ -35,6 +37,12 @@ static status_pull_atom_return_t onDevicePowerMeasurementCallback(int32_t atom_t
return gPowerStatsPuller.Pull(atom_tag, data);
}
+static status_pull_atom_return_t subsystemSleepStateCallback(int32_t atom_tag,
+ pulled_stats_event_list* data,
+ void* cookie) {
+ return gSubsystemSleepStatePuller.Pull(atom_tag, data);
+}
+
static void nativeInit(JNIEnv* env, jobject javaObject) {
// on device power measurement
gPowerStatsPuller = server::stats::PowerStatsPuller();
@@ -42,6 +50,13 @@ static void nativeInit(JNIEnv* env, jobject javaObject) {
onDevicePowerMeasurementCallback,
/* metadata= */ nullptr,
/* cookie= */ nullptr);
+
+ // subsystem sleep state
+ gSubsystemSleepStatePuller = server::stats::SubsystemSleepStatePuller();
+ register_stats_pull_atom_callback(android::util::SUBSYSTEM_SLEEP_STATE,
+ subsystemSleepStateCallback,
+ /* metadata= */ nullptr,
+ /* cookie= */ nullptr);
}
static const JNINativeMethod sMethods[] = {{"nativeInit", "()V", (void*)nativeInit}};
diff --git a/cmds/statsd/src/external/SubsystemSleepStatePuller.cpp b/services/core/jni/stats/SubsystemSleepStatePuller.cpp
index f6a4aeaa3f9e..c6a836cfb6d5 100644
--- a/cmds/statsd/src/external/SubsystemSleepStatePuller.cpp
+++ b/services/core/jni/stats/SubsystemSleepStatePuller.cpp
@@ -15,7 +15,10 @@
*/
#define DEBUG false // STOPSHIP if true
-#include "Log.h"
+#define LOG_TAG "SubsystemSleepStatePuller"
+
+#include <log/log.h>
+#include <statslog.h>
#include <android/hardware/power/1.0/IPower.h>
#include <android/hardware/power/1.1/IPower.h>
@@ -32,13 +35,8 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
-#include "external/SubsystemSleepStatePuller.h"
-#include "external/StatsPuller.h"
-
+#include <unordered_map>
#include "SubsystemSleepStatePuller.h"
-#include "logd/LogEvent.h"
-#include "statslog.h"
-#include "stats_log_util.h"
using android::hardware::hidl_vec;
using android::hardware::power::V1_0::IPower;
@@ -53,14 +51,12 @@ using android::hardware::power::stats::V1_0::PowerEntityStateSpace;
using android::hardware::Return;
using android::hardware::Void;
-using std::make_shared;
-using std::shared_ptr;
-
namespace android {
-namespace os {
-namespace statsd {
+namespace server {
+namespace stats {
-static std::function<bool(vector<shared_ptr<LogEvent>>* data)> gPuller = {};
+static std::function<status_pull_atom_return_t(int32_t atomTag, pulled_stats_event_list* data)>
+ gPuller = {};
static sp<android::hardware::power::V1_0::IPower> gPowerHalV1_0 = nullptr;
static sp<android::hardware::power::V1_1::IPower> gPowerHalV1_1 = nullptr;
@@ -91,9 +87,7 @@ struct SubsystemSleepStatePullerDeathRecipient : virtual public hardware::hidl_d
static sp<SubsystemSleepStatePullerDeathRecipient> gDeathRecipient =
new SubsystemSleepStatePullerDeathRecipient();
-SubsystemSleepStatePuller::SubsystemSleepStatePuller() :
- StatsPuller(android::util::SUBSYSTEM_SLEEP_STATE) {
-}
+SubsystemSleepStatePuller::SubsystemSleepStatePuller() {}
// The caller must be holding gPowerHalMutex.
static bool checkResultLocked(const Return<void> &ret, const char* function) {
@@ -182,48 +176,46 @@ static bool getPowerStatsHalLocked() {
}
// The caller must be holding gPowerHalMutex.
-static bool getIPowerStatsDataLocked(vector<shared_ptr<LogEvent>>* data) {
+static status_pull_atom_return_t getIPowerStatsDataLocked(int32_t atomTag,
+ pulled_stats_event_list* data) {
using android::hardware::power::stats::V1_0::Status;
if(!getPowerStatsHalLocked()) {
- return false;
+ return STATS_PULL_SKIP;
}
-
- int64_t wallClockTimestampNs = getWallClockNs();
- int64_t elapsedTimestampNs = getElapsedRealtimeNs();
-
// Get power entity state residency data
bool success = false;
- Return<void> ret = gPowerStatsHalV1_0->getPowerEntityStateResidencyData({},
- [&data, &success, wallClockTimestampNs, elapsedTimestampNs]
- (auto results, auto status) {
- if (status == Status::NOT_SUPPORTED) {
- ALOGW("getPowerEntityStateResidencyData is not supported");
- success = false;
- return;
- }
-
- for(auto result : results) {
- for(auto stateResidency : result.stateResidencyData) {
- auto statePtr = make_shared<LogEvent>(
- android::util::SUBSYSTEM_SLEEP_STATE,
- wallClockTimestampNs, elapsedTimestampNs);
- statePtr->write(gEntityNames.at(result.powerEntityId));
- statePtr->write(gStateNames.at(result.powerEntityId)
- .at(stateResidency.powerEntityStateId));
- statePtr->write(stateResidency.totalStateEntryCount);
- statePtr->write(stateResidency.totalTimeInStateMs);
- statePtr->init();
- data->emplace_back(statePtr);
- }
- }
- success = true;
- });
+ Return<void> ret = gPowerStatsHalV1_0->getPowerEntityStateResidencyData(
+ {}, [&data, &success](auto results, auto status) {
+ if (status == Status::NOT_SUPPORTED) {
+ ALOGW("getPowerEntityStateResidencyData is not supported");
+ success = false;
+ return;
+ }
+ for (auto result : results) {
+ for (auto stateResidency : result.stateResidencyData) {
+ stats_event* event = add_stats_event_to_pull_data(data);
+ stats_event_set_atom_id(event, android::util::SUBSYSTEM_SLEEP_STATE);
+ stats_event_write_string8(event,
+ gEntityNames.at(result.powerEntityId).c_str());
+ stats_event_write_string8(event,
+ gStateNames.at(result.powerEntityId)
+ .at(stateResidency.powerEntityStateId)
+ .c_str());
+ stats_event_write_int64(event, stateResidency.totalStateEntryCount);
+ stats_event_write_int64(event, stateResidency.totalTimeInStateMs);
+ stats_event_build(event);
+ }
+ }
+ success = true;
+ });
// Intentionally not returning early here.
// bool success determines if this succeeded or not.
checkResultLocked(ret, __func__);
-
- return success;
+ if (!success) {
+ return STATS_PULL_SKIP;
+ }
+ return STATS_PULL_SUCCESS;
}
// The caller must be holding gPowerHalMutex.
@@ -252,56 +244,51 @@ static bool getPowerHalLocked() {
}
// The caller must be holding gPowerHalMutex.
-static bool getIPowerDataLocked(vector<shared_ptr<LogEvent>>* data) {
+static status_pull_atom_return_t getIPowerDataLocked(int32_t atomTag,
+ pulled_stats_event_list* data) {
using android::hardware::power::V1_0::Status;
if(!getPowerHalLocked()) {
- return false;
+ return STATS_PULL_SKIP;
}
- int64_t wallClockTimestampNs = getWallClockNs();
- int64_t elapsedTimestampNs = getElapsedRealtimeNs();
Return<void> ret;
ret = gPowerHalV1_0->getPlatformLowPowerStats(
- [&data, wallClockTimestampNs, elapsedTimestampNs]
- (hidl_vec<PowerStatePlatformSleepState> states, Status status) {
+ [&data](hidl_vec<PowerStatePlatformSleepState> states, Status status) {
if (status != Status::SUCCESS) return;
for (size_t i = 0; i < states.size(); i++) {
const PowerStatePlatformSleepState& state = states[i];
-
- auto statePtr = make_shared<LogEvent>(
- android::util::SUBSYSTEM_SLEEP_STATE,
- wallClockTimestampNs, elapsedTimestampNs);
- statePtr->write(state.name);
- statePtr->write("");
- statePtr->write(state.totalTransitions);
- statePtr->write(state.residencyInMsecSinceBoot);
- statePtr->init();
- data->push_back(statePtr);
- VLOG("powerstate: %s, %lld, %lld, %d", state.name.c_str(),
- (long long)state.residencyInMsecSinceBoot,
- (long long)state.totalTransitions,
- state.supportedOnlyInSuspend ? 1 : 0);
+ stats_event* event = add_stats_event_to_pull_data(data);
+ stats_event_set_atom_id(event, android::util::SUBSYSTEM_SLEEP_STATE);
+ stats_event_write_string8(event, state.name.c_str());
+ stats_event_write_string8(event, "");
+ stats_event_write_int64(event, state.totalTransitions);
+ stats_event_write_int64(event, state.residencyInMsecSinceBoot);
+ stats_event_build(event);
+
+ ALOGV("powerstate: %s, %lld, %lld, %d", state.name.c_str(),
+ (long long)state.residencyInMsecSinceBoot,
+ (long long)state.totalTransitions,
+ state.supportedOnlyInSuspend ? 1 : 0);
for (const auto& voter : state.voters) {
- auto voterPtr = make_shared<LogEvent>(
- android::util::SUBSYSTEM_SLEEP_STATE,
- wallClockTimestampNs, elapsedTimestampNs);
- voterPtr->write(state.name);
- voterPtr->write(voter.name);
- voterPtr->write(voter.totalNumberOfTimesVotedSinceBoot);
- voterPtr->write(voter.totalTimeInMsecVotedForSinceBoot);
- voterPtr->init();
- data->push_back(voterPtr);
- VLOG("powerstatevoter: %s, %s, %lld, %lld", state.name.c_str(),
- voter.name.c_str(),
- (long long)voter.totalTimeInMsecVotedForSinceBoot,
- (long long)voter.totalNumberOfTimesVotedSinceBoot);
+ stats_event* event = add_stats_event_to_pull_data(data);
+ stats_event_set_atom_id(event, android::util::SUBSYSTEM_SLEEP_STATE);
+ stats_event_write_string8(event, state.name.c_str());
+ stats_event_write_string8(event, voter.name.c_str());
+ stats_event_write_int64(event, voter.totalNumberOfTimesVotedSinceBoot);
+ stats_event_write_int64(event, voter.totalTimeInMsecVotedForSinceBoot);
+ stats_event_build(event);
+
+ ALOGV("powerstatevoter: %s, %s, %lld, %lld", state.name.c_str(),
+ voter.name.c_str(),
+ (long long)voter.totalTimeInMsecVotedForSinceBoot,
+ (long long)voter.totalNumberOfTimesVotedSinceBoot);
}
}
});
if (!checkResultLocked(ret, __func__)) {
- return false;
+ return STATS_PULL_SKIP;
}
// Trying to cast to IPower 1.1, this will succeed only for devices supporting 1.1
@@ -309,41 +296,42 @@ static bool getIPowerDataLocked(vector<shared_ptr<LogEvent>>* data) {
android::hardware::power::V1_1::IPower::castFrom(gPowerHalV1_0);
if (gPowerHal_1_1 != nullptr) {
ret = gPowerHal_1_1->getSubsystemLowPowerStats(
- [&data, wallClockTimestampNs, elapsedTimestampNs]
- (hidl_vec<PowerStateSubsystem> subsystems, Status status) {
- if (status != Status::SUCCESS) return;
-
- if (subsystems.size() > 0) {
- for (size_t i = 0; i < subsystems.size(); i++) {
- const PowerStateSubsystem& subsystem = subsystems[i];
- for (size_t j = 0; j < subsystem.states.size(); j++) {
- const PowerStateSubsystemSleepState& state =
- subsystem.states[j];
- auto subsystemStatePtr = make_shared<LogEvent>(
- android::util::SUBSYSTEM_SLEEP_STATE,
- wallClockTimestampNs, elapsedTimestampNs);
- subsystemStatePtr->write(subsystem.name);
- subsystemStatePtr->write(state.name);
- subsystemStatePtr->write(state.totalTransitions);
- subsystemStatePtr->write(state.residencyInMsecSinceBoot);
- subsystemStatePtr->init();
- data->push_back(subsystemStatePtr);
- VLOG("subsystemstate: %s, %s, %lld, %lld, %lld",
- subsystem.name.c_str(), state.name.c_str(),
- (long long)state.residencyInMsecSinceBoot,
- (long long)state.totalTransitions,
- (long long)state.lastEntryTimestampMs);
+ [&data](hidl_vec<PowerStateSubsystem> subsystems, Status status) {
+ if (status != Status::SUCCESS) return;
+
+ if (subsystems.size() > 0) {
+ for (size_t i = 0; i < subsystems.size(); i++) {
+ const PowerStateSubsystem& subsystem = subsystems[i];
+ for (size_t j = 0; j < subsystem.states.size(); j++) {
+ const PowerStateSubsystemSleepState& state =
+ subsystem.states[j];
+ stats_event* event = add_stats_event_to_pull_data(data);
+ stats_event_set_atom_id(event,
+ android::util::SUBSYSTEM_SLEEP_STATE);
+ stats_event_write_string8(event, subsystem.name.c_str());
+ stats_event_write_string8(event, state.name.c_str());
+ stats_event_write_int64(event, state.totalTransitions);
+ stats_event_write_int64(event, state.residencyInMsecSinceBoot);
+ stats_event_build(event);
+
+ ALOGV("subsystemstate: %s, %s, %lld, %lld, %lld",
+ subsystem.name.c_str(), state.name.c_str(),
+ (long long)state.residencyInMsecSinceBoot,
+ (long long)state.totalTransitions,
+ (long long)state.lastEntryTimestampMs);
+ }
+ }
}
- }
- }
- });
+ });
}
- return true;
+ return STATS_PULL_SUCCESS;
}
// The caller must be holding gPowerHalMutex.
-std::function<bool(vector<shared_ptr<LogEvent>>* data)> getPullerLocked() {
- std::function<bool(vector<shared_ptr<LogEvent>>* data)> ret = {};
+std::function<status_pull_atom_return_t(int32_t atomTag, pulled_stats_event_list* data)>
+getPullerLocked() {
+ std::function<status_pull_atom_return_t(int32_t atomTag, pulled_stats_event_list * data)> ret =
+ {};
// First see if power.stats HAL is available. Fall back to power HAL if
// power.stats HAL is unavailable.
@@ -358,7 +346,8 @@ std::function<bool(vector<shared_ptr<LogEvent>>* data)> getPullerLocked() {
return ret;
}
-bool SubsystemSleepStatePuller::PullInternal(vector<shared_ptr<LogEvent>>* data) {
+status_pull_atom_return_t SubsystemSleepStatePuller::Pull(int32_t atomTag,
+ pulled_stats_event_list* data) {
std::lock_guard<std::mutex> lock(gPowerHalMutex);
if(!gPuller) {
@@ -366,13 +355,13 @@ bool SubsystemSleepStatePuller::PullInternal(vector<shared_ptr<LogEvent>>* data)
}
if(gPuller) {
- return gPuller(data);
+ return gPuller(atomTag, data);
}
ALOGE("Unable to load Power Hal or power.stats HAL");
- return false;
+ return STATS_PULL_SKIP;
}
-} // namespace statsd
-} // namespace os
+} // namespace stats
+} // namespace server
} // namespace android
diff --git a/cmds/statsd/src/external/SubsystemSleepStatePuller.h b/services/core/jni/stats/SubsystemSleepStatePuller.h
index 87f5f02614a9..59dbbd258401 100644
--- a/cmds/statsd/src/external/SubsystemSleepStatePuller.h
+++ b/services/core/jni/stats/SubsystemSleepStatePuller.h
@@ -16,24 +16,22 @@
#pragma once
-#include <utils/String16.h>
-#include "StatsPuller.h"
+#include <stats_event.h>
+#include <stats_pull_atom_callback.h>
namespace android {
-namespace os {
-namespace statsd {
+namespace server {
+namespace stats {
/**
* Reads hal for sleep states
*/
-class SubsystemSleepStatePuller : public StatsPuller {
+class SubsystemSleepStatePuller {
public:
SubsystemSleepStatePuller();
-
-private:
- bool PullInternal(vector<std::shared_ptr<LogEvent>>* data) override;
+ status_pull_atom_return_t Pull(int32_t atomTag, pulled_stats_event_list* data);
};
-} // namespace statsd
-} // namespace os
-} // namespace android
+} // namespace stats
+} // namespace server
+} // namespace android