Collect worker metrics by default.

Flag `experimental_collect_worker_data_in_profiler` moved to the graveyard.

PiperOrigin-RevId: 628042522
Change-Id: I7e680a1b55c90aa227263bec12a23673e486b219
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index 25b5ee5..03096de 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -315,6 +315,14 @@
         help = "No-op",
         oldName = "incompatible_build_transitive_python_runfiles")
     public boolean buildTransitiveRunfilesTrees;
+
+    @Option(
+        name = "experimental_collect_worker_data_in_profiler",
+        defaultValue = "true",
+        documentationCategory = OptionDocumentationCategory.LOGGING,
+        effectTags = {OptionEffectTag.NO_OP},
+        help = "No-op.")
+    public boolean collectWorkerDataInProfiler;
   }
 
   /** This is where deprecated Bazel-specific options only used by the build command go to die. */
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java b/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
index e684f2f..f96ca55 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/CollectLocalResourceUsage.java
@@ -53,7 +53,6 @@
   private static final Duration LOCAL_RESOURCES_COLLECT_SLEEP_INTERVAL = Duration.ofMillis(200);
 
   private final BugReporter bugReporter;
-  private final boolean collectWorkerDataInProfiler;
   private final boolean collectLoadAverage;
   private final boolean collectSystemNetworkUsage;
   private final boolean collectResourceManagerEstimation;
@@ -82,13 +81,11 @@
       BugReporter bugReporter,
       WorkerProcessMetricsCollector workerProcessMetricsCollector,
       ResourceEstimator resourceEstimator,
-      boolean collectWorkerDataInProfiler,
       boolean collectLoadAverage,
       boolean collectSystemNetworkUsage,
       boolean collectResourceManagerEstimation,
       boolean collectPressureStallIndicators) {
     this.bugReporter = checkNotNull(bugReporter);
-    this.collectWorkerDataInProfiler = collectWorkerDataInProfiler;
     this.workerProcessMetricsCollector = workerProcessMetricsCollector;
     this.collectLoadAverage = collectLoadAverage;
     this.collectSystemNetworkUsage = collectSystemNetworkUsage;
@@ -125,11 +122,9 @@
                 ProfilerTask.LOCAL_CPU_USAGE,
                 ProfilerTask.LOCAL_MEMORY_USAGE,
                 ProfilerTask.SYSTEM_CPU_USAGE,
-                ProfilerTask.SYSTEM_MEMORY_USAGE));
+                ProfilerTask.SYSTEM_MEMORY_USAGE,
+                ProfilerTask.WORKERS_MEMORY_USAGE));
 
-        if (collectWorkerDataInProfiler) {
-          enabledCounters.add(ProfilerTask.WORKERS_MEMORY_USAGE);
-        }
         if (collectLoadAverage) {
           enabledCounters.add(ProfilerTask.SYSTEM_LOAD_AVERAGE);
         }
@@ -220,8 +215,8 @@
         }
 
         int workerMemoryUsageMb = 0;
