pullers now cache data to throttle frequent pull requests.
all pullers have a default 1s cool down before next pull.
We can adjust these later.
Also add puller stats in StatsdStats
Test: unit test
Change-Id: I71894a24c41e059d841591312dbb852f54387b7d
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 33927aa..5842f3c 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -19,6 +19,7 @@
#include "StatsdStats.h"
#include <android/util/ProtoOutputStream.h>
+#include "../stats_log_util.h"
#include "statslog.h"
namespace android {
@@ -59,6 +60,20 @@
const int FIELD_ID_ANOMALY_ALARMS_REGISTERED = 1;
+std::map<int, long> StatsdStats::kPullerCooldownMap = {
+ {android::util::KERNEL_WAKELOCK, 1},
+ {android::util::WIFI_BYTES_TRANSFER, 1},
+ {android::util::MOBILE_BYTES_TRANSFER, 1},
+ {android::util::WIFI_BYTES_TRANSFER_BY_FG_BG, 1},
+ {android::util::MOBILE_BYTES_TRANSFER_BY_FG_BG, 1},
+ {android::util::PLATFORM_SLEEP_STATE, 1},
+ {android::util::SLEEP_STATE_VOTER, 1},
+ {android::util::SUBSYSTEM_SLEEP_STATE, 1},
+ {android::util::CPU_TIME_PER_FREQ, 1},
+ {android::util::CPU_TIME_PER_UID, 1},
+ {android::util::CPU_TIME_PER_UID_FREQ, 1},
+};
+
// TODO: add stats for pulled atoms.
StatsdStats::StatsdStats() {
mPushedAtomStats.resize(android::util::kMaxPushedAtomId + 1);
@@ -231,6 +246,21 @@
mAnomalyAlarmRegisteredStats++;
}
+void StatsdStats::updateMinPullIntervalSec(int pullAtomId, long intervalSec) {
+ lock_guard<std::mutex> lock(mLock);
+ mPulledAtomStats[pullAtomId].minPullIntervalSec = intervalSec;
+}
+
+void StatsdStats::notePull(int pullAtomId) {
+ lock_guard<std::mutex> lock(mLock);
+ mPulledAtomStats[pullAtomId].totalPull++;
+}
+
+void StatsdStats::notePullFromCache(int pullAtomId) {
+ lock_guard<std::mutex> lock(mLock);
+ mPulledAtomStats[pullAtomId].totalPullFromCache++;
+}
+
void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) {
lock_guard<std::mutex> lock(mLock);
@@ -401,7 +431,7 @@
configStats.clear_alert_stats();
}
- VLOG("********Atom stats***********");
+ VLOG("********Pushed Atom stats***********");
const size_t atomCounts = mPushedAtomStats.size();
for (size_t i = 2; i < atomCounts; i++) {
if (mPushedAtomStats[i] > 0) {
@@ -415,6 +445,12 @@
}
}
+ VLOG("********Pulled Atom stats***********");
+ for (const auto& pair : mPulledAtomStats) {
+ android::os::statsd::writePullerStatsToStream(pair, &proto);
+ VLOG("Atom %d->%ld, %ld, %ld\n", (int) pair.first, (long) pair.second.totalPull, (long) pair.second.totalPullFromCache, (long) pair.second.minPullIntervalSec);
+ }
+
if (mAnomalyAlarmRegisteredStats > 0) {
VLOG("********AnomalyAlarmStats stats***********");
long long token = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_ANOMALY_ALARM_STATS);