Skip to content

Commit be63eee

Browse files
joelebacopybara-github
authored andcommitted
Add explicit execution_phase_time_in_ms to TimingMetrics.
PiperOrigin-RevId: 552459757 Change-Id: Iefd62dce7af2bf3c0a0802f90c3347bb2047989f
1 parent 0763dd0 commit be63eee

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,9 @@ message BuildMetrics {
965965
PackageMetrics package_metrics = 4;
966966

967967
message TimingMetrics {
968+
// For Skymeld,
969+
// analysis_phase_time_in_ms + execution_phase_time_in_ms >= wall_time_in_ms
970+
//
968971
// The CPU time in milliseconds consumed during this build.
969972
int64 cpu_time_in_ms = 1;
970973
// The elapsed wall time in milliseconds during this build.
@@ -973,6 +976,10 @@ message BuildMetrics {
973976
// When analysis and execution phases are interleaved, this measures the
974977
// elapsed time from the first analysis work to the last.
975978
int64 analysis_phase_time_in_ms = 3;
979+
// The elapsed wall time in milliseconds during the execution phase.
980+
// When analysis and execution phases are interleaved, this measures the
981+
// elapsed time from the first action execution to the last.
982+
int64 execution_phase_time_in_ms = 4;
976983
}
977984
TimingMetrics timing_metrics = 5;
978985

src/main/java/com/google/devtools/build/lib/metrics/MetricsCollector.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class MetricsCollector {
9999
// TopLevelTargetExecutionStartedEvent. This AtomicBoolean is so that we only account for the
100100
// build once.
101101
private final AtomicBoolean buildAccountedFor;
102+
private long executionStartMillis;
102103

103104
@CanIgnoreReturnValue
104105
private MetricsCollector(
@@ -157,6 +158,10 @@ public void onAnalysisPhaseComplete(AnalysisPhaseCompleteEvent event) {
157158
}
158159
}
159160

161+
private void markExecutionPhaseStarted() {
162+
executionStartMillis = BlazeClock.instance().currentTimeMillis();
163+
}
164+
160165
@SuppressWarnings("unused")
161166
@Subscribe
162167
public synchronized void logAnalysisGraphStats(AnalysisGraphStatsEvent event) {
@@ -175,13 +180,17 @@ public synchronized void logAnalysisGraphStats(AnalysisGraphStatsEvent event) {
175180
@SuppressWarnings("unused")
176181
@Subscribe
177182
public synchronized void logExecutionStartingEvent(ExecutionStartingEvent event) {
183+
markExecutionPhaseStarted();
178184
numBuilds.getAndIncrement();
179185
}
180186

187+
// Skymeld-specific: we don't have an ExecutionStartingEvent for skymeld, so we have to use
188+
// TopLevelTargetExecutionStartedEvent
181189
@Subscribe
182-
public synchronized void accountForBuild(
190+
public synchronized void handleExecutionPhaseStart(
183191
@SuppressWarnings("unused") TopLevelTargetPendingExecutionEvent event) {
184192
if (buildAccountedFor.compareAndSet(/*expectedValue=*/ false, /*newValue=*/ true)) {
193+
markExecutionPhaseStarted();
185194
numBuilds.getAndIncrement();
186195
}
187196
}
@@ -255,6 +264,8 @@ public void actionResultReceived(ActionResultReceivedEvent event) {
255264
@SuppressWarnings("unused")
256265
@Subscribe
257266
public void onExecutionComplete(ExecutionFinishedEvent event) {
267+
timingMetrics.setExecutionPhaseTimeInMs(
268+
BlazeClock.instance().currentTimeMillis() - executionStartMillis);
258269
artifactMetrics
259270
.setSourceArtifactsRead(event.sourceArtifactsRead())
260271
.setOutputArtifactsSeen(event.outputArtifactsSeen())

src/test/java/com/google/devtools/build/lib/metrics/MetricsCollectorTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,13 @@ public void testAnalysisTimeInMs() throws Exception {
519519
assertThat(buildMetrics.getTimingMetrics().getAnalysisPhaseTimeInMs()).isGreaterThan(0);
520520
}
521521

522+
@Test
523+
public void testExecutionTimeInMs() throws Exception {
524+
buildTarget("//foo:foo");
525+
BuildMetrics buildMetrics = buildMetricsEventListener.event.getBuildMetrics();
526+
assertThat(buildMetrics.getTimingMetrics().getExecutionPhaseTimeInMs()).isGreaterThan(0);
527+
}
528+
522529
@Test
523530
public void testUsedHeapSizePostBuild() throws Exception {
524531
// TODO(bazel-team): Fix recording used heap size on Windows.

0 commit comments

Comments
 (0)