diff options
| -rw-r--r-- | cmds/statsd/src/guardrail/StatsdStats.h | 6 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/EventMetricProducer.cpp | 13 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/GaugeMetricProducer.cpp | 9 | ||||
| -rw-r--r-- | cmds/statsd/src/stats_log_util.cpp | 11 | ||||
| -rw-r--r-- | cmds/statsd/src/stats_log_util.h | 5 | ||||
| -rw-r--r-- | tools/stats_log_api_gen/main.cpp | 14 |
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"); |