Snap for 12385180 from 21262ecb7fdae863a86bb607f5d3b06c9c6fdbf0 to 24Q4-release
Change-Id: I65cd533ad097e3e9497e3b8ff589cf7fbe0014f7
diff --git a/statsd/src/metrics/NumericValueMetricProducer.cpp b/statsd/src/metrics/NumericValueMetricProducer.cpp
index ae67e8b..c12cf69 100644
--- a/statsd/src/metrics/NumericValueMetricProducer.cpp
+++ b/statsd/src/metrics/NumericValueMetricProducer.cpp
@@ -64,7 +64,6 @@
const NumericValue ZERO_LONG((int64_t)0);
const NumericValue ZERO_DOUBLE((double)0);
-const NumericValue ZERO_HIST_VALUE(std::move(HistogramValue()));
double toDouble(const NumericValue& value) {
return value.is<int64_t>() ? value.getValue<int64_t>() : value.getValueOrDefault<double>(0);
@@ -486,7 +485,7 @@
} else if (value.is<double>()) {
base = ZERO_DOUBLE;
} else if (value.is<HistogramValue>()) {
- base = ZERO_HIST_VALUE;
+ base = HistogramValue();
}
} else {
// no base. just update base and return.
@@ -595,7 +594,7 @@
}
} else if (aggType == ValueMetric::HISTOGRAM && !value.is<HistogramValue>()) {
// statsd-aggregated histogram: add raw value to histogram.
- interval.aggregate = ZERO_HIST_VALUE;
+ interval.aggregate = HistogramValue();
addValueToHistogram(value, getBinStarts(i),
interval.aggregate.getValue<HistogramValue>());
} else {
diff --git a/statsd/tests/e2e/ValueMetric_histogram_e2e_test.cpp b/statsd/tests/e2e/ValueMetric_histogram_e2e_test.cpp
index aeb5a11..66a1e51 100644
--- a/statsd/tests/e2e/ValueMetric_histogram_e2e_test.cpp
+++ b/statsd/tests/e2e/ValueMetric_histogram_e2e_test.cpp
@@ -778,7 +778,11 @@
histData[1].push_back({1, 2, 3}); // base updated, no aggregate recorded
- histData[1].push_back({3, 1, 4}); // base updated, no aggregate recorded because 2nd bin
+ histData[1].push_back({2, 6, 3}); // base updated, aggregate updated
+
+ histData[1].push_back({3, 9, 4}); // base updated, aggregate updated
+
+ histData[1].push_back({4, 8, 5}); // base updated, no aggregate recorded because 2nd bin
// decreased
createProcessorWithHistData(histData);
@@ -795,7 +799,13 @@
processor->mPullerManager->ForceClearPullerCache();
processor->informPullAlarmFired(baseTimeNs + bucketSizeNs * 5 + 4);
- optional<ConfigMetricsReportList> reports = getReports(baseTimeNs + bucketSizeNs * 6 + 100);
+ processor->mPullerManager->ForceClearPullerCache();
+ processor->informPullAlarmFired(baseTimeNs + bucketSizeNs * 6 + 5);
+
+ processor->mPullerManager->ForceClearPullerCache();
+ processor->informPullAlarmFired(baseTimeNs + bucketSizeNs * 7 + 6);
+
+ optional<ConfigMetricsReportList> reports = getReports(baseTimeNs + bucketSizeNs * 8 + 100);
ASSERT_NE(reports, nullopt);
ASSERT_EQ(reports->reports_size(), 1);
@@ -808,7 +818,7 @@
EXPECT_EQ(metricReport.value_metrics().data_size(), 1);
ValueMetricData data = metricReport.value_metrics().data(0);
- EXPECT_EQ(data.bucket_info_size(), 4);
+ EXPECT_EQ(data.bucket_info_size(), 6);
ValueBucketInfo bucket = data.bucket_info(0);
ASSERT_EQ(bucket.values_size(), 1);
@@ -823,6 +833,18 @@
EXPECT_THAT(bucket.values(0), Property(&ValueBucketInfo::Value::has_value_long, IsTrue()));
bucket = data.bucket_info(3);
+ ASSERT_EQ(bucket.values_size(), 2);
+ EXPECT_THAT(bucket.values(0), Property(&ValueBucketInfo::Value::has_value_long, IsTrue()));
+ ASSERT_THAT(bucket.values(1), Property(&ValueBucketInfo::Value::has_histogram, IsTrue()));
+ EXPECT_THAT(bucket.values(1).histogram().count(), ElementsAreArray({1, 4, 0}));
+
+ bucket = data.bucket_info(4);
+ ASSERT_EQ(bucket.values_size(), 2);
+ EXPECT_THAT(bucket.values(0), Property(&ValueBucketInfo::Value::has_value_long, IsTrue()));
+ ASSERT_THAT(bucket.values(1), Property(&ValueBucketInfo::Value::has_histogram, IsTrue()));
+ EXPECT_THAT(bucket.values(1).histogram().count(), ElementsAreArray({1, 3, 1}));
+
+ bucket = data.bucket_info(5);
ASSERT_EQ(bucket.values_size(), 1);
EXPECT_THAT(bucket.values(0), Property(&ValueBucketInfo::Value::has_value_long, IsTrue()));
diff --git a/statsd/tests/shell/ShellSubscriber_test.cpp b/statsd/tests/shell/ShellSubscriber_test.cpp
index 0245c09..34addb1 100644
--- a/statsd/tests/shell/ShellSubscriber_test.cpp
+++ b/statsd/tests/shell/ShellSubscriber_test.cpp
@@ -309,8 +309,8 @@
configBytes = protoToBytes(getPulledConfig());
// Used to call pullAndSendHeartbeatsIfNeeded directly without depending on sleep.
- shellSubscriberClient = std::move(ShellSubscriberClient::create(
- configBytes, callback, /* startTimeSec= */ 0, uidMap, pullerManager));
+ shellSubscriberClient = ShellSubscriberClient::create(
+ configBytes, callback, /* startTimeSec= */ 0, uidMap, pullerManager);
}
unique_ptr<ShellSubscriberClient> shellSubscriberClient;