diff options
Diffstat (limited to 'cmds')
| -rw-r--r-- | cmds/statsd/src/metrics/ValueMetricProducer.cpp | 21 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/ValueMetricProducer.h | 11 | ||||
| -rw-r--r-- | cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp | 406 |
3 files changed, 235 insertions, 203 deletions
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 693402a07f05..dcfbd5ea239b 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -411,7 +411,7 @@ void ValueMetricProducer::skipCurrentBucket(const int64_t dropTimeNs, void ValueMetricProducer::resetBase() { for (auto& slice : mCurrentBaseInfo) { - for (auto& baseInfo : slice.second) { + for (auto& baseInfo : slice.second.baseInfos) { baseInfo.hasBase = false; } } @@ -623,7 +623,7 @@ void ValueMetricProducer::accumulateEvents(const std::vector<std::shared_ptr<Log mMatchedMetricDimensionKeys.find(whatKey) != mMatchedMetricDimensionKeys.end(); if (!presentInPulledData && whatKey.contains(mStateChangePrimaryKey.second)) { auto it = mCurrentBaseInfo.find(whatKey); - for (auto& baseInfo : it->second) { + for (auto& baseInfo : it->second.baseInfos) { baseInfo.hasBase = false; } } @@ -788,22 +788,21 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( return; } - vector<BaseInfo>& baseInfos = mCurrentBaseInfo[whatKey]; + DimensionsInWhatInfo& dimensionsInWhatInfo = mCurrentBaseInfo[whatKey]; + vector<BaseInfo>& baseInfos = dimensionsInWhatInfo.baseInfos; if (baseInfos.size() < mFieldMatchers.size()) { VLOG("Resizing number of intervals to %d", (int)mFieldMatchers.size()); baseInfos.resize(mFieldMatchers.size()); } - for (BaseInfo& baseInfo : baseInfos) { - if (!baseInfo.hasCurrentState) { - baseInfo.currentState = getUnknownStateKey(); - baseInfo.hasCurrentState = true; - } + if (!dimensionsInWhatInfo.hasCurrentState) { + dimensionsInWhatInfo.currentState = getUnknownStateKey(); + dimensionsInWhatInfo.hasCurrentState = true; } // We need to get the intervals stored with the previous state key so we can // close these value intervals. - const auto oldStateKey = baseInfos[0].currentState; + const auto oldStateKey = dimensionsInWhatInfo.currentState; vector<Interval>& intervals = mCurrentSlicedBucket[MetricDimensionKey(whatKey, oldStateKey)].intervals; if (intervals.size() < mFieldMatchers.size()) { @@ -819,14 +818,14 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( // Discussion here: http://ag/6124370. bool useAnomalyDetection = true; + dimensionsInWhatInfo.hasCurrentState = true; + dimensionsInWhatInfo.currentState = stateKey; for (int i = 0; i < (int)mFieldMatchers.size(); i++) { const Matcher& matcher = mFieldMatchers[i]; BaseInfo& baseInfo = baseInfos[i]; Interval& interval = intervals[i]; interval.valueIndex = i; Value value; - baseInfo.hasCurrentState = true; - baseInfo.currentState = stateKey; if (!getDoubleOrLong(event, matcher, value)) { VLOG("Failed to get value %d from event %s", i, event.ToString().c_str()); StatsdStats::getInstance().noteBadValueType(mMetricId); diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index fffc866ec61a..472cc33b97fa 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -193,22 +193,29 @@ private: std::vector<Interval> intervals; } CurrentValueBucket; + // Holds base information for diffing values from one value field. typedef struct { // Holds current base value of the dimension. Take diff and update if necessary. Value base; // Whether there is a base to diff to. bool hasBase; + } BaseInfo; + + // State key and base information for a specific DimensionsInWhat key. + typedef struct { + std::vector<BaseInfo> baseInfos; // Last seen state value(s). HashableDimensionKey currentState; // Whether this dimensions in what key has a current state key. bool hasCurrentState; - } BaseInfo; + } DimensionsInWhatInfo; // Tracks the internal state in the ongoing aggregation bucket for each DimensionsInWhat // key and StateValuesKey pair. std::unordered_map<MetricDimensionKey, CurrentValueBucket> mCurrentSlicedBucket; - std::unordered_map<HashableDimensionKey, std::vector<BaseInfo>> mCurrentBaseInfo; + // Tracks current state key and base information for each DimensionsInWhat key. + std::unordered_map<HashableDimensionKey, DimensionsInWhatInfo> mCurrentBaseInfo; std::unordered_map<MetricDimensionKey, int64_t> mCurrentFullBucket; diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp index ec8adfd8bcf5..8790fe428d19 100644 --- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp @@ -289,7 +289,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(11, curBaseInfo.base.long_value); @@ -305,7 +306,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(23, curBaseInfo.base.long_value); @@ -323,7 +324,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(36, curBaseInfo.base.long_value); @@ -427,7 +428,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(11, curBaseInfo.base.long_value); @@ -456,7 +458,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // the base was reset EXPECT_EQ(true, curBaseInfo.hasBase); @@ -490,7 +492,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(11, curBaseInfo.base.long_value); @@ -503,7 +506,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(10, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -517,7 +520,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(36, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -550,7 +553,8 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(11, curBaseInfo.base.long_value); @@ -563,7 +567,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(10, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -574,7 +578,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket4StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(36, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -625,7 +629,8 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // startUpdated:false sum:0 start:100 EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); @@ -642,7 +647,7 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(110, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -655,7 +660,7 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(20, curInterval.value.long_value); EXPECT_EQ(false, curBaseInfo.hasBase); @@ -880,7 +885,8 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) { ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(10, curInterval.value.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1090,7 +1096,8 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // startUpdated:true sum:0 start:11 EXPECT_EQ(true, curBaseInfo.hasBase); @@ -1105,7 +1112,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { // has one slice ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // tartUpdated:false sum:12 EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(23, curBaseInfo.base.long_value); @@ -1122,7 +1129,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket6StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // startUpdated:false sum:12 EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(36, curBaseInfo.base.long_value); @@ -1181,7 +1188,8 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -1190,7 +1198,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { // pull on bucket boundary come late, condition change happens before it valueProducer->onConditionChanged(false, bucket2StartTimeNs + 1); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8}, {bucketStartTimeNs}, {bucket2StartTimeNs}); EXPECT_EQ(false, curBaseInfo.hasBase); @@ -1204,7 +1212,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8}, {bucketStartTimeNs}, {bucket2StartTimeNs}); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); } @@ -1253,7 +1261,8 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // startUpdated:false sum:0 start:100 EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); @@ -1266,7 +1275,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { {bucketStartTimeNs}, {bucket2StartTimeNs}); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); @@ -1275,7 +1284,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {bucketSizeNs - 8}, {bucketStartTimeNs}, {bucket2StartTimeNs}); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(130, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -1287,7 +1296,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs + 50); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(140, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1488,7 +1497,8 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) { ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(10, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -1510,7 +1520,7 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) { ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(15, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1521,7 +1531,7 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, event4); ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(15, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1559,11 +1569,12 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) { ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(10, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[1]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(20, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -1573,11 +1584,11 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) { // has one slice ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(5, curInterval.value.long_value); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[1]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[1]; EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(2, curInterval.value.long_value); @@ -1588,13 +1599,13 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, event3); ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(15, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[1]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[1]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(25, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1605,12 +1616,12 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) { valueProducer.onMatchedLogEvent(1 /*log matcher index*/, event4); ASSERT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(15, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second.intervals[1]; - curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second[1]; + curBaseInfo = valueProducer.mCurrentBaseInfo.begin()->second.baseInfos[1]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(29, curBaseInfo.base.long_value); EXPECT_EQ(true, curInterval.hasValue); @@ -1658,7 +1669,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) { auto iter = valueProducer->mCurrentSlicedBucket.begin(); auto& interval1 = iter->second.intervals[0]; auto iterBase = valueProducer->mCurrentBaseInfo.begin(); - auto& baseInfo1 = iterBase->second[0]; + auto& baseInfo1 = iterBase->second.baseInfos[0]; EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo1.hasBase); EXPECT_EQ(3, baseInfo1.base.long_value); @@ -1693,7 +1704,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) { EXPECT_TRUE(it != iter); EXPECT_TRUE(itBase != iterBase); auto& interval2 = it->second.intervals[0]; - auto& baseInfo2 = itBase->second[0]; + auto& baseInfo2 = itBase->second.baseInfos[0]; EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo2.hasBase); EXPECT_EQ(4, baseInfo2.base.long_value); @@ -1734,7 +1745,8 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { const auto& it = valueProducer->mCurrentSlicedBucket.begin(); ValueMetricProducer::Interval& interval1 = it->second.intervals[0]; ValueMetricProducer::BaseInfo& baseInfo1 = - valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat())->second[0]; + valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()) + ->second.baseInfos[0]; EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo1.hasBase); EXPECT_EQ(3, baseInfo1.base.long_value); @@ -1763,7 +1775,8 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { EXPECT_TRUE(it2 != it); ValueMetricProducer::Interval& interval2 = it2->second.intervals[0]; ValueMetricProducer::BaseInfo& baseInfo2 = - valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat())->second[0]; + valueProducer->mCurrentBaseInfo.find(it2->first.getDimensionKeyInWhat()) + ->second.baseInfos[0]; EXPECT_EQ(2, it2->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo2.hasBase); EXPECT_EQ(4, baseInfo2.base.long_value); @@ -1797,9 +1810,11 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { ValueMetricProducer::Interval& interval3 = it3->second.intervals[0]; ValueMetricProducer::Interval& interval4 = it4->second.intervals[0]; ValueMetricProducer::BaseInfo& baseInfo3 = - valueProducer->mCurrentBaseInfo.find(it3->first.getDimensionKeyInWhat())->second[0]; + valueProducer->mCurrentBaseInfo.find(it3->first.getDimensionKeyInWhat()) + ->second.baseInfos[0]; ValueMetricProducer::BaseInfo& baseInfo4 = - valueProducer->mCurrentBaseInfo.find(it4->first.getDimensionKeyInWhat())->second[0]; + valueProducer->mCurrentBaseInfo.find(it4->first.getDimensionKeyInWhat()) + ->second.baseInfos[0]; EXPECT_EQ(true, baseInfo3.hasBase); EXPECT_EQ(5, baseInfo3.base.long_value); @@ -1839,7 +1854,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { auto iter = valueProducer->mCurrentSlicedBucket.begin(); auto& interval1 = iter->second.intervals[0]; auto iterBase = valueProducer->mCurrentBaseInfo.begin(); - auto& baseInfo1 = iterBase->second[0]; + auto& baseInfo1 = iterBase->second.baseInfos[0]; EXPECT_EQ(1, iter->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo1.hasBase); EXPECT_EQ(3, baseInfo1.base.long_value); @@ -1876,7 +1891,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { EXPECT_TRUE(it != iter); EXPECT_TRUE(itBase != iterBase); auto interval2 = it->second.intervals[0]; - auto baseInfo2 = itBase->second[0]; + auto baseInfo2 = itBase->second.baseInfos[0]; EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo2.hasBase); EXPECT_EQ(4, baseInfo2.base.long_value); @@ -1890,7 +1905,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { // Only one interval left. One was trimmed. ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); interval2 = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0]; + baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); EXPECT_EQ(true, baseInfo2.hasBase); EXPECT_EQ(5, baseInfo2.base.long_value); @@ -1904,7 +1919,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket5StartTimeNs); interval2 = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second[0]; + baseInfo2 = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, baseInfo2.hasBase); EXPECT_EQ(14, baseInfo2.base.long_value); EXPECT_EQ(false, interval2.hasValue); @@ -1944,7 +1959,8 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfB ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo& curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -1981,7 +1997,8 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo& curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo& curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -2031,7 +2048,8 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(false, valueProducer->mHasGlobalBase); @@ -2104,7 +2122,8 @@ TEST(ValueMetricProducerTest, TestBaseSetOnConditionChange) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(100, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -2157,7 +2176,8 @@ TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenOneConditionFailed ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(140, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -2295,7 +2315,8 @@ TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenInitialPullFailed) ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(140, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -2374,7 +2395,8 @@ TEST(ValueMetricProducerTest_BucketDrop, TestInvalidBucketWhenLastPullFailed) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(false, valueProducer->mHasGlobalBase); @@ -2461,7 +2483,8 @@ TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onConditionChanged) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(true, valueProducer->mHasGlobalBase); @@ -2470,7 +2493,7 @@ TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onConditionChanged) { valueProducer->onConditionChanged(false, bucketStartTimeNs + 10); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); EXPECT_EQ(false, valueProducer->mHasGlobalBase); @@ -2514,7 +2537,8 @@ TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onBucketBoundary) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval& curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(true, valueProducer->mHasGlobalBase); @@ -2525,7 +2549,7 @@ TEST(ValueMetricProducerTest, TestEmptyDataResetsBase_onBucketBoundary) { valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; // Data is empty, base should be reset. EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(5, curBaseInfo.base.long_value); @@ -2570,13 +2594,13 @@ TEST(ValueMetricProducerTest, TestPartialResetOnBucketBoundaries) { ASSERT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size()); auto iterator = valueProducer->mCurrentSlicedBucket.begin(); auto baseInfoIter = valueProducer->mCurrentBaseInfo.begin(); - EXPECT_EQ(true, baseInfoIter->second[0].hasBase); - EXPECT_EQ(2, baseInfoIter->second[0].base.long_value); + EXPECT_EQ(true, baseInfoIter->second.baseInfos[0].hasBase); + EXPECT_EQ(2, baseInfoIter->second.baseInfos[0].base.long_value); EXPECT_EQ(false, iterator->second.intervals[0].hasValue); iterator++; baseInfoIter++; - EXPECT_EQ(false, baseInfoIter->second[0].hasBase); - EXPECT_EQ(1, baseInfoIter->second[0].base.long_value); + EXPECT_EQ(false, baseInfoIter->second.baseInfos[0].hasBase); + EXPECT_EQ(1, baseInfoIter->second.baseInfos[0].base.long_value); EXPECT_EQ(false, iterator->second.intervals[0].hasValue); EXPECT_EQ(true, valueProducer->mHasGlobalBase); @@ -2677,7 +2701,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundariesOnConditionChange) { valueProducer->onConditionChanged(true, bucket2StartTimeNs + 10); ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curBaseInfo.hasBase); EXPECT_EQ(5, curBaseInfo.base.long_value); EXPECT_EQ(false, curInterval.hasValue); @@ -2812,7 +2836,7 @@ TEST(ValueMetricProducerTest, TestDataIsNotUpdatedWhenNoConditionChanged) { ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); auto curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + auto curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(2, curInterval.value.long_value); @@ -3046,7 +3070,8 @@ TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(true, curInterval.hasValue); EXPECT_EQ(20, curInterval.value.long_value); @@ -3059,7 +3084,7 @@ TEST(ValueMetricProducerTest, TestPulledData_noDiff_withMultipleConditionChanges assertPastBucketValuesSingleKey(valueProducer->mPastBuckets, {20}, {50 - 8}, {bucketStartTimeNs}, {bucket2StartTimeNs}); curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); } @@ -3092,7 +3117,8 @@ TEST(ValueMetricProducerTest, TestPulledData_noDiff_bucketBoundaryTrue) { {bucketStartTimeNs}, {bucket2StartTimeNs}); ValueMetricProducer::Interval curInterval = valueProducer->mCurrentSlicedBucket.begin()->second.intervals[0]; - ValueMetricProducer::BaseInfo curBaseInfo = valueProducer->mCurrentBaseInfo.begin()->second[0]; + ValueMetricProducer::BaseInfo curBaseInfo = + valueProducer->mCurrentBaseInfo.begin()->second.baseInfos[0]; EXPECT_EQ(false, curBaseInfo.hasBase); EXPECT_EQ(false, curInterval.hasValue); } @@ -3984,12 +4010,12 @@ TEST(ValueMetricProducerTest, TestSlicedState) { // Base for dimension key {} auto it = valueProducer->mCurrentSlicedBucket.begin(); auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(3, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(3, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, kStateUnknown} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4005,12 +4031,12 @@ TEST(ValueMetricProducerTest, TestSlicedState) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(5, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(5, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, kStateUnknown} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4027,11 +4053,11 @@ TEST(ValueMetricProducerTest, TestSlicedState) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(9, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(9, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_OFF, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, ON} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4056,12 +4082,12 @@ TEST(ValueMetricProducerTest, TestSlicedState) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(21, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(21, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::view::DisplayStateEnum::DISPLAY_STATE_ON, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, OFF} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4195,12 +4221,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) { // Base for dimension key {} auto it = valueProducer->mCurrentSlicedBucket.begin(); auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(3, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(3, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, {kStateUnknown}} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4216,12 +4242,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(5, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(5, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(screenOnGroup.group_id(), - itBase->second[0].currentState.getValues()[0].mValue.long_value); + itBase->second.currentState.getValues()[0].mValue.long_value); // Value for dimension, state key {{}, kStateUnknown} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4239,12 +4265,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(5, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(5, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(screenOnGroup.group_id(), - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, kStateUnknown} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4262,12 +4288,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(5, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(5, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(screenOnGroup.group_id(), - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, kStateUnknown} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4284,12 +4310,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithMap) { // Base for dimension key {} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(21, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(21, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(screenOffGroup.group_id(), - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{}, ON GROUP} EXPECT_EQ(0, it->first.getDimensionKeyInWhat().getValues().size()); ASSERT_EQ(1, it->first.getStateValuesKey().getValues().size()); @@ -4447,12 +4473,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1}. auto it = valueProducer->mCurrentSlicedBucket.begin(); auto itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(3, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(3, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{uid 1}, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4463,12 +4489,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 2} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(7, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(7, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for dimension, state key {{uid 2}, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4485,12 +4511,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1}. it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(6, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(6, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 1, kStateUnknown}. ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4503,12 +4529,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 2} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(7, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(7, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(-1 /* StateTracker::kStateUnknown */, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 2, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4524,12 +4550,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1}. it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(6, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(6, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 1, kStateUnknown}. ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4541,12 +4567,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 2} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(9, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(9, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 2, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4570,12 +4596,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { it = valueProducer->mCurrentSlicedBucket.begin(); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(15, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(15, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 2, BACKGROUND}. ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4587,12 +4613,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(10, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(10, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 1, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4630,12 +4656,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 2}. it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(15, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(15, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 2, BACKGROUND}. ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4646,12 +4672,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(13, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(13, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 1, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4687,12 +4713,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 2} it = valueProducer->mCurrentSlicedBucket.begin(); itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(15, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(15, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_BACKGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 2, BACKGROUND} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(2, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4704,12 +4730,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithPrimaryField_WithDimensions) { // Base for dimension key {uid 1} it++; itBase = valueProducer->mCurrentBaseInfo.find(it->first.getDimensionKeyInWhat()); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(17, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(17, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {uid 1, kStateUnknown} ASSERT_EQ(1, it->first.getDimensionKeyInWhat().getValues().size()); EXPECT_EQ(1, it->first.getDimensionKeyInWhat().getValues()[0].mValue.int_value); @@ -4857,14 +4883,14 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithCondition) { valueProducer->onConditionChanged(true, bucketStartTimeNs + 20 * NS_PER_SEC); // Base for dimension key {} ASSERT_EQ(1UL, valueProducer->mCurrentBaseInfo.size()); - std::unordered_map<HashableDimensionKey, std::vector<ValueMetricProducer::BaseInfo>>::iterator + std::unordered_map<HashableDimensionKey, ValueMetricProducer::DimensionsInWhatInfo>::iterator itBase = valueProducer->mCurrentBaseInfo.find(DEFAULT_DIMENSION_KEY); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(3, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(3, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(BatterySaverModeStateChanged::ON, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {{}, -1} ASSERT_EQ(1UL, valueProducer->mCurrentSlicedBucket.size()); std::unordered_map<MetricDimensionKey, ValueMetricProducer::CurrentValueBucket>::iterator it = @@ -4882,12 +4908,12 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithCondition) { // Base for dimension key {} ASSERT_EQ(1UL, valueProducer->mCurrentBaseInfo.size()); itBase = valueProducer->mCurrentBaseInfo.find(DEFAULT_DIMENSION_KEY); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(5, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(5, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(BatterySaverModeStateChanged::OFF, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {{}, ON} ASSERT_EQ(2UL, valueProducer->mCurrentSlicedBucket.size()); it = valueProducer->mCurrentSlicedBucket.begin(); @@ -4909,23 +4935,23 @@ TEST(ValueMetricProducerTest, TestSlicedStateWithCondition) { // Base for dimension key {} ASSERT_EQ(1UL, valueProducer->mCurrentBaseInfo.size()); itBase = valueProducer->mCurrentBaseInfo.find(DEFAULT_DIMENSION_KEY); - EXPECT_TRUE(itBase->second[0].hasBase); - EXPECT_EQ(11, itBase->second[0].base.long_value); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_TRUE(itBase->second.baseInfos[0].hasBase); + EXPECT_EQ(11, itBase->second.baseInfos[0].base.long_value); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(BatterySaverModeStateChanged::OFF, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Bucket 2 status after condition change to false. valueProducer->onConditionChanged(false, bucket2StartTimeNs + 10 * NS_PER_SEC); // Base for dimension key {} ASSERT_EQ(1UL, valueProducer->mCurrentBaseInfo.size()); itBase = valueProducer->mCurrentBaseInfo.find(DEFAULT_DIMENSION_KEY); - EXPECT_FALSE(itBase->second[0].hasBase); - EXPECT_TRUE(itBase->second[0].hasCurrentState); - ASSERT_EQ(1, itBase->second[0].currentState.getValues().size()); + EXPECT_FALSE(itBase->second.baseInfos[0].hasBase); + EXPECT_TRUE(itBase->second.hasCurrentState); + ASSERT_EQ(1, itBase->second.currentState.getValues().size()); EXPECT_EQ(BatterySaverModeStateChanged::OFF, - itBase->second[0].currentState.getValues()[0].mValue.int_value); + itBase->second.currentState.getValues()[0].mValue.int_value); // Value for key {{}, OFF} ASSERT_EQ(3UL, valueProducer->mCurrentSlicedBucket.size()); it = valueProducer->mCurrentSlicedBucket.begin(); |