Loading cmds/statsd/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ LOCAL_SRC_FILES := \ tests/statsd_test_util.cpp \ tests/e2e/WakelockDuration_e2e_test.cpp \ tests/e2e/MetricConditionLink_e2e_test.cpp \ tests/e2e/Alarm_e2e_test.cpp \ tests/e2e/Attribution_e2e_test.cpp \ tests/e2e/GaugeMetric_e2e_push_test.cpp \ tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp \ Loading cmds/statsd/src/StatsLogProcessor.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ StatsLogProcessor::~StatsLogProcessor() { } void StatsLogProcessor::onAnomalyAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet) { std::lock_guard<std::mutex> lock(mMetricsMutex); for (const auto& itr : mMetricsManagers) { Loading @@ -93,7 +93,7 @@ void StatsLogProcessor::onAnomalyAlarmFired( } } void StatsLogProcessor::onPeriodicAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet) { std::lock_guard<std::mutex> lock(mMetricsMutex); Loading cmds/statsd/src/StatsLogProcessor.h +7 −2 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ public: /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies anomaly alarmSet. */ void onAnomalyAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet); /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies periodic alarmSet. */ void onPeriodicAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet); /* Flushes data to disk. Data on memory will be gone after written to disk. */ Loading @@ -74,6 +74,10 @@ private: return mAnomalyAlarmMonitor; } inline sp<AlarmMonitor> getPeriodicAlarmMonitor() const { return mPeriodicAlarmMonitor; } mutable mutex mMetricsMutex; std::unordered_map<ConfigKey, sp<MetricsManager>> mMetricsManagers; Loading Loading @@ -147,6 +151,7 @@ private: FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period); FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms); }; } // namespace statsd Loading cmds/statsd/src/StatsService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -698,7 +698,7 @@ Status StatsService::informAlarmForSubscriberTriggeringFired() { "Only system uid can call informAlarmForSubscriberTriggeringFired"); } uint64_t currentTimeSec = time(nullptr); uint64_t currentTimeSec = getElapsedRealtimeSec(); std::unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet = mPeriodicAlarmMonitor->popSoonerThan(static_cast<uint32_t>(currentTimeSec)); if (alarmSet.size() > 0) { Loading cmds/statsd/src/anomaly/AlarmTracker.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -39,12 +39,14 @@ AlarmTracker::AlarmTracker(uint64_t startMillis, VLOG("AlarmTracker() called"); mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC; mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } } AlarmTracker::~AlarmTracker() { VLOG("~AlarmTracker() called"); if (mInternalAlarm != nullptr) { if (mInternalAlarm != nullptr && mAlarmMonitor != nullptr) { mAlarmMonitor->remove(mInternalAlarm); } } Loading @@ -61,7 +63,8 @@ uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) { void AlarmTracker::informAlarmsFired( const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>>& firedAlarms) { if (firedAlarms.empty() || firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { if (firedAlarms.empty() || mInternalAlarm == nullptr || firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { return; } if (!mSubscriptions.empty()) { Loading @@ -69,10 +72,12 @@ void AlarmTracker::informAlarmsFired( mSubscriptions); } firedAlarms.erase(mInternalAlarm); mAlarmSec = findNextAlarmSec(timestampNs / NS_PER_SEC); mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } } } // namespace statsd } // namespace os Loading Loading
cmds/statsd/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ LOCAL_SRC_FILES := \ tests/statsd_test_util.cpp \ tests/e2e/WakelockDuration_e2e_test.cpp \ tests/e2e/MetricConditionLink_e2e_test.cpp \ tests/e2e/Alarm_e2e_test.cpp \ tests/e2e/Attribution_e2e_test.cpp \ tests/e2e/GaugeMetric_e2e_push_test.cpp \ tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp \ Loading
cmds/statsd/src/StatsLogProcessor.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ StatsLogProcessor::~StatsLogProcessor() { } void StatsLogProcessor::onAnomalyAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet) { std::lock_guard<std::mutex> lock(mMetricsMutex); for (const auto& itr : mMetricsManagers) { Loading @@ -93,7 +93,7 @@ void StatsLogProcessor::onAnomalyAlarmFired( } } void StatsLogProcessor::onPeriodicAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet) { std::lock_guard<std::mutex> lock(mMetricsMutex); Loading
cmds/statsd/src/StatsLogProcessor.h +7 −2 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ public: /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies anomaly alarmSet. */ void onAnomalyAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet); /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies periodic alarmSet. */ void onPeriodicAlarmFired( const uint64_t timestampNs, const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet); /* Flushes data to disk. Data on memory will be gone after written to disk. */ Loading @@ -74,6 +74,10 @@ private: return mAnomalyAlarmMonitor; } inline sp<AlarmMonitor> getPeriodicAlarmMonitor() const { return mPeriodicAlarmMonitor; } mutable mutex mMetricsMutex; std::unordered_map<ConfigKey, sp<MetricsManager>> mMetricsManagers; Loading Loading @@ -147,6 +151,7 @@ private: FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period); FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms); }; } // namespace statsd Loading
cmds/statsd/src/StatsService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -698,7 +698,7 @@ Status StatsService::informAlarmForSubscriberTriggeringFired() { "Only system uid can call informAlarmForSubscriberTriggeringFired"); } uint64_t currentTimeSec = time(nullptr); uint64_t currentTimeSec = getElapsedRealtimeSec(); std::unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>> alarmSet = mPeriodicAlarmMonitor->popSoonerThan(static_cast<uint32_t>(currentTimeSec)); if (alarmSet.size() > 0) { Loading
cmds/statsd/src/anomaly/AlarmTracker.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -39,12 +39,14 @@ AlarmTracker::AlarmTracker(uint64_t startMillis, VLOG("AlarmTracker() called"); mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC; mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } } AlarmTracker::~AlarmTracker() { VLOG("~AlarmTracker() called"); if (mInternalAlarm != nullptr) { if (mInternalAlarm != nullptr && mAlarmMonitor != nullptr) { mAlarmMonitor->remove(mInternalAlarm); } } Loading @@ -61,7 +63,8 @@ uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) { void AlarmTracker::informAlarmsFired( const uint64_t& timestampNs, unordered_set<sp<const InternalAlarm>, SpHash<InternalAlarm>>& firedAlarms) { if (firedAlarms.empty() || firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { if (firedAlarms.empty() || mInternalAlarm == nullptr || firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { return; } if (!mSubscriptions.empty()) { Loading @@ -69,10 +72,12 @@ void AlarmTracker::informAlarmsFired( mSubscriptions); } firedAlarms.erase(mInternalAlarm); mAlarmSec = findNextAlarmSec(timestampNs / NS_PER_SEC); mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up mInternalAlarm = new InternalAlarm{static_cast<uint32_t>(mAlarmSec)}; if (mAlarmMonitor != nullptr) { mAlarmMonitor->add(mInternalAlarm); } } } // namespace statsd } // namespace os Loading