summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tej Singh <singhtejinder@google.com> 2019-06-05 18:10:12 -0700
committer Tej Singh <singhtejinder@google.com> 2019-06-05 18:10:12 -0700
commit29ac6014295bb8904a00a32016e8698cbc6cb716 (patch)
tree5c7a511bb566309849ff034230fcf25a31c11d3d
parent2aa255a74656e448b28b1f258d25bed18f2d6396 (diff)
Blacklist truncated atoms instead of whitelistnig
We used a whitelist to determine which atoms should have their timestamps truncated to the nearest 5 minutes. This changes the logic to a blacklist so that we can get fine grained timestamps from vendor and mainline atoms. Also reserves a range for atoms that need to be truncated in the future. Bug: 134574701 Test: inspected generated statslog.cpp file to make sure it had the correct blacklist Test: testdrive on ScreenStateChanged to ensure timestamps are preserved when they should be Test: testdrive on CallStateChanged to ensure timestamps are truncated when they should be. Change-Id: Id3468542c830cdf41395a94c77f7df0b46cd11b7
-rw-r--r--cmds/statsd/src/guardrail/StatsdStats.h6
-rw-r--r--cmds/statsd/src/metrics/EventMetricProducer.cpp13
-rw-r--r--cmds/statsd/src/metrics/GaugeMetricProducer.cpp9
-rw-r--r--cmds/statsd/src/stats_log_util.cpp11
-rw-r--r--cmds/statsd/src/stats_log_util.h5
-rw-r--r--tools/stats_log_api_gen/main.cpp14
6 files changed, 28 insertions, 30 deletions
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index 8b39f5f3f37c..42d9e96c8cab 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -170,6 +170,12 @@ public:
// Vendor pulled atom start id.
static const int32_t kVendorPulledAtomStartTag = 150000;
+ // Beginning of range for timestamp truncation.
+ static const int32_t kTimestampTruncationStartTag = 300000;
+
+ // End of range for timestamp truncation.
+ static const int32_t kTimestampTruncationEndTag = 304999;
+
// Max accepted atom id.
static const int32_t kMaxAtomTag = 200000;
diff --git a/cmds/statsd/src/metrics/EventMetricProducer.cpp b/cmds/statsd/src/metrics/EventMetricProducer.cpp
index 69816cbbd92f..96133bd0a38d 100644
--- a/cmds/statsd/src/metrics/EventMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/EventMetricProducer.cpp
@@ -146,16 +146,9 @@ void EventMetricProducer::onMatchedLogEventInternalLocked(
uint64_t wrapperToken =
mProto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | FIELD_ID_DATA);
- const bool truncateTimestamp =
- android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.find(event.GetTagId()) ==
- android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.end();
- if (truncateTimestamp) {
- mProto->write(FIELD_TYPE_INT64 | FIELD_ID_ELAPSED_TIMESTAMP_NANOS,
- (long long)truncateTimestampNsToFiveMinutes(event.GetElapsedTimestampNs()));
- } else {
- mProto->write(FIELD_TYPE_INT64 | FIELD_ID_ELAPSED_TIMESTAMP_NANOS,
- (long long)event.GetElapsedTimestampNs());
- }
+ const int64_t elapsedTimeNs = truncateTimestampIfNecessary(
+ event.GetTagId(), event.GetElapsedTimestampNs());
+ mProto->write(FIELD_TYPE_INT64 | FIELD_ID_ELAPSED_TIMESTAMP_NANOS, (long long) elapsedTimeNs);
uint64_t eventToken = mProto->start(FIELD_TYPE_MESSAGE | FIELD_ID_ATOMS);
event.ToProto(*mProto);
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
index 7a87f0381676..a64bbc1056e0 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -283,14 +283,9 @@ void GaugeMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs,
writeFieldValueTreeToStream(mAtomId, *(atom.mFields), protoOutput);
protoOutput->end(atomsToken);
}
- const bool truncateTimestamp =
- android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.find(
- mAtomId) ==
- android::util::AtomsInfo::kNotTruncatingTimestampAtomWhiteList.end();
for (const auto& atom : bucket.mGaugeAtoms) {
- const int64_t elapsedTimestampNs = truncateTimestamp ?
- truncateTimestampNsToFiveMinutes(atom.mElapsedTimestamps) :
- atom.mElapsedTimestamps;
+ const int64_t elapsedTimestampNs =
+ truncateTimestampIfNecessary(mAtomId, atom.mElapsedTimestamps);
protoOutput->write(
FIELD_TYPE_INT64 | FIELD_COUNT_REPEATED | FIELD_ID_ELAPSED_ATOM_TIMESTAMP,
(long long)elapsedTimestampNs);
diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp
index 31f160d99944..67625eb82454 100644
--- a/cmds/statsd/src/stats_log_util.cpp
+++ b/cmds/statsd/src/stats_log_util.cpp
@@ -545,8 +545,15 @@ int64_t getWallClockMillis() {
return time(nullptr) * MS_PER_SEC;
}
-int64_t truncateTimestampNsToFiveMinutes(int64_t timestampNs) {
- return timestampNs / NS_PER_SEC / (5 * 60) * NS_PER_SEC * (5 * 60);
+int64_t truncateTimestampIfNecessary(int atomId, int64_t timestampNs) {
+ if (AtomsInfo::kTruncatingTimestampAtomBlackList.find(atomId) !=
+ AtomsInfo::kTruncatingTimestampAtomBlackList.end() ||
+ (atomId >= StatsdStats::kTimestampTruncationStartTag &&
+ atomId <= StatsdStats::kTimestampTruncationEndTag)) {
+ return timestampNs / NS_PER_SEC / (5 * 60) * NS_PER_SEC * (5 * 60);
+ } else {
+ return timestampNs;
+ }
}
int64_t NanoToMillis(const int64_t nano) {
diff --git a/cmds/statsd/src/stats_log_util.h b/cmds/statsd/src/stats_log_util.h
index 53dd5b792539..bfb84cf4d1b9 100644
--- a/cmds/statsd/src/stats_log_util.h
+++ b/cmds/statsd/src/stats_log_util.h
@@ -89,8 +89,9 @@ bool parseProtoOutputStream(util::ProtoOutputStream& protoOutput, T* message) {
return message->ParseFromArray(pbBytes.c_str(), pbBytes.size());
}
-// Returns the truncated timestamp.
-int64_t truncateTimestampNsToFiveMinutes(int64_t timestampNs);
+// Checks the blacklist of atoms as well as the blacklisted range of 300,000 - 304,999.
+// Returns the truncated timestamp to the nearest 5 minutes if needed.
+int64_t truncateTimestampIfNecessary(int atomId, int64_t timestampNs);
inline bool isVendorPulledAtom(int atomId) {
return atomId >= StatsdStats::kVendorPulledAtomStartTag && atomId < StatsdStats::kMaxAtomTag;
diff --git a/tools/stats_log_api_gen/main.cpp b/tools/stats_log_api_gen/main.cpp
index 1aad4be5d66f..f62fef076f48 100644
--- a/tools/stats_log_api_gen/main.cpp
+++ b/tools/stats_log_api_gen/main.cpp
@@ -131,14 +131,10 @@ static void write_atoms_info_cpp(FILE *out, const Atoms &atoms) {
"mobile_bytes_transfer"};
fprintf(out,
"const std::set<int> "
- "AtomsInfo::kNotTruncatingTimestampAtomWhiteList = {\n");
- for (set<AtomDecl>::const_iterator atom = atoms.decls.begin();
- atom != atoms.decls.end(); atom++) {
- if (kTruncatingAtomNames.find(atom->name) ==
- kTruncatingAtomNames.end()) {
- string constant = make_constant_name(atom->name);
- fprintf(out, " %s,\n", constant.c_str());
- }
+ "AtomsInfo::kTruncatingTimestampAtomBlackList = {\n");
+ for (set<string>::const_iterator blacklistedAtom = kTruncatingAtomNames.begin();
+ blacklistedAtom != kTruncatingAtomNames.end(); blacklistedAtom++) {
+ fprintf(out, " %s,\n", make_constant_name(*blacklistedAtom).c_str());
}
fprintf(out, "};\n");
fprintf(out, "\n");
@@ -840,7 +836,7 @@ write_stats_log_header(FILE* out, const Atoms& atoms, const AtomDecl &attributio
fprintf(out, "struct AtomsInfo {\n");
fprintf(out,
" const static std::set<int> "
- "kNotTruncatingTimestampAtomWhiteList;\n");
+ "kTruncatingTimestampAtomBlackList;\n");
fprintf(out, " const static std::map<int, int> kAtomsWithUidField;\n");
fprintf(out,
" const static std::set<int> kAtomsWithAttributionChain;\n");