Skip to content

Commit 3d58523

Browse files
janakdrcopybara-github
authored andcommitted
Export used gc when memory profiling enabled.
RELNOTES: The used_heap_size_post_build field in BEP is populated when the --memory_profile flag is set PiperOrigin-RevId: 381924129
1 parent a95c7b7 commit 3d58523

File tree

5 files changed

+20
-3
lines changed

5 files changed

+20
-3
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,8 +861,8 @@ message BuildMetrics {
861861

862862
message MemoryMetrics {
863863
// Size of the JVM heap post build in bytes. This is only collected if
864-
// --bep_publish_used_heap_size_post_build is set,
865-
// since it forces a full GC.
864+
// --bep_publish_used_heap_size_post_build or --memory_profile is set, since
865+
// it forces a full GC.
866866
int64 used_heap_size_post_build = 1;
867867

868868
// Size of the peak JVM heap size in bytes post GC. Note that this reports 0

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.google.devtools.build.lib.clock.BlazeClock.NanosToMillisSinceEpochConverter;
4141
import com.google.devtools.build.lib.metrics.MetricsModule.Options;
4242
import com.google.devtools.build.lib.metrics.PostGCMemoryUseRecorder.PeakHeap;
43+
import com.google.devtools.build.lib.profiler.MemoryProfiler;
4344
import com.google.devtools.build.lib.profiler.Profiler;
4445
import com.google.devtools.build.lib.runtime.CommandEnvironment;
4546
import com.google.devtools.build.lib.runtime.SpawnStats;
@@ -249,6 +250,8 @@ private MemoryMetrics createMemoryMetrics() {
249250
MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
250251
usedHeapSizePostBuild = memBean.getHeapMemoryUsage().getUsed();
251252
memoryMetrics.setUsedHeapSizePostBuild(usedHeapSizePostBuild);
253+
} else if (MemoryProfiler.instance().getHeapUsedMemoryAtFinish() > 0) {
254+
memoryMetrics.setUsedHeapSizePostBuild(MemoryProfiler.instance().getHeapUsedMemoryAtFinish());
252255
}
253256
PostGCMemoryUseRecorder.get()
254257
.getPeakPostGcHeap()

src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.google.devtools.build.lib.analysis.NoBuildRequestFinishedEvent;
2222
import com.google.devtools.build.lib.events.Event;
2323
import com.google.devtools.build.lib.packages.Target;
24+
import com.google.devtools.build.lib.profiler.ProfilePhase;
25+
import com.google.devtools.build.lib.profiler.Profiler;
2426
import com.google.devtools.build.lib.query2.common.AbstractBlazeQueryEnvironment;
2527
import com.google.devtools.build.lib.query2.common.UniverseScope;
2628
import com.google.devtools.build.lib.query2.engine.QueryEnvironment;
@@ -83,6 +85,11 @@ public BlazeCommandResult exec(CommandEnvironment env, OptionsParsingResult opti
8385
/* showProgress= */ true,
8486
/* id= */ null));
8587
BlazeCommandResult result = execInternal(env, options);
88+
try {
89+
Profiler.instance().markPhase(ProfilePhase.FINISH);
90+
} catch (InterruptedException e) {
91+
return reportAndCreateInterruptResult(env, "Profile finish operation interrupted");
92+
}
8693
env.getEventBus()
8794
.post(
8895
new NoBuildRequestFinishedEvent(

src/test/shell/bazel/bazel_build_event_stream_test.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ EOF
9292

9393
#### TESTS #############################################################
9494

95-
9695
function test_fetch_test() {
9796
# We expect the "fetch" command to generate at least a minimally useful
9897
# build-event stream.

src/test/shell/integration/build_event_stream_test.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,4 +1371,12 @@ EOF
13711371
|| fail "Couldn't find top-level named set"
13721372
}
13731373

1374+
function test_memory_profile() {
1375+
bazel build --build_event_text_file=bep.txt --memory_profile=/dev/null \
1376+
>& "$TEST_log" || fail "Expected success"
1377+
cp bep.txt "$TEST_log" || fail "cp failed"
1378+
# Non-zero used heap size.
1379+
expect_log 'used_heap_size_post_build: [1-9]'
1380+
}
1381+
13741382
run_suite "Integration tests for the build event stream"

0 commit comments

Comments
 (0)