Merge "Add FieldsFilter to EventMetric" into main am: 084c7f1ad7

Original change: https://android-review.googlesource.com/c/platform/packages/modules/StatsD/+/3520712

Change-Id: Id6612ffd17e7eab961116b5aedf32df277d6feff
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/statsd/src/HashableDimensionKey.cpp b/statsd/src/HashableDimensionKey.cpp
index 03a4229..df8c9d6 100644
--- a/statsd/src/HashableDimensionKey.cpp
+++ b/statsd/src/HashableDimensionKey.cpp
@@ -227,8 +227,8 @@
     return num_matches > 0;
 }
 
-void filterGaugeValues(const std::vector<Matcher>& matcherFields,
-                       const std::vector<FieldValue>& values, std::vector<FieldValue>* output) {
+void filterValues(const std::vector<Matcher>& matcherFields, const std::vector<FieldValue>& values,
+                  std::vector<FieldValue>* output) {
     for (const auto& field : matcherFields) {
         for (const auto& value : values) {
             if (value.mField.matches(field)) {
diff --git a/statsd/src/HashableDimensionKey.h b/statsd/src/HashableDimensionKey.h
index 4792e8d..292081e 100644
--- a/statsd/src/HashableDimensionKey.h
+++ b/statsd/src/HashableDimensionKey.h
@@ -227,8 +227,8 @@
  * In contrast to the above function, this function will not do any modification to the original
  * data. Considering it as taking a snapshot on the atom event.
  */
-void filterGaugeValues(const std::vector<Matcher>& matchers, const std::vector<FieldValue>& values,
-                       std::vector<FieldValue>* output);
+void filterValues(const std::vector<Matcher>& matchers, const std::vector<FieldValue>& values,
+                  std::vector<FieldValue>* output);
 
 void getDimensionForCondition(const std::vector<FieldValue>& eventValues,
                               const Metric2Condition& links,
diff --git a/statsd/src/guardrail/stats_log_enums.proto b/statsd/src/guardrail/stats_log_enums.proto
index e186b0c..2019c27 100644
--- a/statsd/src/guardrail/stats_log_enums.proto
+++ b/statsd/src/guardrail/stats_log_enums.proto
@@ -99,7 +99,7 @@
     INVALID_CONFIG_REASON_KLL_METRIC_MISSING_KLL_FIELD = 41;
     INVALID_CONFIG_REASON_KLL_METRIC_KLL_FIELD_HAS_POSITION_ALL = 42;
     INVALID_CONFIG_REASON_KLL_METRIC_HAS_INCORRECT_KLL_FIELD = 43;
-    INVALID_CONFIG_REASON_GAUGE_METRIC_INCORRECT_FIELD_FILTER = 44;
+    INVALID_CONFIG_REASON_METRIC_INCORRECT_FIELD_FILTER = 44;
     INVALID_CONFIG_REASON_GAUGE_METRIC_TRIGGER_NO_PULL_ATOM = 45;
     INVALID_CONFIG_REASON_GAUGE_METRIC_TRIGGER_NO_FIRST_N_SAMPLES = 46;
     INVALID_CONFIG_REASON_GAUGE_METRIC_FIRST_N_SAMPLES_WITH_WRONG_EVENT = 47 [deprecated = true];
diff --git a/statsd/src/metrics/EventMetricProducer.cpp b/statsd/src/metrics/EventMetricProducer.cpp
index de7c8d4..bb4c2a6 100644
--- a/statsd/src/metrics/EventMetricProducer.cpp
+++ b/statsd/src/metrics/EventMetricProducer.cpp
@@ -75,7 +75,8 @@
     : MetricProducer(metric.id(), key, startTimeNs, conditionIndex, initialConditionCache, wizard,
                      protoHash, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
                      stateGroupMap, /*splitBucketForAppUpgrade=*/nullopt, configMetadataProvider),
-      mSamplingPercentage(metric.sampling_percentage()) {
+      mSamplingPercentage(metric.sampling_percentage()),
+      mFieldMatchers(translateFieldsFilter(metric.fields_filter())) {
     if (metric.links().size() > 0) {
         for (const auto& link : metric.links()) {
             Metric2Condition mc;
@@ -291,7 +292,7 @@
     }
 
     const int64_t elapsedTimeNs = truncateTimestampIfNecessary(event);
-    AtomDimensionKey key(event.GetTagId(), HashableDimensionKey(event.getValues()));
+    AtomDimensionKey key(event.GetTagId(), HashableDimensionKey(getEventFields(event)));
     // TODO(b/383929503): Optimize slice_by_state performance
     if (!mAggregatedAtoms.contains(key) && !mAggAtomsAndStates.contains(key)) {
         sp<ConfigMetadataProvider> provider = getConfigMetadataProvider();
@@ -340,6 +341,15 @@
     return DataCorruptionSeverity::kNone;
 };
 
+vector<FieldValue> EventMetricProducer::getEventFields(const LogEvent& event) const {
+    if (mFieldMatchers.empty()) {
+        return event.getValues();
+    }
+    vector<FieldValue> eventValues;
+    filterValues(mFieldMatchers, event.getValues(), &eventValues);
+    return eventValues;
+}
+
 }  // namespace statsd
 }  // namespace os
 }  // namespace android
diff --git a/statsd/src/metrics/EventMetricProducer.h b/statsd/src/metrics/EventMetricProducer.h
index 6e741d4..bec8f8b 100644
--- a/statsd/src/metrics/EventMetricProducer.h
+++ b/statsd/src/metrics/EventMetricProducer.h
@@ -99,6 +99,8 @@
     DataCorruptionSeverity determineCorruptionSeverity(int32_t atomId, DataCorruptedReason reason,
                                                        LostAtomType atomType) const override;
 
+    std::vector<FieldValue> getEventFields(const LogEvent& event) const;
+
     // Maps the field/value pairs of an atom to a list of timestamps used to deduplicate atoms.
     // Used when event metric DOES NOT use slice_by_state. Empty otherwise.
     std::unordered_map<AtomDimensionKey, std::vector<int64_t>> mAggregatedAtoms;
@@ -111,6 +113,9 @@
             mAggAtomsAndStates;
 
     const int mSamplingPercentage;
+
+    // Allowlist of fields to report. Empty means all are reported.
+    const std::vector<Matcher> mFieldMatchers;
 };
 
 }  // namespace statsd
diff --git a/statsd/src/metrics/GaugeMetricProducer.cpp b/statsd/src/metrics/GaugeMetricProducer.cpp
index c4dac4a..003ab5f 100644
--- a/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -101,6 +101,7 @@
       mAtomId(atomId),
       mIsPulled(pullTagId != -1),
       mMinBucketSizeNs(metric.min_bucket_size_nanos()),
+      mFieldMatchers(translateFieldsFilter(metric.gauge_fields_filter())),
       mSamplingType(metric.sampling_type()),
       mMaxPullDelayNs(metric.max_pull_delay_sec() > 0 ? metric.max_pull_delay_sec() * NS_PER_SEC
                                                       : StatsdStats::kPullMaxDelayNs),
@@ -120,10 +121,6 @@
     }
     mBucketSizeNs = bucketSizeMills * 1000000;
 
-    if (!metric.gauge_fields_filter().include_all()) {
-        translateFieldMatcher(metric.gauge_fields_filter().fields(), &mFieldMatchers);
-    }
-
     if (metric.has_dimensions_in_what()) {
         translateFieldMatcher(metric.dimensions_in_what(), &mDimensionsInWhat);
         mContainANYPositionInDimensionsInWhat = HasPositionANY(metric.dimensions_in_what());
@@ -519,7 +516,7 @@
     std::shared_ptr<vector<FieldValue>> gaugeFields;
     if (mFieldMatchers.size() > 0) {
         gaugeFields = std::make_shared<vector<FieldValue>>();
-        filterGaugeValues(mFieldMatchers, event.getValues(), gaugeFields.get());
+        filterValues(mFieldMatchers, event.getValues(), gaugeFields.get());
     } else {
         gaugeFields = std::make_shared<vector<FieldValue>>(event.getValues());
     }
diff --git a/statsd/src/metrics/GaugeMetricProducer.h b/statsd/src/metrics/GaugeMetricProducer.h
index faa4e2d..b1f0a07 100644
--- a/statsd/src/metrics/GaugeMetricProducer.h
+++ b/statsd/src/metrics/GaugeMetricProducer.h
@@ -217,7 +217,7 @@
     void updateCurrentSlicedBucketForAnomaly();
 
     // Allowlist of fields to report. Empty means all are reported.
-    std::vector<Matcher> mFieldMatchers;
+    const std::vector<Matcher> mFieldMatchers;
 
     GaugeMetric::SamplingType mSamplingType;
 
diff --git a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
index 53b470d..28b38f6 100644
--- a/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
+++ b/statsd/src/metrics/parsing_utils/metrics_manager_util.cpp
@@ -853,6 +853,15 @@
                 InvalidConfigReason(INVALID_CONFIG_REASON_METRIC_MISSING_ID_OR_WHAT, metric.id());
         return nullopt;
     }
+
+    if (metric.has_fields_filter() && metric.fields_filter().has_fields() &&
+        !hasLeafNode(metric.fields_filter().fields())) {
+        ALOGW("Incorrect field filter setting in EventMetric %lld", (long long)metric.id());
+        invalidConfigReason = InvalidConfigReason(
+                INVALID_CONFIG_REASON_METRIC_INCORRECT_FIELD_FILTER, metric.id());
+        return nullopt;
+    }
+
     int trackerIndex;
     invalidConfigReason = handleMetricWithAtomMatchingTrackers(
             metric.what(), metric.id(), metricIndex, false, allAtomMatchingTrackers,
@@ -1398,20 +1407,11 @@
         return nullopt;
     }
 
-    if ((!metric.gauge_fields_filter().has_include_all() ||
-         (metric.gauge_fields_filter().include_all() == false)) &&
+    if (metric.has_gauge_fields_filter() && metric.gauge_fields_filter().has_fields() &&
         !hasLeafNode(metric.gauge_fields_filter().fields())) {
         ALOGW("Incorrect field filter setting in GaugeMetric %lld", (long long)metric.id());
         invalidConfigReason = InvalidConfigReason(
-                INVALID_CONFIG_REASON_GAUGE_METRIC_INCORRECT_FIELD_FILTER, metric.id());
-        return nullopt;
-    }
-    if ((metric.gauge_fields_filter().has_include_all() &&
-         metric.gauge_fields_filter().include_all() == true) &&
-        hasLeafNode(metric.gauge_fields_filter().fields())) {
-        ALOGW("Incorrect field filter setting in GaugeMetric %lld", (long long)metric.id());
-        invalidConfigReason = InvalidConfigReason(
-                INVALID_CONFIG_REASON_GAUGE_METRIC_INCORRECT_FIELD_FILTER, metric.id());
+                INVALID_CONFIG_REASON_METRIC_INCORRECT_FIELD_FILTER, metric.id());
         return nullopt;
     }
 
diff --git a/statsd/src/stats_log_util.cpp b/statsd/src/stats_log_util.cpp
index 83e60d5..c4f63b0 100644
--- a/statsd/src/stats_log_util.cpp
+++ b/statsd/src/stats_log_util.cpp
@@ -687,6 +687,16 @@
     return hex;
 }
 
+vector<Matcher> translateFieldsFilter(const FieldFilter& fieldFilter) {
+    if (!fieldFilter.has_fields()) {
+        return {};
+    }
+
+    vector<Matcher> fieldMatchers;
+    translateFieldMatcher(fieldFilter.fields(), &fieldMatchers);
+    return fieldMatchers;
+}
+
 }  // namespace statsd
 }  // namespace os
 }  // namespace android
