Reset the data when pulled by statsd in order to swtich from value
metric to gauge metric.
Test: unit test
Change-Id: Idecc0ccfb3ccde1680b2394fb479ae6f7f2cfac2
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index d117f39..630b614 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -2163,8 +2163,8 @@
/**
* Pulls the statistics of calls to Binder.
*
- * Binder stats are cumulative from boot unless somebody reset the data using
- * > adb shell dumpsys binder_calls_stats --reset
+ * Binder stats will be reset every time the data is pulled. It means it can only be pulled by one
+ * config on the device.
*
* Next tag: 14
*/
diff --git a/services/core/java/com/android/server/BinderCallsStatsService.java b/services/core/java/com/android/server/BinderCallsStatsService.java
index 15673a7..51d95a2 100644
--- a/services/core/java/com/android/server/BinderCallsStatsService.java
+++ b/services/core/java/com/android/server/BinderCallsStatsService.java
@@ -118,10 +118,22 @@
this.mBinderCallsStats = binderCallsStats;
}
+ /** @see BinderCallsStats#reset */
+ public void reset() {
+ mBinderCallsStats.reset();
+ }
+
+ /**
+ * @see BinderCallsStats#getExportedCallStats.
+ *
+ * Note that binder calls stats will be reset by statsd every time
+ * the data is exported.
+ */
public ArrayList<BinderCallsStats.ExportedCallStat> getExportedCallStats() {
return mBinderCallsStats.getExportedCallStats();
}
+ /** @see BinderCallsStats#getExportedExceptionStats */
public ArrayMap<String, Integer> getExportedExceptionStats() {
return mBinderCallsStats.getExportedExceptionStats();
}
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index 6f9d803..cf7ebd0 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -906,6 +906,7 @@
}
List<ExportedCallStat> callStats = binderStats.getExportedCallStats();
+ binderStats.reset();
long elapsedNanos = SystemClock.elapsedRealtimeNanos();
for (ExportedCallStat callStat : callStats) {
StatsLogEventWrapper e = new StatsLogEventWrapper(elapsedNanos, tagId, 13 /* fields */);
@@ -934,6 +935,8 @@
}
ArrayMap<String, Integer> exceptionStats = binderStats.getExportedExceptionStats();
+ // TODO: decouple binder calls exceptions with the rest of the binder calls data so that we
+ // can reset the exception stats.
long elapsedNanos = SystemClock.elapsedRealtimeNanos();
for (Entry<String, Integer> entry : exceptionStats.entrySet()) {
StatsLogEventWrapper e = new StatsLogEventWrapper(elapsedNanos, tagId, 2 /* fields */);