-        if (collectWorkerDataInProfiler) {
-          try (SilentCloseable c = Profiler.instance().profile("Worker metrics collection")) {
+        try (SilentCloseable c = Profiler.instance().profile("Worker metrics collection")) {
+          if (OS.getCurrent() == OS.LINUX || OS.getCurrent() == OS.DARWIN) {
             workerMemoryUsageMb =
                 workerProcessMetricsCollector.getLiveWorkerProcessMetrics().stream()
                         .mapToInt(WorkerProcessMetrics::getUsedMemoryInKb)
@@ -278,8 +273,13 @@
               previousElapsed,
               nextElapsed,
               (double) systemMemoryUsageMb);
-          addRange(
-              ProfilerTask.WORKERS_MEMORY_USAGE, previousElapsed, nextElapsed, workerMemoryUsageMb);
+          if (workerMemoryUsageMb > 0) {
+            addRange(
+                ProfilerTask.WORKERS_MEMORY_USAGE,
+                previousElapsed,
+                nextElapsed,
+                workerMemoryUsageMb);
+          }
           if (loadAverage > 0) {
             addRange(ProfilerTask.SYSTEM_LOAD_AVERAGE, previousElapsed, nextElapsed, loadAverage);
           }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index 298e945..88e153e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -401,7 +401,6 @@
                 bugReporter,
                 workerProcessMetricsCollector,
                 env.getLocalResourceManager(),
-                options.collectWorkerDataInProfiler,
                 options.collectLoadAverageInProfiler,
                 options.collectSystemNetworkUsage,
                 options.collectResourceEstimation,
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
index 9657df3..3ebc05c 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java
@@ -296,14 +296,6 @@
   public boolean recordFullProfilerData;
 
   @Option(
-      name = "experimental_collect_worker_data_in_profiler",
-      defaultValue = "false",
-      documentationCategory = OptionDocumentationCategory.LOGGING,
-      effectTags = {OptionEffectTag.BAZEL_MONITORING},
-      help = "If enabled, the profiler collects worker's aggregated resource data.")
-  public boolean collectWorkerDataInProfiler;
-
-  @Option(
       name = "experimental_collect_load_average_in_profiler",
       defaultValue = "true",
       documentationCategory = OptionDocumentationCategory.LOGGING,
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerProcessMetricsCollector.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerProcessMetricsCollector.java
index be66585..faf062e 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerProcessMetricsCollector.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerProcessMetricsCollector.java
@@ -23,6 +23,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildMetrics.WorkerMetrics;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildMetrics.WorkerMetrics.WorkerStatus;
+import com.google.devtools.build.lib.clock.BlazeClock;
 import com.google.devtools.build.lib.clock.Clock;
 import com.google.devtools.build.lib.metrics.CgroupsInfoCollector;
 import com.google.devtools.build.lib.metrics.PsInfoCollector;
@@ -46,7 +47,7 @@
   private final PsInfoCollector psInfoCollector;
   private final CgroupsInfoCollector cgroupsInfoCollector;
 
-  private Clock clock;
+  private Clock clock = BlazeClock.instance();
 
   /**
    * Mapping of worker process ids to their process metrics. This contains all workers that have
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
index 5739f4b..730c799 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
@@ -413,7 +413,6 @@
                 runtime.getBugReporter(),
                 WorkerProcessMetricsCollector.instance(),
                 env.getLocalResourceManager(),
-                /* collectWorkerDataInProfiler= */ false,
                 /* collectLoadAverage= */ false,
                 /* collectSystemNetworkUsage= */ false,
                 /* collectResourceManagerEstimation= */ false,
diff --git a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
index 6b56d9c..d12466b 100644
--- a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerTest.java
@@ -115,7 +115,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -141,7 +140,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -252,7 +250,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -336,7 +333,6 @@
             BugReporter.defaultInstance(),
             workerProcessMetricsCollector,
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ true,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -373,7 +369,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -504,7 +499,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -623,7 +617,8 @@
     profiler.stop();
 
     JsonProfile jsonProfile = new JsonProfile(new ByteArrayInputStream(buffer.toByteArray()));
-    List<TraceEvent> filteredEvents = removeCounterEvents(jsonProfile.getTraceEvents());
+    ImmutableList<TraceEvent> filteredEvents =
+        removeWorkerMetricsEvents(removeCounterEvents(jsonProfile.getTraceEvents()));
     assertThat(filteredEvents)
         .hasSize(
             4 /* thread names */
@@ -648,6 +643,20 @@
     return events.stream().filter(e -> !"C".equals(e.type())).collect(toImmutableList());
   }
 
+  private static ImmutableList<TraceEvent> removeWorkerMetricsEvents(List<TraceEvent> events) {
+    ImmutableList<TraceEvent> workerMetricsEvents =
+        events.stream()
+            .filter(e -> e.name().equals("Worker metrics collection"))
+            .collect(toImmutableList());
+    if (workerMetricsEvents.isEmpty()) {
+      return ImmutableList.copyOf(events);
+    }
+    long workerMetricsThreadId = workerMetricsEvents.get(0).threadId();
+    return events.stream()
+        .filter(e -> e.threadId() != workerMetricsThreadId)
+        .collect(toImmutableList());
+  }
+
   /**
    * Extracts all events for a given phase.
    *
@@ -708,7 +717,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -775,7 +783,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -812,7 +819,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -844,7 +850,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -884,7 +889,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,
@@ -923,7 +927,6 @@
             BugReporter.defaultInstance(),
             WorkerProcessMetricsCollector.instance(),
             ResourceManager.instance(),
-            /* collectWorkerDataInProfiler= */ false,
             /* collectLoadAverage= */ false,
             /* collectSystemNetworkUsage= */ false,
             /* collectResourceManagerEstimation= */ false,