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"