Merge "Access DeviceConfig as system_server" into tm-dev
diff --git a/statsd/src/flags/FlagProvider.h b/statsd/src/flags/FlagProvider.h
index 61d1841..4180e88 100644
--- a/statsd/src/flags/FlagProvider.h
+++ b/statsd/src/flags/FlagProvider.h
@@ -37,9 +37,6 @@
const std::string STATSD_NATIVE_NAMESPACE = "statsd_native";
const std::string STATSD_NATIVE_BOOT_NAMESPACE = "statsd_native_boot";
-const std::string VALUE_METRIC_SUBSET_DIMENSION_AGGREGATION_FLAG =
- "value_metric_subset_dimension_aggregation";
-
const std::string FLAG_TRUE = "true";
const std::string FLAG_FALSE = "false";
const std::string FLAG_EMPTY = "";
@@ -112,7 +109,6 @@
friend class FlagProviderTest_SPlus_RealValues;
friend class KllMetricE2eAbTest;
friend class MetricsManagerTest;
- friend class NumericValueMetricProducerTest_SubsetDimensions;
friend class PartialBucketE2e_AppUpgradeDefaultTest;
FRIEND_TEST(ConfigUpdateE2eTest, TestKllMetric_KllDisabledBeforeConfigUpdate);
@@ -129,8 +125,7 @@
FRIEND_TEST(FlagProviderTest_SPlus, TestGetFlagBoolServerFlagEmptyDefaultTrue);
FRIEND_TEST(FlagProviderTest_SPlus_RealValues, TestGetBootFlagBoolServerFlagTrue);
FRIEND_TEST(FlagProviderTest_SPlus_RealValues, TestGetBootFlagBoolServerFlagFalse);
- FRIEND_TEST(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions_FlagTrue);
- FRIEND_TEST(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions_FlagFalse);
+ FRIEND_TEST(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions);
FRIEND_TEST(PartialBucketE2e_AppUpgradeDefaultTest, TestCountMetricDefaultFalse);
FRIEND_TEST(PartialBucketE2e_AppUpgradeDefaultTest, TestCountMetricDefaultTrue);
};
diff --git a/statsd/src/main.cpp b/statsd/src/main.cpp
index 01e1e92..bd2c0e4 100644
--- a/statsd/src/main.cpp
+++ b/statsd/src/main.cpp
@@ -80,7 +80,7 @@
std::make_shared<LogEventQueue>(4000 /*buffer limit. Buffer is NOT pre-allocated*/);
// Initialize boot flags
- FlagProvider::getInstance().initBootFlags({VALUE_METRIC_SUBSET_DIMENSION_AGGREGATION_FLAG});
+ FlagProvider::getInstance().initBootFlags({});
// Create the service
gStatsService = SharedRefBase::make<StatsService>(looper, eventQueue);
diff --git a/statsd/src/metrics/NumericValueMetricProducer.cpp b/statsd/src/metrics/NumericValueMetricProducer.cpp
index f2e93f1..703b07b 100644
--- a/statsd/src/metrics/NumericValueMetricProducer.cpp
+++ b/statsd/src/metrics/NumericValueMetricProducer.cpp
@@ -22,7 +22,6 @@
#include <limits.h>
#include <stdlib.h>
-#include "flags/FlagProvider.h"
#include "guardrail/StatsdStats.h"
#include "metrics/parsing_utils/metrics_manager_util.h"
#include "stats_log_util.h"
@@ -254,9 +253,9 @@
}
mMatchedMetricDimensionKeys.clear();
- if (FlagProvider::getInstance().getBootFlagBool(VALUE_METRIC_SUBSET_DIMENSION_AGGREGATION_FLAG,
- FLAG_FALSE) &&
- mUseDiff) {
+ if (mUseDiff) {
+ // An extra aggregation step is needed to sum values with matching dimensions
+ // before calculating the diff between sums of consecutive pulls.
std::unordered_map<HashableDimensionKey, pair<LogEvent, vector<int>>> aggregateEvents;
for (const auto& data : allData) {
if (mEventMatcherWizard->matchLogEvent(*data, mWhatMatcherIndex) !=
diff --git a/statsd/src/metrics/NumericValueMetricProducer.h b/statsd/src/metrics/NumericValueMetricProducer.h
index 542975d..8eca3f8 100644
--- a/statsd/src/metrics/NumericValueMetricProducer.h
+++ b/statsd/src/metrics/NumericValueMetricProducer.h
@@ -264,7 +264,7 @@
FRIEND_TEST(NumericValueMetricProducerTest_ConditionCorrection, TestThresholdUploadSkip);
FRIEND_TEST(NumericValueMetricProducerTest_ConditionCorrection, TestLateStateChangeSlicedAtoms);
- FRIEND_TEST(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions_FlagTrue);
+ FRIEND_TEST(NumericValueMetricProducerTest, TestSubsetDimensions);
FRIEND_TEST(ConfigUpdateTest, TestUpdateValueMetrics);
diff --git a/statsd/tests/metrics/NumericValueMetricProducer_test.cpp b/statsd/tests/metrics/NumericValueMetricProducer_test.cpp
index 1457292..1b5abaf 100644
--- a/statsd/tests/metrics/NumericValueMetricProducer_test.cpp
+++ b/statsd/tests/metrics/NumericValueMetricProducer_test.cpp
@@ -274,19 +274,6 @@
// Setup for parameterized tests.
class NumericValueMetricProducerTest_PartialBucket : public TestWithParam<BucketSplitEvent> {};
-class NumericValueMetricProducerTest_SubsetDimensions : public ::testing::Test {
- void SetUp() override {
- FlagProvider::getInstance().overrideFuncs(&isAtLeastSFuncTrue);
- FlagProvider::getInstance().overrideFlag(VALUE_METRIC_SUBSET_DIMENSION_AGGREGATION_FLAG,
- FLAG_FALSE,
- /*isBootFlag=*/true);
- }
-
- void TearDown() override {
- FlagProvider::getInstance().resetOverrides();
- }
-};
-
INSTANTIATE_TEST_SUITE_P(NumericValueMetricProducerTest_PartialBucket,
NumericValueMetricProducerTest_PartialBucket,
testing::Values(APP_UPGRADE, BOOT_COMPLETE));
@@ -7353,10 +7340,7 @@
60 * NS_PER_SEC, 0);
}
-TEST_F(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions_FlagTrue) {
- FlagProvider::getInstance().overrideFlag(VALUE_METRIC_SUBSET_DIMENSION_AGGREGATION_FLAG,
- FLAG_TRUE, /*isBootFlag=*/true);
-
+TEST(NumericValueMetricProducerTest, TestSubsetDimensions) {
// Create metric with subset of dimensions.
ValueMetric metric = NumericValueMetricProducerTestHelper::createMetric();
*metric.mutable_dimensions_in_what() = CreateDimensions(tagId, {1 /*uid*/});
@@ -7442,92 +7426,6 @@
ValidateValueBucket(data.bucket_info(1), bucket2StartTimeNs, dumpReportTimeNs, {26}, -1, 0);
}
-TEST_F(NumericValueMetricProducerTest_SubsetDimensions, TestSubsetDimensions_FlagFalse) {
- // Create metric with subset of dimensions.
- ValueMetric metric = NumericValueMetricProducerTestHelper::createMetric();
- *metric.mutable_dimensions_in_what() = CreateDimensions(tagId, {1 /*uid*/});
-
- sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
-
- EXPECT_CALL(*pullerManager, Pull(tagId, kConfigKey, _, _))
- // First and third fields are dimension fields. Second field is the value field.
- // First bucket pull.
- .WillOnce(Invoke([](int tagId, const ConfigKey&, const int64_t eventTimeNs,
- vector<std::shared_ptr<LogEvent>>* data) {
- data->clear();
- data->push_back(
- CreateThreeValueLogEvent(tagId, bucketStartTimeNs + 1, 1 /*uid*/, 5, 5));
- data->push_back(
- CreateThreeValueLogEvent(tagId, bucketStartTimeNs + 1, 1 /*uid*/, 5, 7));
- data->push_back(
- CreateThreeValueLogEvent(tagId, bucketStartTimeNs + 1, 2 /*uid*/, 6, 5));
- data->push_back(
- CreateThreeValueLogEvent(tagId, bucketStartTimeNs + 1, 2 /*uid*/, 6, 7));
- return true;
- }))
- // Dump report.
- .WillOnce(Invoke([](int tagId, const ConfigKey&, const int64_t eventTimeNs,
- vector<std::shared_ptr<LogEvent>>* data) {
- data->clear();
- data->push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 10000000000,
- 1 /*uid*/, 13, 5));
- data->push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 10000000000,
- 1 /*uid*/, 15, 7));
- data->push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 10000000000,
- 2 /*uid*/, 21, 5));
- data->push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 10000000000,
- 2 /*uid*/, 22, 7));
- return true;
- }));
-
- sp<NumericValueMetricProducer> valueProducer =
- NumericValueMetricProducerTestHelper::createValueProducerNoConditions(pullerManager,
- metric);
-
- // Bucket 2 start.
- vector<shared_ptr<LogEvent>> allData;
- allData.clear();
- allData.push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 1, 1 /*uid*/, 10, 5));
- allData.push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 1, 1 /*uid*/, 11, 7));
- allData.push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 1, 2 /*uid*/, 8, 5));
- allData.push_back(CreateThreeValueLogEvent(tagId, bucket2StartTimeNs + 1, 2 /*uid*/, 9, 7));
- valueProducer->onDataPulled(allData, /** succeed */ true, bucket2StartTimeNs);
-
- // Check dump report.
- ProtoOutputStream output;
- std::set<string> strSet;
- int64_t dumpReportTimeNs = bucket2StartTimeNs + 10000000000;
- valueProducer->onDumpReport(dumpReportTimeNs, true /* include current buckets */, true,
- NO_TIME_CONSTRAINTS /* dumpLatency */, &strSet, &output);
-
- StatsLogReport report = outputStreamToProto(&output);
- backfillDimensionPath(&report);
- backfillStartEndTimestamp(&report);
- EXPECT_TRUE(report.has_value_metrics());
- StatsLogReport::ValueMetricDataWrapper valueMetrics;
- sortMetricDataByDimensionsValue(report.value_metrics(), &valueMetrics);
- ASSERT_EQ(2, valueMetrics.data_size());
- EXPECT_EQ(0, report.value_metrics().skipped_size());
-
- // Check data keyed to uid 1.
- ValueMetricData data = valueMetrics.data(0);
- ValidateUidDimension(data.dimensions_in_what(), tagId, 1);
- ASSERT_EQ(2, data.bucket_info_size());
- ValidateValueBucket(data.bucket_info(0), bucketStartTimeNs, bucket2StartTimeNs, {6}, -1,
- 0); // Summed diffs of 5, 5, 10, 11
- ValidateValueBucket(data.bucket_info(1), bucket2StartTimeNs, dumpReportTimeNs, {4}, -1,
- 0); // Summed diffs of 11, 13, 15
-
- // Check data keyed to uid 2.
- data = valueMetrics.data(1);
- ValidateUidDimension(data.dimensions_in_what(), tagId, 2);
- ASSERT_EQ(2, data.bucket_info_size());
- ValidateValueBucket(data.bucket_info(0), bucketStartTimeNs, bucket2StartTimeNs, {3}, -1,
- 0); // Summed diffs of 6, 6, 8, 9
- ValidateValueBucket(data.bucket_info(1), bucket2StartTimeNs, dumpReportTimeNs, {13}, -1,
- 0); // Summed diffs of 9, 21, 22
-}
-
TEST(NumericValueMetricProducerTest, TestRepeatedValueFieldAndDimensions) {
ValueMetric metric = NumericValueMetricProducerTestHelper::createMetricWithRepeatedValueField();
metric.mutable_dimensions_in_what()->set_field(tagId);