Skip to content

Commit 78b721b

Browse files
committed
pkg: add chrome tracing events
We add some more chrome tracing events to various pkg related areas. In order to do this ergonomically, we inroduce some convenience wrappers for `Dune_stat` which appear to be quite pleasant to use. Signed-off-by: Ali Caglayan <[email protected]>
1 parent eef3831 commit 78b721b

File tree

13 files changed

+356
-24
lines changed

13 files changed

+356
-24
lines changed

src/dune_engine/sandbox.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,9 @@ let snapshot t =
183183
let create ~mode ~dune_stats ~rule_loc ~dirs ~deps ~rule_dir ~rule_digest =
184184
let event =
185185
Dune_stats.start dune_stats (fun () ->
186-
let cat = Some [ "create-sandbox" ] in
186+
let cat = [ "create-sandbox" ] in
187187
let name = Loc.to_file_colon_line rule_loc in
188-
let args = None in
188+
let args = [] in
189189
{ cat; name; args })
190190
in
191191
init ();

src/dune_pkg/archive_driver.ml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ let choose_for_filename_default_to_tar filename =
7272
;;
7373

7474
let extract t ~archive ~target =
75+
let open Dune_stats.Fiber.O in
76+
let& () =
77+
{ Dune_stats.name = "extract"
78+
; cat = [ "fetch" ]
79+
; args =
80+
[ "archive", `String (Path.to_string archive)
81+
; "target", `String (Path.to_string target)
82+
]
83+
}
84+
in
7585
let* () = Fiber.return () in
7686
let command = Lazy.force t.command in
7787
let prefix = Path.basename target in