diff --git a/statsd/src/stats_log_util.h b/statsd/src/stats_log_util.h
index d7a3987..6520f8e 100644
--- a/statsd/src/stats_log_util.h
+++ b/statsd/src/stats_log_util.h
@@ -130,6 +130,8 @@
 
 std::string toHexString(const string& bytes);
 
+std::vector<Matcher> translateFieldsFilter(const FieldFilter& fieldFilter);
+
 }  // namespace statsd
 }  // namespace os
 }  // namespace android
diff --git a/statsd/src/statsd_config.proto b/statsd/src/statsd_config.proto
index d112165..16d7ee7 100644
--- a/statsd/src/statsd_config.proto
+++ b/statsd/src/statsd_config.proto
@@ -250,6 +250,8 @@
 
   optional FieldMatcher uid_fields = 6;
 
+  optional FieldFilter fields_filter = 9;
+
   reserved 100;
   reserved 101;
 }
diff --git a/statsd/tests/e2e/EventMetric_e2e_test.cpp b/statsd/tests/e2e/EventMetric_e2e_test.cpp
index aed6954..7648159 100644
--- a/statsd/tests/e2e/EventMetric_e2e_test.cpp
+++ b/statsd/tests/e2e/EventMetric_e2e_test.cpp
@@ -869,6 +869,91 @@
     EXPECT_EQ(android::app::PROCESS_STATE_IMPORTANT_FOREGROUND, data.slice_by_state(1).value());
 }
 
