Add special control flags for system server reporting

System server is important enough to have its own config.

Test: gtest
Bug: 170149255
Merged-In: I33741751717ef3474f3a89e8fda8ad19b9e952ed
Change-Id: I33741751717ef3474f3a89e8fda8ad19b9e952ed
(cherry picked from commit cf43650ab1529d13b12e808c59ec7c4f91cb35fd)
diff --git a/libartbase/base/flags.h b/libartbase/base/flags.h
index 0345ebc7..d1e1ca6 100644
--- a/libartbase/base/flags.h
+++ b/libartbase/base/flags.h
@@ -277,6 +277,8 @@
   // By default, the mods are 0, which means the reporting is disabled.
   Flag<uint32_t> MetricsReportingMods{"metrics.reporting-mods", 0,
       FlagType::kDeviceConfig};
+  Flag<uint32_t> MetricsReportingModsServer{"metrics.reporting-mods-server", 0,
+      FlagType::kDeviceConfig};
 
   // See MetricsReportingMods docs.
   //
@@ -285,6 +287,8 @@
   // grain unit is needed (e.g. a tenth of a percent), the num-mods can be increased.
   Flag<uint32_t> MetricsReportingNumMods{"metrics.reporting-num-mods", 100,
       FlagType::kDeviceConfig};
+  Flag<uint32_t> MetricsReportingNumModsServer{"metrics.reporting-num-mods-server", 100,
+      FlagType::kDeviceConfig};
 
   // Whether or not we should write metrics to statsd.
   // Note that the actual write is still controlled by
diff --git a/runtime/metrics/reporter.cc b/runtime/metrics/reporter.cc
index 5104bd3..a44066e 100644
--- a/runtime/metrics/reporter.cc
+++ b/runtime/metrics/reporter.cc
@@ -272,12 +272,19 @@
     }
   }
 
-  uint32_t reporting_num_mods = gFlags.MetricsReportingNumMods();
-  uint32_t reporting_mods = gFlags.MetricsReportingMods();
-  if (reporting_mods > reporting_num_mods) {
+  uint32_t reporting_num_mods = is_system_server
+      ? gFlags.MetricsReportingNumModsServer()
+      : gFlags.MetricsReportingNumMods();
+  uint32_t reporting_mods = is_system_server
+      ? gFlags.MetricsReportingModsServer()
+      : gFlags.MetricsReportingMods();
+
+  if (reporting_mods > reporting_num_mods || reporting_num_mods == 0) {
     LOG(ERROR) << "Invalid metrics reporting mods: " << reporting_mods
-        << " num modes=" << reporting_num_mods;
+        << " num modes=" << reporting_num_mods
+        << ". The reporting is disabled";
     reporting_mods = 0;
+    reporting_num_mods = 100;
   }
 
   return {