Skip to content

Commit 9c0d65b

Browse files
authored
perf: add names to source tree events (ocaml#10884)
* perf: better names for trace events Signed-off-by: Javier Chávarri <[email protected]>
1 parent 45976a0 commit 9c0d65b

File tree

11 files changed

+47
-26
lines changed

11 files changed

+47
-26
lines changed

bin/target.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ let all_direct_targets dir =
5353
Source_tree_map_reduce.map_reduce
5454
root
5555
~traverse:Source_dir_status.Set.all
56+
~trace_event_name:"All direct targets"
5657
~f:(fun dir ->
5758
Dune_engine.Load_rules.load_dir
5859
~dir:

doc/changes/10884.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Add names to source tree events in performance traces (#10884, @jchavarri)

src/dune_rules/alias_rec.ml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ include Alias_builder.Alias_rec (struct
7070
>>= function
7171
| None -> Action_builder.return Alias_builder.Alias_status.Not_defined
7272
| Some src_dir ->
73-
Map_reduce.map_reduce src_dir ~traverse:Source_dir_status.Set.normal_only ~f
73+
Map_reduce.map_reduce
74+
src_dir
75+
~traverse:Source_dir_status.Set.normal_only
76+
~trace_event_name:"Alias builder"
77+
~f
7478
;;
7579
end)

src/dune_rules/dune_load.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ let load () =
6464
in
6565
Memo.return (projects, dune_files)
6666
in
67-
Source_tree_map_reduce.map_reduce ~traverse:Source_dir_status.Set.all ~f
67+
Source_tree_map_reduce.map_reduce
68+
~traverse:Source_dir_status.Set.all
69+
~trace_event_name:"Dune load"
70+
~f
6871
in
6972
let projects = Appendable_list.to_list_rev projects in
7073
let packages, vendored_packages =

src/dune_rules/foreign_rules.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ let include_dir_flags ~expander ~dir ~include_dirs =
164164
Source_tree_map_reduce.map_reduce
165165
dir
166166
~traverse:Source_dir_status.Set.all
167+
~trace_event_name:"Foreign rules"
167168
~f:(fun t ->
168169
let deps =
169170
let dir =

src/dune_rules/source_deps.ml

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,21 @@ let files dir =
1313
| None -> Memo.return (Dep.Set.empty, Path.Set.empty)
1414
| Some dir ->
1515
let+ files, empty_directories =
16-
Map_reduce.map_reduce dir ~traverse:Source_dir_status.Set.all ~f:(fun dir ->
17-
let path = Path.append_source prefix_with @@ Source_tree.Dir.path dir in
18-
let files =
19-
Source_tree.Dir.filenames dir
20-
|> String.Set.to_list
21-
|> Path.Set.of_list_map ~f:(fun fn -> Path.relative path fn)
22-
in
23-
let empty_directories =
24-
if Path.Set.is_empty files then Path.Set.singleton path else Path.Set.empty
25-
in
26-
Memo.return (files, empty_directories))
16+
Map_reduce.map_reduce
17+
dir
18+
~traverse:Source_dir_status.Set.all
19+
~trace_event_name:"Source deps"
20+
~f:(fun dir ->
21+
let path = Path.append_source prefix_with @@ Source_tree.Dir.path dir in
22+
let files =
23+
Source_tree.Dir.filenames dir
24+
|> String.Set.to_list
25+
|> Path.Set.of_list_map ~f:(fun fn -> Path.relative path fn)
26+
in
27+
let empty_directories =
28+
if Path.Set.is_empty files then Path.Set.singleton path else Path.Set.empty
29+
in
30+
Memo.return (files, empty_directories))
2731
in
2832
Dep.Set.of_source_files ~files ~empty_directories, files
2933
;;

src/dune_rules/source_tree.ml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ module Dir = struct
422422
open M.O
423423

424424
let map_reduce =
425-
let rec map_reduce t ~traverse ~f =
425+
let rec map_reduce t ~traverse ~trace_event_name ~f =
426426
let must_traverse = Source_dir_status.Map.find traverse t.status in
427427
match must_traverse with
428428
| false -> M.return Outcome.empty
@@ -431,7 +431,7 @@ module Dir = struct
431431
and+ in_sub_dirs =
432432
M.List.map (Filename.Map.values t.sub_dirs) ~f:(fun s ->
433433
let* t = M.of_memo (sub_dir_as_t s) in
434-
map_reduce t ~traverse ~f)
434+
map_reduce t ~traverse ~trace_event_name ~f)
435435
in
436436
List.fold_left in_sub_dirs ~init:here ~f:Outcome.combine
437437
in
@@ -440,17 +440,17 @@ module Dir = struct
440440
(match Dune_stats.global () with
441441
| None -> map_reduce
442442
| Some stats ->
443-
fun t ~traverse ~f ->
443+
fun t ~traverse ~trace_event_name ~f ->
444444
let start = Unix.gettimeofday () in
445-
let+ res = map_reduce t ~traverse ~f in
445+
let+ res = map_reduce t ~traverse ~trace_event_name ~f in
446446
let event =
447447
let stop = Unix.gettimeofday () in
448448
let module Event = Chrome_trace.Event in
449449
let module Timestamp = Event.Timestamp in
450450
let dur = Timestamp.of_float_seconds (stop -. start) in
451451
let common =
452452
Event.common_fields
453-
~name:"Source tree scan"
453+
~name:(trace_event_name ^ ": " ^ Path.Source.to_string t.path)
454454
~ts:(Timestamp.of_float_seconds start)
455455
()
456456
in
@@ -460,7 +460,8 @@ module Dir = struct
460460
Dune_stats.emit stats event;
461461
res)
462462
in
463-
fun t ~traverse ~f -> (Lazy.force impl) t ~traverse ~f
463+
fun t ~traverse ~trace_event_name ~f ->
464+
(Lazy.force impl) t ~traverse ~trace_event_name ~f
464465
;;
465466
end
466467
end
@@ -469,15 +470,15 @@ module Make_map_reduce_with_progress (M : Memo.S) (Outcome : Monoid) = struct
469470
open M.O
470471
include Dir.Make_map_reduce (M) (Outcome)
471472

472-
let map_reduce ~traverse ~f =
473+
let map_reduce ~traverse ~trace_event_name ~f =
473474
let* root = M.of_memo (root ()) in
474475
let nb_path_visited = ref 0 in
475476
let overlay =
476477
Console.Status_line.add_overlay
477478
(Live (fun () -> Pp.textf "Scanned %i directories" !nb_path_visited))
478479
in
479480
let+ res =
480-
map_reduce root ~traverse ~f:(fun dir ->
481+
map_reduce root ~traverse ~trace_event_name ~f:(fun dir ->
481482
incr nb_path_visited;
482483
if !nb_path_visited mod 100 = 0 then Console.Status_line.refresh ();
483484
f dir)

src/dune_rules/source_tree.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ module Dir : sig
1919
val map_reduce
2020
: t
2121
-> traverse:Source_dir_status.Set.t
22+
-> trace_event_name:string
2223
-> f:(t -> Outcome.t M.t)
2324
-> Outcome.t M.t
2425
end
@@ -41,6 +42,7 @@ module Make_map_reduce_with_progress (M : Memo.S) (Outcome : Monoid) : sig
4142
(** Traverse starting from the root and report progress in the status line *)
4243
val map_reduce
4344
: traverse:Source_dir_status.Set.t
45+
-> trace_event_name:string
4446
-> f:(Dir.t -> Outcome.t M.t)
4547
-> Outcome.t M.t
4648
end

src/dune_rules/utop.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ let libs_and_ppx_under_dir sctx ~db ~dir =
118118
Source_tree_map_reduce.map_reduce
119119
dir
120120
~traverse:Source_dir_status.Set.all
121+
~trace_event_name:"Utop rules loading"
121122
~f:(fun dir ->
122123
let dir =
123124
Path.Build.append_source

src/upgrader/dune_upgrader.ml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,13 @@ let upgrade () =
369369
type t = Source_tree.Dir.t * project_version
370370
end))
371371
in
372-
M.map_reduce ~traverse:Source_dir_status.Set.normal_only ~f:(fun dir ->
373-
let project = Source_tree.Dir.project dir in
374-
let detected_version = detect_project_version project dir in
375-
Memo.return (Appendable_list.singleton (dir, detected_version))))
372+
M.map_reduce
373+
~traverse:Source_dir_status.Set.normal_only
374+
~trace_event_name:"Upgrader"
375+
~f:(fun dir ->
376+
let project = Source_tree.Dir.project dir in
377+
let detected_version = detect_project_version project dir in
378+
Memo.return (Appendable_list.singleton (dir, detected_version))))
376379
>>| Appendable_list.to_list
377380
in
378381
let v1_updates = ref false in

0 commit comments

Comments
 (0)