+TEST_F(EventMetricE2eTest, TestEventMetricFieldsFilter) {
+    StatsdConfig config;
+
+    AtomMatcher testAtomReportedAtomMatcher =
+            CreateSimpleAtomMatcher("TestAtomReportedMatcher", util::TEST_ATOM_REPORTED);
+    *config.add_atom_matcher() = testAtomReportedAtomMatcher;
+
+    EventMetric metric =
+            createEventMetric("EventTestAtomReported", testAtomReportedAtomMatcher.id(), nullopt);
+    metric.mutable_fields_filter()->mutable_fields()->set_field(util::TEST_ATOM_REPORTED);
+    metric.mutable_fields_filter()->mutable_fields()->add_child()->set_field(2);  // int_field
+    *config.add_event_metric() = metric;
+
+    ConfigKey key(123, 987);
+    uint64_t bucketStartTimeNs = 10000000000;  // 0:10
+    sp<StatsLogProcessor> processor =
+            CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, key);
+
+    // Initialize log events before update.
+    std::vector<std::unique_ptr<LogEvent>> events;
+
+    vector<int> enumArrayNoMatch = {TestAtomReported::OFF, TestAtomReported::ON};
+    vector<int> enumArrayMatch = {TestAtomReported::ON, TestAtomReported::OFF};
+
+    events.push_back(CreateTestAtomReportedEventWithPrimitives(
+            bucketStartTimeNs + 10 * NS_PER_SEC, 1 /* intField */, 1l /* longField */,
+            1.0f /* floatField */, "string_field1", false /* boolField */,
+            TestAtomReported::OFF /* enumField */));
+    events.push_back(CreateTestAtomReportedEventWithPrimitives(
+            bucketStartTimeNs + 20 * NS_PER_SEC, 2 /* intField */, 2l /* longField */,
+            2.0f /* floatField */, "string_field2", true /* boolField */,
+            TestAtomReported::ON /* enumField */));
+    events.push_back(CreateTestAtomReportedEventWithPrimitives(
+            bucketStartTimeNs + 30 * NS_PER_SEC, 3 /* intField */, 3l /* longField */,
+            3.0f /* floatField */, "string_field3", false /* boolField */,
+            TestAtomReported::ON /* enumField */));
+
+    // Send log events to StatsLogProcessor.
+    for (auto& event : events) {
+        processor->OnLogEvent(event.get());
+    }
+
+    uint64_t dumpTimeNs = bucketStartTimeNs + 100 * NS_PER_SEC;
+    ConfigMetricsReportList reports;
+    vector<uint8_t> buffer;
+    processor->onDumpReport(key, dumpTimeNs, true, true, ADB_DUMP, FAST, &buffer);
+    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+    backfillStringInReport(&reports);
+    backfillStartEndTimestamp(&reports);
+    backfillAggregatedAtoms(&reports);
+    ASSERT_EQ(reports.reports_size(), 1);
+
+    ConfigMetricsReport report = reports.reports(0);
+    ASSERT_EQ(report.metrics_size(), 1);
+    StatsLogReport testAtomEventMetricReport = report.metrics(0);
+    EXPECT_EQ(testAtomEventMetricReport.metric_id(), metric.id());
+    EXPECT_TRUE(testAtomEventMetricReport.has_event_metrics());
+    ASSERT_EQ(testAtomEventMetricReport.event_metrics().data_size(), 3);
+
+    TestAtomReported atom =
+            testAtomEventMetricReport.event_metrics().data(0).atom().test_atom_reported();
+    EXPECT_EQ(atom.int_field(), 1);
+    EXPECT_FALSE(atom.has_long_field());
+    EXPECT_FALSE(atom.has_float_field());
+    EXPECT_FALSE(atom.has_string_field());
+    EXPECT_FALSE(atom.has_boolean_field());
+    EXPECT_FALSE(atom.has_state());
+
+    atom = testAtomEventMetricReport.event_metrics().data(1).atom().test_atom_reported();
+    EXPECT_EQ(atom.int_field(), 2);
+    EXPECT_FALSE(atom.has_long_field());
+    EXPECT_FALSE(atom.has_float_field());
+    EXPECT_FALSE(atom.has_string_field());
+    EXPECT_FALSE(atom.has_boolean_field());
+    EXPECT_FALSE(atom.has_state());
+
+    atom = testAtomEventMetricReport.event_metrics().data(2).atom().test_atom_reported();
+    EXPECT_EQ(atom.int_field(), 3);
+    EXPECT_FALSE(atom.has_long_field());
+    EXPECT_FALSE(atom.has_float_field());
+    EXPECT_FALSE(atom.has_string_field());
+    EXPECT_FALSE(atom.has_boolean_field());
+    EXPECT_FALSE(atom.has_state());
+}
+
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
 #endif
