Skip to content

Commit 0f96d10

Browse files
committed
Add stats printing for ReactiveLiveness collections
Print roots, edges, and live (fixpoint) stats in timing mode. Example output (benchmark, cold start): ReactiveLiveness collection stats: roots: recv=156200 emit=156200 len=16203 edges: recv=445363 emit=445363 len=35550 live (fixpoint): recv=601563 emit=107025 len=31903 Key insights: - fixpoint receives 601,563 updates (roots + edges combined) - fixpoint emits 107,025 updates (BFS expansion deltas) - 31,903 positions are live (17,500 decls + type positions) - On cache hit (run 2), counters stay same = zero new work
1 parent 6db81bc commit 0f96d10

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

analysis/reanalyze/src/ReactiveLiveness.ml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,15 @@ let create ~(merged : ReactiveMerge.t) : t =
113113
(* Step 4: Compute fixpoint - all reachable positions from roots *)
114114
let live = Reactive.fixpoint ~init:all_roots ~edges () in
115115
{live; edges; roots = all_roots}
116+
117+
(** Print reactive collection update statistics *)
118+
let print_stats ~(t : t) : unit =
119+
let print name (c : _ Reactive.t) =
120+
let s = Reactive.stats c in
121+
Printf.eprintf " %s: recv=%d emit=%d len=%d\n" name s.updates_received
122+
s.updates_emitted (Reactive.length c)
123+
in
124+
Printf.eprintf "ReactiveLiveness collection stats:\n";
125+
print "roots" t.roots;
126+
print "edges" t.edges;
127+
print "live (fixpoint)" t.live

analysis/reanalyze/src/ReactiveLiveness.mli

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ val create : merged:ReactiveMerge.t -> t
1717
- roots: initial live positions (annotated + externally referenced)
1818
1919
Updates automatically when any input changes. *)
20+
21+
val print_stats : t:t -> unit
22+
(** Print update statistics for liveness collections (roots, edges, live fixpoint) *)

analysis/reanalyze/src/Reanalyze.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ let shuffle_list lst =
245245
Array.to_list arr
246246

247247
let runAnalysis ~dce_config ~cmtRoot ~reactive_collection ~reactive_merge
248-
~reactive_liveness:_ ~reactive_solver =
248+
~reactive_liveness ~reactive_solver =
249249
(* Map: process each file -> list of file_data *)
250250
let {dce_data_list; exception_results} =
251251
processCmtFiles ~config:dce_config ~cmtRoot ~reactive_collection
@@ -415,6 +415,9 @@ let runAnalysis ~dce_config ~cmtRoot ~reactive_collection ~reactive_merge
415415
((t1 -. t0) *. 1000.0)
416416
((t2 -. t1) *. 1000.0)
417417
num_dead num_live (List.length all_issues);
418+
(match reactive_liveness with
419+
| Some liveness -> ReactiveLiveness.print_stats ~t:liveness
420+
| None -> ());
418421
ReactiveSolver.print_stats ~t:solver);
419422
Some (AnalysisResult.add_issues AnalysisResult.empty all_issues)
420423
| None ->

0 commit comments

Comments
 (0)