From 996f40d2ebb991ad2854b75b97a452f366cb3a9b Mon Sep 17 00:00:00 2001 From: jianjin Date: Fri, 29 Mar 2019 13:53:48 -0700 Subject: [PATCH] Write active metrics to disk on all shutdown cases Bug: 126132516 Fixes: 126132516 Test: manual tests Change-Id: Ic0e897c57d0bf8b55167f185fa4ac80b1d672af0 --- cmds/statsd/src/StatsLogProcessor.cpp | 13 +++++++++++++ cmds/statsd/src/StatsLogProcessor.h | 3 +++ cmds/statsd/src/StatsService.cpp | 1 + 3 files changed, 17 insertions(+) diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index 286e76ec108a..df84b6a4dc34 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -602,6 +602,19 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, void StatsLogProcessor::WriteMetricsActivationToDisk(int64_t currentTimeNs) { std::lock_guard lock(mMetricsMutex); + + const int64_t timeNs = getElapsedRealtimeNs(); + // Do not write to disk if we already have in the last few seconds. + // This is to avoid overwriting files that would have the same name if we + // write twice in the same second. + if (static_cast (timeNs) < + mLastActiveMetricsWriteNs + WRITE_DATA_COOL_DOWN_SEC * NS_PER_SEC) { + ALOGI("Statsd skipping writing active metrics to disk. Already wrote data in last %d seconds", + WRITE_DATA_COOL_DOWN_SEC); + return; + } + mLastActiveMetricsWriteNs = timeNs; + ProtoOutputStream proto; for (const auto& pair : mMetricsManagers) { diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index e92b8971fd48..8de1881eb2b8 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -207,6 +207,9 @@ private: // Last time we wrote data to disk. int64_t mLastWriteTimeNs = 0; + // Last time we wrote active metrics to disk. + int64_t mLastActiveMetricsWriteNs = 0; + #ifdef VERY_VERBOSE_PRINTING bool mPrintAllLogs = false; #endif diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 3bcebd9e3f76..14332528e992 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -1028,6 +1028,7 @@ void StatsService::Terminate() { ALOGI("StatsService::Terminating"); if (mProcessor != nullptr) { mProcessor->WriteDataToDisk(TERMINATION_SIGNAL_RECEIVED, FAST); + mProcessor->WriteMetricsActivationToDisk(getElapsedRealtimeNs()); } } -- 2.11.0