diff --git a/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp b/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
index 12c3d80..9e872a1 100644
--- a/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
+++ b/statsd/tests/e2e/GaugeMetric_e2e_pull_test.cpp
@@ -53,7 +53,6 @@
         gaugeMetric->set_condition(screenIsOffPredicate.id());
     }
     gaugeMetric->set_sampling_type(sampling_type);
-    gaugeMetric->mutable_gauge_fields_filter()->set_include_all(true);
     *gaugeMetric->mutable_dimensions_in_what() =
             CreateDimensions(ATOM_TAG, {1 /* subsystem name */});
     gaugeMetric->set_bucket(FIVE_MINUTES);
@@ -1722,7 +1721,6 @@
     gaugeMetric->set_id(metricId);
     gaugeMetric->set_what(cpuTimePerUidMatcher.id());
     gaugeMetric->set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    gaugeMetric->mutable_gauge_fields_filter()->set_include_all(true);
     *gaugeMetric->mutable_dimensions_in_what() =
             CreateDimensions(util::CPU_TIME_PER_UID, {1 /* uid */});
     gaugeMetric->set_bucket(FIVE_MINUTES);
diff --git a/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp b/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
index f735a0c..9440d5f 100644
--- a/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
+++ b/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp
@@ -46,7 +46,6 @@
     gaugeMetric->set_id(123456);
     gaugeMetric->set_what(atomMatcher.id());
     gaugeMetric->set_condition(isInBackgroundPredicate.id());
