Move critical path computation out of runtime ... so that we can use it for posting a machine-readable form of the critical path as build metric in the build event stream. Closes #16611. PiperOrigin-RevId: 522304794 Change-Id: Ieb7e1dbc1a4a330341a5fd4f32eae8bc5edc5390
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 91ab0ad..39c404d 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -349,6 +349,7 @@ "//src/main/java/com/google/devtools/build/lib/jni", "//src/main/java/com/google/devtools/build/lib/metrics:event", "//src/main/java/com/google/devtools/build/lib/metrics:garbage-collection-metrics-util", + "//src/main/java/com/google/devtools/build/lib/metrics/criticalpath", "//src/main/java/com/google/devtools/build/lib/packages", "//src/main/java/com/google/devtools/build/lib/packages/semantics", "//src/main/java/com/google/devtools/build/lib/pkgcache",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/SpawnExecutedEvent.java b/src/main/java/com/google/devtools/build/lib/actions/SpawnExecutedEvent.java index 29ad0f0..dfb8aa0 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/SpawnExecutedEvent.java +++ b/src/main/java/com/google/devtools/build/lib/actions/SpawnExecutedEvent.java
@@ -58,9 +58,10 @@ /** * This event is fired to differentiate actions with multiple spawns that are run sequentially * versus parallel. An example of a use case of why this would be important is if we have flaky - * tests. We want to tell the {@link com.google.devtools.build.lib.runtime.CriticalPathComponent} - * that all the failed test spawns should have their Duration metrics aggregated so the test - * runtime matches the runtime of the entire CriticalPathComponent. + * tests. We want to tell the {@link + * com.google.devtools.build.lib.metrics.criticalpath.CriticalPathComponent} that all the failed + * test spawns should have their Duration metrics aggregated so the test runtime matches the + * runtime of the entire CriticalPathComponent. */ public static final class ChangePhase implements ExtendedEventHandler.Postable { private final Action action;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/AggregatedCriticalPath.java b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/AggregatedCriticalPath.java similarity index 98% rename from src/main/java/com/google/devtools/build/lib/runtime/AggregatedCriticalPath.java rename to src/main/java/com/google/devtools/build/lib/metrics/criticalpath/AggregatedCriticalPath.java index bd38d02..a976ce4 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/AggregatedCriticalPath.java +++ b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/AggregatedCriticalPath.java
@@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.runtime; +package com.google.devtools.build.lib.metrics.criticalpath; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList;
diff --git a/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/BUILD b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/BUILD new file mode 100644 index 0000000..70fc413 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/BUILD
@@ -0,0 +1,28 @@ +load("@rules_java//java:defs.bzl", "java_library") + +package( + default_applicable_licenses = ["//:license"], + default_visibility = ["//src:__subpackages__"], +) + +filegroup( + name = "srcs", + srcs = glob(["*"]), + visibility = ["//src:__subpackages__"], +) + +java_library( + name = "criticalpath", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/actions:artifacts", + "//src/main/java/com/google/devtools/build/lib/clock", + "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/concurrent", + "//src/main/java/com/google/devtools/build/lib/skyframe/rewinding:action_rewound_event", + "//third_party:flogger", + "//third_party:guava", + "//third_party:jsr305", + ], +)
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComponent.java similarity index 99% rename from src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java rename to src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComponent.java index c69619f..8a6a98b 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComponent.java +++ b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComponent.java
@@ -11,7 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.runtime; + +package com.google.devtools.build.lib.metrics.criticalpath; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.actions.Action;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComputer.java similarity index 99% rename from src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java rename to src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComputer.java index 6479de7..f9f8464 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java +++ b/src/main/java/com/google/devtools/build/lib/metrics/criticalpath/CriticalPathComputer.java
@@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.runtime; +package com.google.devtools.build.lib.metrics.criticalpath; import com.google.common.base.Preconditions; import com.google.common.collect.Comparators; @@ -221,7 +221,7 @@ public void discoverInputs(DiscoveredInputsEvent event) throws InterruptedException { CriticalPathComponent stats = tryAddComponent(createComponent(event.getAction(), event.getStartTimeNanos())); - stats.addSpawnResult(event.getMetrics(), null, "", /* wasRemote=*/ false); + stats.addSpawnResult(event.getMetrics(), null, "", /* wasRemote= */ false); stats.changePhase(); }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildSummaryStatsModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildSummaryStatsModule.java index f051d65..9a1fc76 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BuildSummaryStatsModule.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildSummaryStatsModule.java
@@ -31,6 +31,9 @@ import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.ExecutorBuilder; +import com.google.devtools.build.lib.metrics.criticalpath.AggregatedCriticalPath; +import com.google.devtools.build.lib.metrics.criticalpath.CriticalPathComponent; +import com.google.devtools.build.lib.metrics.criticalpath.CriticalPathComputer; import com.google.devtools.build.lib.profiler.Profiler; import com.google.devtools.build.lib.profiler.ProfilerTask; import com.google.devtools.build.lib.profiler.SilentCloseable;
diff --git a/src/test/java/com/google/devtools/build/lib/metrics/BUILD b/src/test/java/com/google/devtools/build/lib/metrics/BUILD index 5d3137a..64979a3 100644 --- a/src/test/java/com/google/devtools/build/lib/metrics/BUILD +++ b/src/test/java/com/google/devtools/build/lib/metrics/BUILD
@@ -9,7 +9,9 @@ filegroup( name = "srcs", testonly = 0, - srcs = glob(["*"]), + srcs = glob(["*"]) + [ + "//src/main/java/com/google/devtools/build/lib/metrics/criticalpath:srcs", + ], visibility = ["//src:__subpackages__"], )