Loading cmds/statsd/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,7 @@ cc_test { "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", "tests/e2e/Attribution_e2e_test.cpp", "tests/e2e/ConfigTtl_e2e_test.cpp", "tests/e2e/CountMetric_e2e_test.cpp", "tests/e2e/DurationMetric_e2e_test.cpp", "tests/e2e/GaugeMetric_e2e_pull_test.cpp", "tests/e2e/GaugeMetric_e2e_push_test.cpp", Loading cmds/statsd/src/StatsLogProcessor.cpp +10 −6 Original line number Diff line number Diff line Loading @@ -16,24 +16,26 @@ #define DEBUG false // STOPSHIP if true #include "Log.h" #include "statslog.h" #include "StatsLogProcessor.h" #include <android-base/file.h> #include <dirent.h> #include <frameworks/base/cmds/statsd/src/active_config_list.pb.h> #include "StatsLogProcessor.h" #include <log/log_event_list.h> #include <utils/Errors.h> #include <utils/SystemClock.h> #include "android-base/stringprintf.h" #include "external/StatsPullerManager.h" #include "guardrail/StatsdStats.h" #include "metrics/CountMetricProducer.h" #include "state/StateManager.h" #include "stats_log_util.h" #include "stats_util.h" #include "statslog.h" #include "storage/StorageManager.h" #include <log/log_event_list.h> #include <utils/Errors.h> #include <utils/SystemClock.h> using namespace android; using android::base::StringPrintf; using android::util::FIELD_COUNT_REPEATED; Loading Loading @@ -218,6 +220,8 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { onIsolatedUidChangedEventLocked(*event); } StateManager::getInstance().onLogEvent(*event); if (mMetricsManagers.empty()) { return; } Loading cmds/statsd/src/StatsLogProcessor.h +4 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,10 @@ private: FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation); FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations); FRIEND_TEST(CountMetricE2eTest, TestWithSimpleState); FRIEND_TEST(CountMetricE2eTest, TestWithMappedState); FRIEND_TEST(CountMetricE2eTest, TestWithMultipleStates); FRIEND_TEST(DurationMetricE2eTest, TestOneBucket); FRIEND_TEST(DurationMetricE2eTest, TestTwoBuckets); FRIEND_TEST(DurationMetricE2eTest, TestWithActivation); Loading cmds/statsd/src/metrics/CountMetricProducer.cpp +22 −12 Original line number Diff line number Diff line Loading @@ -18,13 +18,15 @@ #include "Log.h" #include "CountMetricProducer.h" #include "guardrail/StatsdStats.h" #include "stats_util.h" #include "stats_log_util.h" #include <inttypes.h> #include <limits.h> #include <stdlib.h> #include "guardrail/StatsdStats.h" #include "stats_log_util.h" #include "stats_util.h" using android::util::FIELD_COUNT_REPEATED; using android::util::FIELD_TYPE_BOOL; using android::util::FIELD_TYPE_FLOAT; Loading Loading @@ -65,16 +67,16 @@ const int FIELD_ID_BUCKET_NUM = 4; const int FIELD_ID_START_BUCKET_ELAPSED_MILLIS = 5; const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6; CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric& metric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const unordered_map<int, shared_ptr<Activation>>& eventActivationMap, const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap) CountMetricProducer::CountMetricProducer( const ConfigKey& key, const CountMetric& metric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const unordered_map<int, shared_ptr<Activation>>& eventActivationMap, const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap, const vector<int>& slicedStateAtoms, const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap) : MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, wizard, eventActivationMap, eventDeactivationMap) { eventDeactivationMap, slicedStateAtoms, stateGroupMap) { if (metric.has_bucket()) { mBucketSizeNs = TimeUnitToBucketSizeInMillisGuardrailed(key.GetUid(), metric.bucket()) * 1000000; Loading @@ -100,6 +102,8 @@ CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric mConditionSliced = true; } // TODO(tsaichristine): b/142124705 handle metric state links flushIfNeededLocked(startTimeNs); // Adjust start for partial bucket mCurrentBucketStartTimeNs = startTimeNs; Loading @@ -112,6 +116,12 @@ CountMetricProducer::~CountMetricProducer() { VLOG("~CountMetricProducer() called"); } void CountMetricProducer::onStateChanged(int atomId, const HashableDimensionKey& primaryKey, int oldState, int newState) { VLOG("CountMetric %lld onStateChanged State%d, key %s, %d -> %d", (long long)mMetricId, atomId, primaryKey.toString().c_str(), oldState, newState); } void CountMetricProducer::dumpStatesLocked(FILE* out, bool verbose) const { if (mCurrentSlicedCounter == nullptr || mCurrentSlicedCounter->size() == 0) { Loading cmds/statsd/src/metrics/CountMetricProducer.h +17 −12 Original line number Diff line number Diff line Loading @@ -17,15 +17,16 @@ #ifndef COUNT_METRIC_PRODUCER_H #define COUNT_METRIC_PRODUCER_H #include <unordered_map> #include <android/util/ProtoOutputStream.h> #include <gtest/gtest_prod.h> #include "../anomaly/AnomalyTracker.h" #include "../condition/ConditionTracker.h" #include "../matchers/matcher_util.h" #include <unordered_map> #include "MetricProducer.h" #include "anomaly/AnomalyTracker.h" #include "condition/ConditionTracker.h" #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h" #include "matchers/matcher_util.h" #include "stats_util.h" namespace android { Loading @@ -40,16 +41,20 @@ struct CountBucket { class CountMetricProducer : public MetricProducer { public: CountMetricProducer(const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {}, CountMetricProducer( const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {}, const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>& eventDeactivationMap = {}); eventDeactivationMap = {}, const vector<int>& slicedStateAtoms = {}, const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap = {}); virtual ~CountMetricProducer(); void onStateChanged(int atomId, const HashableDimensionKey& primaryKey, int oldState, int newState) override; protected: void onMatchedLogEventInternalLocked( const size_t matcherIndex, const MetricDimensionKey& eventKey, Loading Loading
cmds/statsd/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,7 @@ cc_test { "tests/e2e/Anomaly_duration_sum_e2e_test.cpp", "tests/e2e/Attribution_e2e_test.cpp", "tests/e2e/ConfigTtl_e2e_test.cpp", "tests/e2e/CountMetric_e2e_test.cpp", "tests/e2e/DurationMetric_e2e_test.cpp", "tests/e2e/GaugeMetric_e2e_pull_test.cpp", "tests/e2e/GaugeMetric_e2e_push_test.cpp", Loading
cmds/statsd/src/StatsLogProcessor.cpp +10 −6 Original line number Diff line number Diff line Loading @@ -16,24 +16,26 @@ #define DEBUG false // STOPSHIP if true #include "Log.h" #include "statslog.h" #include "StatsLogProcessor.h" #include <android-base/file.h> #include <dirent.h> #include <frameworks/base/cmds/statsd/src/active_config_list.pb.h> #include "StatsLogProcessor.h" #include <log/log_event_list.h> #include <utils/Errors.h> #include <utils/SystemClock.h> #include "android-base/stringprintf.h" #include "external/StatsPullerManager.h" #include "guardrail/StatsdStats.h" #include "metrics/CountMetricProducer.h" #include "state/StateManager.h" #include "stats_log_util.h" #include "stats_util.h" #include "statslog.h" #include "storage/StorageManager.h" #include <log/log_event_list.h> #include <utils/Errors.h> #include <utils/SystemClock.h> using namespace android; using android::base::StringPrintf; using android::util::FIELD_COUNT_REPEATED; Loading Loading @@ -218,6 +220,8 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { onIsolatedUidChangedEventLocked(*event); } StateManager::getInstance().onLogEvent(*event); if (mMetricsManagers.empty()) { return; } Loading
cmds/statsd/src/StatsLogProcessor.h +4 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,10 @@ private: FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation); FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations); FRIEND_TEST(CountMetricE2eTest, TestWithSimpleState); FRIEND_TEST(CountMetricE2eTest, TestWithMappedState); FRIEND_TEST(CountMetricE2eTest, TestWithMultipleStates); FRIEND_TEST(DurationMetricE2eTest, TestOneBucket); FRIEND_TEST(DurationMetricE2eTest, TestTwoBuckets); FRIEND_TEST(DurationMetricE2eTest, TestWithActivation); Loading
cmds/statsd/src/metrics/CountMetricProducer.cpp +22 −12 Original line number Diff line number Diff line Loading @@ -18,13 +18,15 @@ #include "Log.h" #include "CountMetricProducer.h" #include "guardrail/StatsdStats.h" #include "stats_util.h" #include "stats_log_util.h" #include <inttypes.h> #include <limits.h> #include <stdlib.h> #include "guardrail/StatsdStats.h" #include "stats_log_util.h" #include "stats_util.h" using android::util::FIELD_COUNT_REPEATED; using android::util::FIELD_TYPE_BOOL; using android::util::FIELD_TYPE_FLOAT; Loading Loading @@ -65,16 +67,16 @@ const int FIELD_ID_BUCKET_NUM = 4; const int FIELD_ID_START_BUCKET_ELAPSED_MILLIS = 5; const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6; CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric& metric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const unordered_map<int, shared_ptr<Activation>>& eventActivationMap, const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap) CountMetricProducer::CountMetricProducer( const ConfigKey& key, const CountMetric& metric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const unordered_map<int, shared_ptr<Activation>>& eventActivationMap, const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap, const vector<int>& slicedStateAtoms, const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap) : MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, wizard, eventActivationMap, eventDeactivationMap) { eventDeactivationMap, slicedStateAtoms, stateGroupMap) { if (metric.has_bucket()) { mBucketSizeNs = TimeUnitToBucketSizeInMillisGuardrailed(key.GetUid(), metric.bucket()) * 1000000; Loading @@ -100,6 +102,8 @@ CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric mConditionSliced = true; } // TODO(tsaichristine): b/142124705 handle metric state links flushIfNeededLocked(startTimeNs); // Adjust start for partial bucket mCurrentBucketStartTimeNs = startTimeNs; Loading @@ -112,6 +116,12 @@ CountMetricProducer::~CountMetricProducer() { VLOG("~CountMetricProducer() called"); } void CountMetricProducer::onStateChanged(int atomId, const HashableDimensionKey& primaryKey, int oldState, int newState) { VLOG("CountMetric %lld onStateChanged State%d, key %s, %d -> %d", (long long)mMetricId, atomId, primaryKey.toString().c_str(), oldState, newState); } void CountMetricProducer::dumpStatesLocked(FILE* out, bool verbose) const { if (mCurrentSlicedCounter == nullptr || mCurrentSlicedCounter->size() == 0) { Loading
cmds/statsd/src/metrics/CountMetricProducer.h +17 −12 Original line number Diff line number Diff line Loading @@ -17,15 +17,16 @@ #ifndef COUNT_METRIC_PRODUCER_H #define COUNT_METRIC_PRODUCER_H #include <unordered_map> #include <android/util/ProtoOutputStream.h> #include <gtest/gtest_prod.h> #include "../anomaly/AnomalyTracker.h" #include "../condition/ConditionTracker.h" #include "../matchers/matcher_util.h" #include <unordered_map> #include "MetricProducer.h" #include "anomaly/AnomalyTracker.h" #include "condition/ConditionTracker.h" #include "frameworks/base/cmds/statsd/src/statsd_config.pb.h" #include "matchers/matcher_util.h" #include "stats_util.h" namespace android { Loading @@ -40,16 +41,20 @@ struct CountBucket { class CountMetricProducer : public MetricProducer { public: CountMetricProducer(const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {}, CountMetricProducer( const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex, const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs, const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {}, const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>& eventDeactivationMap = {}); eventDeactivationMap = {}, const vector<int>& slicedStateAtoms = {}, const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap = {}); virtual ~CountMetricProducer(); void onStateChanged(int atomId, const HashableDimensionKey& primaryKey, int oldState, int newState) override; protected: void onMatchedLogEventInternalLocked( const size_t matcherIndex, const MetricDimensionKey& eventKey, Loading