-    gaugeMetric->mutable_gauge_fields_filter()->set_include_all(false);
     gaugeMetric->set_sampling_type(sampling_type);
     auto fieldMatcher = gaugeMetric->mutable_gauge_fields_filter()->mutable_fields();
     fieldMatcher->set_field(util::APP_START_OCCURRED);
diff --git a/statsd/tests/e2e/PartialBucket_e2e_test.cpp b/statsd/tests/e2e/PartialBucket_e2e_test.cpp
index c3503ea..2f4e766 100644
--- a/statsd/tests/e2e/PartialBucket_e2e_test.cpp
+++ b/statsd/tests/e2e/PartialBucket_e2e_test.cpp
@@ -88,7 +88,6 @@
     auto gaugeMetric = config.add_gauge_metric();
     gaugeMetric->set_id(123456);
     gaugeMetric->set_what(pulledAtomMatcher.id());
-    gaugeMetric->mutable_gauge_fields_filter()->set_include_all(true);
     *gaugeMetric->mutable_dimensions_in_what() =
             CreateDimensions(util::SUBSYSTEM_SLEEP_STATE, {1 /* subsystem name */});
     gaugeMetric->set_bucket(FIVE_MINUTES);
diff --git a/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/statsd/tests/metrics/GaugeMetricProducer_test.cpp
index ae74dca..123921f 100644
--- a/statsd/tests/metrics/GaugeMetricProducer_test.cpp
+++ b/statsd/tests/metrics/GaugeMetricProducer_test.cpp
@@ -96,7 +96,6 @@
     GaugeMetric metric;
     metric.set_id(metricId);
     metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(false);
     auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
     gaugeFieldMatcher->set_field(tagId);
     gaugeFieldMatcher->add_child()->set_field(1);
@@ -127,7 +126,6 @@
     GaugeMetric metric;
     metric.set_id(metricId);
     metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(false);
     metric.set_max_pull_delay_sec(INT_MAX);
     auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
     gaugeFieldMatcher->set_field(tagId);
