Loading cmds/statsd/benchmark/metric_util.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -366,7 +366,7 @@ sp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const Stat sp<AlarmMonitor> periodicAlarmMonitor; sp<StatsLogProcessor> processor = new StatsLogProcessor( uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){}); processor->OnConfigUpdated(key, config); processor->OnConfigUpdated(0, key, config); return processor; } Loading cmds/statsd/src/StatsLogProcessor.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -191,11 +191,12 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { } } void StatsLogProcessor::OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config) { void StatsLogProcessor::OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key, const StatsdConfig& config) { std::lock_guard<std::mutex> lock(mMetricsMutex); VLOG("Updated configuration for key %s", key.ToString().c_str()); sp<MetricsManager> newMetricsManager = new MetricsManager(key, config, mTimeBaseSec, mUidMap, new MetricsManager(key, config, mTimeBaseSec, (timestampNs - 1) / NS_PER_SEC + 1, mUidMap, mAnomalyAlarmMonitor, mPeriodicAlarmMonitor); if (newMetricsManager->isConfigValid()) { Loading cmds/statsd/src/StatsLogProcessor.h +2 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ public: void OnLogEvent(LogEvent* event); void OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config); void OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key, const StatsdConfig& config); void OnConfigRemoved(const ConfigKey& key); size_t GetMetricsSize(const ConfigKey& key) const; Loading cmds/statsd/src/anomaly/AlarmTracker.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ namespace android { namespace os { namespace statsd { AlarmTracker::AlarmTracker(uint64_t startMillis, AlarmTracker::AlarmTracker(const uint64_t startMillis, const uint64_t currentMillis, const Alarm& alarm, const ConfigKey& configKey, const sp<AlarmMonitor>& alarmMonitor) : mAlarmConfig(alarm), Loading @@ -38,7 +39,11 @@ AlarmTracker::AlarmTracker(uint64_t startMillis, mAlarmMonitor(alarmMonitor) { VLOG("AlarmTracker() called"); mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC; // startMillis is the time statsd is created. We need to find the 1st alarm timestamp after // the config is added to statsd. mAlarmSec = findNextAlarmSec(currentMillis / MS_PER_SEC); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec); if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } Loading @@ -55,9 +60,13 @@ void AlarmTracker::addSubscription(const Subscription& subscription) { mSubscriptions.push_back(subscription); } uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) { int periodsForward = (currentTimeSec - mAlarmSec) * MS_PER_SEC / mAlarmConfig.period_millis(); return mAlarmSec + (periodsForward + 1) * mAlarmConfig.period_millis() / MS_PER_SEC; int64_t AlarmTracker::findNextAlarmSec(int64_t currentTimeSec) { if (currentTimeSec <= mAlarmSec) { return mAlarmSec; } int64_t periodsForward = ((currentTimeSec - mAlarmSec) * MS_PER_SEC - 1) / mAlarmConfig.period_millis() + 1; return mAlarmSec + periodsForward * mAlarmConfig.period_millis() / MS_PER_SEC; } void AlarmTracker::informAlarmsFired( Loading @@ -68,12 +77,14 @@ void AlarmTracker::informAlarmsFired( return; } if (!mSubscriptions.empty()) { VLOG("AlarmTracker triggers the subscribers."); triggerSubscribers(mAlarmConfig.id(), DEFAULT_METRIC_DIMENSION_KEY, mConfigKey, mSubscriptions); } firedAlarms.erase(mInternalAlarm); mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec); if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } Loading cmds/statsd/src/anomaly/AlarmTracker.h +5 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ namespace statsd { class AlarmTracker : public virtual RefBase { public: AlarmTracker(uint64_t startMillis, AlarmTracker(const uint64_t startMillis, const uint64_t currentMillis, const Alarm& alarm, const ConfigKey& configKey, const sp<AlarmMonitor>& subscriberAlarmMonitor); Loading @@ -53,13 +54,13 @@ protected: return mInternalAlarm == nullptr ? 0 : mInternalAlarm->timestampSec; } uint64_t findNextAlarmSec(uint64_t currentTimeMillis); int64_t findNextAlarmSec(int64_t currentTimeMillis); // statsd_config.proto Alarm message that defines this tracker. const Alarm mAlarmConfig; // A reference to the Alarm's config key. const ConfigKey& mConfigKey; const ConfigKey mConfigKey; // The subscriptions that depend on this alarm. std::vector<Subscription> mSubscriptions; Loading @@ -68,7 +69,7 @@ protected: sp<AlarmMonitor> mAlarmMonitor; // The current expected alarm time in seconds. uint64_t mAlarmSec; int64_t mAlarmSec; // The current alarm. sp<const InternalAlarm> mInternalAlarm; Loading Loading
cmds/statsd/benchmark/metric_util.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -366,7 +366,7 @@ sp<StatsLogProcessor> CreateStatsLogProcessor(const long timeBaseSec, const Stat sp<AlarmMonitor> periodicAlarmMonitor; sp<StatsLogProcessor> processor = new StatsLogProcessor( uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){}); processor->OnConfigUpdated(key, config); processor->OnConfigUpdated(0, key, config); return processor; } Loading
cmds/statsd/src/StatsLogProcessor.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -191,11 +191,12 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { } } void StatsLogProcessor::OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config) { void StatsLogProcessor::OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key, const StatsdConfig& config) { std::lock_guard<std::mutex> lock(mMetricsMutex); VLOG("Updated configuration for key %s", key.ToString().c_str()); sp<MetricsManager> newMetricsManager = new MetricsManager(key, config, mTimeBaseSec, mUidMap, new MetricsManager(key, config, mTimeBaseSec, (timestampNs - 1) / NS_PER_SEC + 1, mUidMap, mAnomalyAlarmMonitor, mPeriodicAlarmMonitor); if (newMetricsManager->isConfigValid()) { Loading
cmds/statsd/src/StatsLogProcessor.h +2 −1 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ public: void OnLogEvent(LogEvent* event); void OnConfigUpdated(const ConfigKey& key, const StatsdConfig& config); void OnConfigUpdated(const int64_t timestampNs, const ConfigKey& key, const StatsdConfig& config); void OnConfigRemoved(const ConfigKey& key); size_t GetMetricsSize(const ConfigKey& key) const; Loading
cmds/statsd/src/anomaly/AlarmTracker.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ namespace android { namespace os { namespace statsd { AlarmTracker::AlarmTracker(uint64_t startMillis, AlarmTracker::AlarmTracker(const uint64_t startMillis, const uint64_t currentMillis, const Alarm& alarm, const ConfigKey& configKey, const sp<AlarmMonitor>& alarmMonitor) : mAlarmConfig(alarm), Loading @@ -38,7 +39,11 @@ AlarmTracker::AlarmTracker(uint64_t startMillis, mAlarmMonitor(alarmMonitor) { VLOG("AlarmTracker() called"); mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC; // startMillis is the time statsd is created. We need to find the 1st alarm timestamp after // the config is added to statsd. mAlarmSec = findNextAlarmSec(currentMillis / MS_PER_SEC); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec); if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } Loading @@ -55,9 +60,13 @@ void AlarmTracker::addSubscription(const Subscription& subscription) { mSubscriptions.push_back(subscription); } uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) { int periodsForward = (currentTimeSec - mAlarmSec) * MS_PER_SEC / mAlarmConfig.period_millis(); return mAlarmSec + (periodsForward + 1) * mAlarmConfig.period_millis() / MS_PER_SEC; int64_t AlarmTracker::findNextAlarmSec(int64_t currentTimeSec) { if (currentTimeSec <= mAlarmSec) { return mAlarmSec; } int64_t periodsForward = ((currentTimeSec - mAlarmSec) * MS_PER_SEC - 1) / mAlarmConfig.period_millis() + 1; return mAlarmSec + periodsForward * mAlarmConfig.period_millis() / MS_PER_SEC; } void AlarmTracker::informAlarmsFired( Loading @@ -68,12 +77,14 @@ void AlarmTracker::informAlarmsFired( return; } if (!mSubscriptions.empty()) { VLOG("AlarmTracker triggers the subscribers."); triggerSubscribers(mAlarmConfig.id(), DEFAULT_METRIC_DIMENSION_KEY, mConfigKey, mSubscriptions); } firedAlarms.erase(mInternalAlarm); mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; VLOG("AlarmTracker sets the periodic alarm at: %lld", (long long)mAlarmSec); if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } Loading
cmds/statsd/src/anomaly/AlarmTracker.h +5 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ namespace statsd { class AlarmTracker : public virtual RefBase { public: AlarmTracker(uint64_t startMillis, AlarmTracker(const uint64_t startMillis, const uint64_t currentMillis, const Alarm& alarm, const ConfigKey& configKey, const sp<AlarmMonitor>& subscriberAlarmMonitor); Loading @@ -53,13 +54,13 @@ protected: return mInternalAlarm == nullptr ? 0 : mInternalAlarm->timestampSec; } uint64_t findNextAlarmSec(uint64_t currentTimeMillis); int64_t findNextAlarmSec(int64_t currentTimeMillis); // statsd_config.proto Alarm message that defines this tracker. const Alarm mAlarmConfig; // A reference to the Alarm's config key. const ConfigKey& mConfigKey; const ConfigKey mConfigKey; // The subscriptions that depend on this alarm. std::vector<Subscription> mSubscriptions; Loading @@ -68,7 +69,7 @@ protected: sp<AlarmMonitor> mAlarmMonitor; // The current expected alarm time in seconds. uint64_t mAlarmSec; int64_t mAlarmSec; // The current alarm. sp<const InternalAlarm> mInternalAlarm; Loading