Reference the JSON profile as build tool log in the BEP.
RELNOTES: None
Closes #9159.
PiperOrigin-RevId: 263132427
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 f906215..f2c55b7 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
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.buildtool.BuildRequest;
import com.google.devtools.build.lib.buildtool.buildevent.BuildCompleteEvent;
import com.google.devtools.build.lib.buildtool.buildevent.ExecutionStartingEvent;
+import com.google.devtools.build.lib.buildtool.buildevent.ProfilerStartedEvent;
import com.google.devtools.build.lib.clock.BlazeClock;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.Reporter;
@@ -31,6 +32,8 @@
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.profiler.SilentCloseable;
import com.google.devtools.build.lib.skyframe.ExecutionFinishedEvent;
+import com.google.devtools.build.lib.vfs.Path;
+import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -54,6 +57,7 @@
private long executionStartMillis;
private long executionEndMillis;
private SpawnStats spawnStats;
+ private Path profilePath;
@Override
public void beforeCommand(CommandEnvironment env) {
@@ -89,6 +93,11 @@
}
@Subscribe
+ public void profileStarting(ProfilerStartedEvent event) {
+ this.profilePath = event.getProfilePath();
+ }
+
+ @Subscribe
public void executionPhaseFinish(@SuppressWarnings("unused") ExecutionFinishedEvent event) {
executionEndMillis = BlazeClock.instance().currentTimeMillis();
}
@@ -137,6 +146,20 @@
}
}
}
+ if (profilePath != null) {
+ // This leads to missing the afterCommand profiles of the other modules in the profile.
+ // Since the BEP currently shuts down at the BuildCompleteEvent, we cannot just move posting
+ // the BuildToolLogs to afterCommand of this module.
+ try {
+ Profiler.instance().stop();
+ event
+ .getResult()
+ .getBuildToolLogCollection()
+ .addLocalFile(profilePath.getBaseName(), profilePath);
+ } catch (IOException e) {
+ reporter.handle(Event.error("Error while writing profile file: " + e.getMessage()));
+ }
+ }
String spawnSummary = spawnStats.getSummary();
if (statsSummary) {
@@ -167,6 +190,7 @@
.addDirectValue("process stats", spawnSummary.getBytes(StandardCharsets.UTF_8));
} finally {
criticalPathComputer = null;
+ profilePath = null;
}
}
}