@@ -227,7 +225,6 @@
     GaugeMetric metric;
     metric.set_id(metricId);
     metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
     metric.set_split_bucket_for_app_upgrade(true);
 
     Alert alert;
@@ -519,7 +516,6 @@
     GaugeMetric metric;
     metric.set_id(1111111);
     metric.set_bucket(ONE_MINUTE);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
     metric.set_condition(StringToId("APP_DIED"));
     metric.set_max_pull_delay_sec(INT_MAX);
     auto dim = metric.mutable_dimensions_in_what();
@@ -674,7 +670,6 @@
     metric.set_id(metricId);
     metric.set_bucket(ONE_MINUTE);
     metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    metric.mutable_gauge_fields_filter()->set_include_all(false);
     metric.set_max_pull_delay_sec(INT_MAX);
     auto gaugeFieldMatcher = metric.mutable_gauge_fields_filter()->mutable_fields();
     gaugeFieldMatcher->set_field(tagId);
@@ -799,7 +794,6 @@
     metric.set_id(metricId);
     metric.set_bucket(ONE_MINUTE);
     metric.set_sampling_type(GaugeMetric::FIRST_N_SAMPLES);
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
     metric.set_max_pull_delay_sec(INT_MAX);
     auto dimensionMatcher = metric.mutable_dimensions_in_what();
     // use field 1 as dimension.
diff --git a/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp b/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
index 6b6ab37..766a8fa 100644
--- a/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
+++ b/statsd/tests/metrics/parsing_utils/metrics_manager_util_test.cpp
@@ -592,6 +592,18 @@
     EXPECT_EQ(initConfig(config), nullopt);
 }
 
+TEST_F(MetricsManagerUtilTest, TestEventMetricIncorrectFieldFilter) {
+    StatsdConfig config;
+    int64_t metricId = 1;
+    EventMetric* metric = config.add_event_metric();
+    metric->set_id(metricId);
+    metric->set_what(1);
+    metric->mutable_fields_filter()->mutable_fields();
+
+    EXPECT_EQ(initConfig(config),
+              InvalidConfigReason(INVALID_CONFIG_REASON_METRIC_INCORRECT_FIELD_FILTER, metricId));
+}
+
 TEST_F(MetricsManagerUtilTest, TestGaugeMetricInvalidSamplingPercentage) {
     StatsdConfig config;
     GaugeMetric* metric = config.add_gauge_metric();
@@ -1129,10 +1141,10 @@
     GaugeMetric* metric = config.add_gauge_metric();
     metric->set_id(metricId);
     metric->set_what(1);
+    metric->mutable_gauge_fields_filter()->mutable_fields();
 
     EXPECT_EQ(initConfig(config),
-              InvalidConfigReason(INVALID_CONFIG_REASON_GAUGE_METRIC_INCORRECT_FIELD_FILTER,
-                                  metricId));
+              InvalidConfigReason(INVALID_CONFIG_REASON_METRIC_INCORRECT_FIELD_FILTER, metricId));
 }
 
 TEST_F(MetricsManagerUtilTest, TestGaugeMetricTriggerNoPullAtom) {
@@ -1141,7 +1153,6 @@
     GaugeMetric* metric = config.add_gauge_metric();
     metric->set_id(metricId);
     metric->set_what(StringToId("ScreenTurnedOn"));
-    metric->mutable_gauge_fields_filter()->set_include_all(true);
     metric->set_trigger_event(1);
 
     *config.add_atom_matcher() = CreateScreenTurnedOnAtomMatcher();
@@ -1160,7 +1171,6 @@
     *config.add_atom_matcher() =
             CreateSimpleAtomMatcher(/*name=*/"Matcher", /*atomId=*/util::SUBSYSTEM_SLEEP_STATE);
 
-    metric->mutable_gauge_fields_filter()->set_include_all(true);
     metric->set_trigger_event(StringToId("Matcher"));
 
     EXPECT_EQ(initConfig(config),
diff --git a/statsd/tests/statsd_test_util.cpp b/statsd/tests/statsd_test_util.cpp
index 3a35f0c..6ffd6c3 100644
--- a/statsd/tests/statsd_test_util.cpp
+++ b/statsd/tests/statsd_test_util.cpp
@@ -600,7 +600,6 @@
     for (const int64_t state : states) {
         metric.add_slice_by_state(state);
     }
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
     return metric;
 }