src/dune_pkg/fetch.ml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -253,19 +253,17 @@ let fetch ~unpack ~checksum ~target ~url:(url_loc, url) =
253253
let event =
254254
Dune_stats.(
255255
start (global ()) (fun () ->
256-
{ cat = None
256+
{ cat = [ "fetch" ]
257257
; name = label
258258
; args =
259-
(let args =
260-
[ "url", `String (OpamUrl.to_string url)
261-
; "target", `String (Path.to_string target)
262-
]
263-
in
264-
Some
265-
(match checksum with
266-
| None -> args
267-
| Some checksum ->
268-
("checksum", `String (Checksum.to_string checksum)) :: args))
259+
List.concat
260+
[ Option.map checksum ~f:(fun checksum ->
261+
"checksum", `String (Checksum.to_string checksum))
262+
|> Option.to_list
263+
; [ "url", `String (OpamUrl.to_string url)
264+
; "target", `String (Path.to_string target)
265+
]
266+
]
269267
}))
270268
in
271269
let unsupported_backend s =

src/dune_pkg/lock_dir.ml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1457,6 +1457,16 @@ module Write_disk = struct
14571457
~(files : File_entry.t Package_version.Map.Multi.t Package_name.Map.t)
14581458
lock_dir
14591459
=
1460+
let open Dune_stats.Not_a_fiber.O in
1461+
let& () =
1462+
{ cat = [ "lock_dir" ]
1463+
; name = "write_lock_dir"
1464+
; args =
1465+
[ "lock_dir", `String (Path.to_string lock_dir_path_external)
1466+
; "package_count", `Int (Package_name.Map.cardinal files)
1467+
]
1468+
}
1469+
in
14601470
let lock_dir_hidden =
14611471
(* The original lockdir path with the lockdir renamed to begin with a ".". *)
14621472
let hidden_basename = sprintf ".%s" (Path.basename lock_dir_path_external) in
@@ -1710,7 +1720,17 @@ module Load_immediate = Make_load (struct
17101720
end)
17111721

17121722
let read_disk = Load_immediate.load
1713-
let read_disk_exn = Load_immediate.load_exn
1723+
1724+
let read_disk_exn path =
1725+
let open Dune_stats.Not_a_fiber.O in
1726+
let& () =
1727+
{ Dune_stats.name = "load_lock_dir"
1728+
; cat = [ "lock_dir" ]
1729+
; args = [ "lock_dir", `String (Path.to_string path) ]
1730+
}
1731+
in
1732+
Load_immediate.load_exn path
1733+
;;
17141734

17151735
let transitive_dependency_closure t ~platform start =
17161736
let missing_packages =

src/dune_pkg/opam_repo.ml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,13 @@ let all_packages_versions_map ts opam_package_name =
243243
;;
244244

245245
let load_all_versions_by_keys ts =
246+
let open Dune_stats.Fiber.O in
247+
let& () =
248+
{ Dune_stats.name = "load_all_versions_by_keys"
249+
; cat = [ "opam_repo" ]
250+
; args = [ "version_count", `Int (OpamPackage.Version.Map.cardinal ts) ]
251+
}
252+
in
246253
let from_git, from_dirs =
247254
OpamPackage.Version.Map.values ts
248255
|> List.partition_map ~f:(fun (repo, (pkg : Key.t)) ->

src/dune_pkg/opam_solver.ml

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,15 @@ module Context = struct
290290
| Found p -> Some p)
291291
;;
292292

293-
let repo_candidate t name =
294-
let versions = Opam_repo.all_packages_versions_map t.repos name in
293+
let repo_candidate t package_name =
294+
let open Dune_stats.Fiber.O in
295+
let& () =
296+
{ Dune_stats.name = "repo_candidate"
297+
; cat = [ "solver" ]
298+
; args = [ "package", `String (OpamPackage.Name.to_string package_name) ]
299+
}
300+
in
301+
let versions = Opam_repo.all_packages_versions_map t.repos package_name in
295302
let rejected, available =
296303
OpamPackage.Version.Map.fold
297304
(fun version (repo, key) (rejected, available) ->
@@ -305,7 +312,7 @@ module Context = struct
305312
let+ resolved = Opam_repo.load_all_versions_by_keys available in
306313
Table.add_exn
307314
t.expanded_packages
308-
(Package_name.of_opam_package_name name)
315+
(Package_name.of_opam_package_name package_name)
309316
(OpamPackage.Version.Map.cardinal resolved);
310317
let available =
311318
OpamPackage.Version.Map.values resolved
@@ -786,6 +793,8 @@ module Solver = struct
786793
(* Starting from [root_req], explore all the feeds and implementations we
787794
might need, adding all of them to [sat_problem]. *)
788795
let build_problem context root_req sat ~max_avoids ~dummy_impl =
796+
let open Dune_stats.Fiber.O in
797+
let& () = { Dune_stats.cat = [ "solver" ]; name = "build_problem"; args = [] } in
789798
(* For each (iface, source) we have a list of implementations. *)
790799
let impl_cache = Fiber_cache.create (module Input.Role) in
791800
let conflict_classes = Conflict_classes.create () in
@@ -955,6 +964,10 @@ module Solver = struct
955964
;;
956965

957966
let do_solve context ~closest_match root_req =
967+
let open Dune_stats.Fiber.O in
968+
let& () =
969+
{ Dune_stats.name = "do_solve_with_retries"; cat = [ "solver" ]; args = [] }
970+
in
958971
do_solve context ~closest_match ~max_avoids:(Some 0) root_req
959972
>>= function
960973
| Some sels ->
@@ -1436,6 +1449,13 @@ module Solver = struct
14361449
end
14371450

14381451
let solve_package_list packages ~context =
1452+
let open Dune_stats.Fiber.O in
1453+
let& () =
1454+
{ Dune_stats.name = "solve_package_list"
1455+
; cat = [ "solver" ]
1456+
; args = [ "package_count", `Int (List.length packages) ]
1457+
}
1458+
in
14391459
Fiber.collect_errors (fun () ->
14401460
(* [Solver.solve] returns [Error] when it's unable to find a solution to
14411461
the dependencies, but can also raise exceptions, for example if opam

src/dune_pkg/rev_store.ml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,13 @@ module Entry = struct
717717
end
718718

719719
let fetch_allow_failure repo ~url obj =
720+
let open Dune_stats.Fiber.O in
721+
let& () =
722+
{ Dune_stats.name = "fetch"
723+
; cat = [ "rev_store" ]
724+
; args = [ "url", `String url; "object", `String (Object.to_hex obj) ]
725+
}
726+
in
720727
with_mutex repo obj ~f:(fun () ->
721728
object_exists repo obj
722729
>>= function
@@ -922,6 +929,13 @@ module At_rev = struct
922929
;;
923930

924931
let rec of_rev repo ~revision =
932+
let open Dune_stats.Fiber.O in
933+
let& () =
934+
{ Dune_stats.name = "of_rev"
935+
; cat = [ "rev_store" ]
936+
; args = [ "revision", `String (Object.to_hex revision) ]
937+
}
938+
in
925939
let* files, submodules = files_and_submodules repo revision in
926940
let commit_paths = path_commit_map submodules in
927941
let+ files =
@@ -1021,6 +1035,16 @@ module At_rev = struct
10211035
}
10221036
~target
10231037
=
1038+
let open Dune_stats.Fiber.O in
1039+
let& () =
1040+
{ Dune_stats.name = "check_out"
1041+
; cat = [ "rev_store" ]
1042+
; args =
1043+
[ "revision", `String (Object.to_hex revision)
1044+
; "target", `String (Path.to_string target)
1045+
]
1046+
}
1047+
in
10241048
let git = Lazy.force Vcs.git in
10251049
let temp_dir =
10261050
Temp_dir.dir_for_target ~target ~prefix:"rev-store" ~suffix:(Object.to_hex revision)

src/dune_pkg/sys_poll.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ let sys_ocaml_version ~path =
226226
let make_lazy f = Fiber.Lazy.create f |> Fiber.Lazy.force
227227

228228
let make ~path =
229+
let open Dune_stats.Not_a_fiber.O in
230+
let& () = { Dune_stats.name = "make"; cat = [ "sys_poll" ]; args = [] } in
229231
let arch = make_lazy (fun () -> arch ~path) in
230232
let os = make_lazy (fun () -> os ~path) in
231233
let os_release_fields = lazy (os_release_fields ()) in

src/dune_rules/lock_dir.ml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,17 @@ let get_with_path ctx =
208208
[ "context", Context_name.to_dyn ctx ]
209209
in
210210
let* () = Build_system.build_dir path in
211-
Load.load path
212-
>>= function
211+
let* lock_dir =
212+
let open Dune_stats.Memo.O in
213+
let& () =
214+
{ Dune_stats.name = "load_lock_dir"
215+
; cat = [ "lock_dir" ]
216+
; args = [ "lock_dir", `String (Path.to_string path) ]
217+
}
218+
in
219+
Load.load path
220+
in
221+
match lock_dir with
213222
| Error e -> Memo.return (Error e)
214223
| Ok lock_dir ->
215224
let+ workspace_lock_dir = get_workspace_lock_dir ctx in

src/dune_stats/dune

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
(foreign_stubs
44
(language c)
55
(names dune_stats_stubs))
6-
(libraries stdune chrome_trace spawn unix))
6+
(libraries stdune chrome_trace spawn unix fiber memo))

0 commit comments

Comments
 (0)