focus: report rdep edge count change. RELNOTES: PiperOrigin-RevId: 599796128 Change-Id: Id0554d398a5c350a43d1608bd70377cd68838abf
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyframeFocuser.java b/src/main/java/com/google/devtools/build/skyframe/SkyframeFocuser.java index 991a969..e2a1f7d 100644 --- a/src/main/java/com/google/devtools/build/skyframe/SkyframeFocuser.java +++ b/src/main/java/com/google/devtools/build/skyframe/SkyframeFocuser.java
@@ -161,6 +161,9 @@ graph.shrinkNodeMap(); + long rdepEdgesBefore = 0; + long rdepEdgesAfter = 0; + for (SkyKey key : keptDeps) { // TODO: b/312819241 - Consider transforming IncrementalInMemoryNodeEntry only used for their // immutable states to an ImmutableDoneNodeEntry or NonIncrementalInMemoryNodeEntry for @@ -185,14 +188,22 @@ // reachable (hence, dirty-able) by the working set. // // This accounts for nearly 5% of 9+GB retained heap on a large server build. + rdepEdgesBefore += nodeEntry.getReverseDepsForDoneEntry().size(); for (SkyKey rdep : nodeEntry.getReverseDepsForDoneEntry()) { if (!keptRdeps.contains(rdep)) { nodeEntry.removeReverseDep(rdep); } } + + // This consolidation is also done in getReverseDepsForDoneEntry(), but make it + // explicit here (and it's idempotent, anyway). ReverseDepsUtility.consolidateData(nodeEntry); + rdepEdgesAfter += nodeEntry.getReverseDepsForDoneEntry().size(); } + eventHandler.handle( + Event.info(String.format("Rdep edges: %s -> %s", rdepEdgesBefore, rdepEdgesAfter))); + return new FocusResult(ImmutableSet.copyOf(keptRdeps), ImmutableSet.copyOf(keptDeps)); } }
diff --git a/src/test/shell/integration/focus_test.sh b/src/test/shell/integration/focus_test.sh index 8f06f4d..5988c1c 100755 --- a/src/test/shell/integration/focus_test.sh +++ b/src/test/shell/integration/focus_test.sh
@@ -128,12 +128,12 @@ out=$(bazel info "${PRODUCT_NAME}-genfiles")/${pkg}/out.txt bazel build //${pkg}:g - echo "a change" >> ${pkg}/in.txt bazel focus --files=${pkg}/in.txt >$TEST_log 2>&1 expect_log "Focusing on .\+ roots, .\+ leafs" expect_log "Nodes in reverse transitive closure from leafs: .\+" expect_log "Nodes in direct deps of reverse transitive closure: .\+" + expect_log "Rdep edges: .\+ -> .\+" expect_log "Heap: .\+MB -> .\+MB (.\+% reduction)" expect_log "Node count: .\+ -> .\+ (.\+% reduction)" } @@ -155,7 +155,6 @@ out=$(bazel info "${PRODUCT_NAME}-genfiles")/${pkg}/out.txt bazel build //${pkg}:g &> $TEST_log 2>&1 - echo "a change" >> ${pkg}/in.txt bazel focus --dump_keys --files=${pkg}/in.txt >$TEST_log 2>&1 expect_log "Focusing on .\+ roots, .\+ leafs"