Skip to content

Commit 2b8bc92

Browse files
committed
perf: don't recreate Pkg_rules.DB values
Before: ``` [ocaml-cohttp]$ hyperfine "dune build" Benchmark 1: dune build Time (mean ± σ): 1.645 s ± 0.063 s [User: 1.390 s, System: 0.246 s] Range (min … max): 1.580 s … 1.795 s 10 runs ``` After: ``` [ocaml-cohttp]$ hyperfine "dune build" Benchmark 1: dune build Time (mean ± σ): 974.0 ms ± 18.6 ms [User: 720.1 ms, System: 249.2 ms] Range (min … max): 953.6 ms … 1000.4 ms 10 runs ``` Signed-off-by: Ali Caglayan <[email protected]>
1 parent 6c213b5 commit 2b8bc92

File tree

1 file changed

+16
-28
lines changed

1 file changed

+16
-28
lines changed

src/dune_rules/pkg_rules.ml

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,24 +1199,12 @@ module DB = struct
11991199
; dep_pkg_digest : Pkg_digest.t
12001200
}
12011201

1202-
let dep_equal (dep : dep) { dep_pkg; dep_loc; dep_pkg_digest } =
1203-
Pkg.equal dep.dep_pkg dep_pkg
1204-
&& Loc.equal dep.dep_loc dep_loc
1205-
&& Pkg_digest.equal dep.dep_pkg_digest dep_pkg_digest
1206-
;;
1207-
12081202
type entry =
12091203
{ pkg : Pkg.t
12101204
; deps : dep list
12111205
; pkg_digest : Pkg_digest.t
12121206
}
12131207

1214-
let entry_equal (entry : entry) { pkg; deps; pkg_digest } =
1215-
Pkg.equal entry.pkg pkg
1216-
&& List.equal dep_equal entry.deps deps
1217-
&& Pkg_digest.equal entry.pkg_digest pkg_digest
1218-
;;
1219-
12201208
let entries_by_name_of_lock_dir
12211209
(lock_dir : Dune_pkg.Lock_dir.t)
12221210
~platform
@@ -1270,8 +1258,6 @@ module DB = struct
12701258
(* Associate each package's digest with the package and its dependencies. *)
12711259
type t = entry Pkg_digest.Map.t
12721260

1273-
let equal = Pkg_digest.Map.equal ~equal:entry_equal
1274-
12751261
let of_lock_dir lock_dir ~platform ~system_provided =
12761262
entries_by_name_of_lock_dir lock_dir ~platform ~system_provided
12771263
|> Package.Name.Map.values
@@ -1335,22 +1321,24 @@ module DB = struct
13351321
;;
13361322
end
13371323

1324+
module Id = Id.Make ()
1325+
13381326
type t =
1339-
{ pkg_digest_table : Pkg_table.t
1327+
{ id : Id.t
1328+
; pkg_digest_table : Pkg_table.t
13401329
; system_provided : Package.Name.Set.t
13411330
}
13421331

1343-
let equal t ({ pkg_digest_table; system_provided } as t') =
1344-
phys_equal t t'
1345-
|| (Pkg_table.equal t.pkg_digest_table pkg_digest_table
1346-
&& Package.Name.Set.equal t.system_provided system_provided)
1347-
;;
1332+
let equal x y = Id.equal x.id y.id
13481333

1349-
let hash = `Do_not_hash
1350-
let _ = hash
1351-
(* Because t is large, hashing is expensive, so much so that hashing the db in Input.t
1352-
below slowed down the dune call in the test repo described in #12248 from 1s to
1353-
2s. *)
1334+
let create =
1335+
let table = Table.create (module Id) 16 in
1336+
fun ~pkg_digest_table ~system_provided ->
1337+
let id = Id.gen () in
1338+
let t = { id; pkg_digest_table; system_provided } in
1339+
Table.set table id t;
1340+
t
1341+
;;
13541342

13551343
let pkg_digest_of_name lock_dir platform pkg_name ~system_provided =
13561344
let entries_by_name =
@@ -1393,7 +1381,7 @@ module DB = struct
13931381
>>| Pkg_table.union
13941382
(Pkg_table.of_lock_dir lock_dir ~platform ~system_provided)
13951383
in
1396-
{ pkg_digest_table; system_provided })
1384+
create ~pkg_digest_table ~system_provided)
13971385
in
13981386
fun ctx ~allow_sharing -> Memo.exec of_ctx_memo (ctx, allow_sharing)
13991387
;;
@@ -1422,12 +1410,12 @@ module DB = struct
14221410
| true ->
14231411
let+ pkg_digest_table_all_dev_tools =
14241412
Memo.Lazy.force Pkg_table.all_existing_dev_tools
1425-
and+ { pkg_digest_table = pkg_digest_table_default_ctx; system_provided = _ } =
1413+
and+ { pkg_digest_table = pkg_digest_table_default_ctx; _ } =
14261414
of_ctx Context_name.default ~allow_sharing:true
14271415
in
14281416
Pkg_table.union pkg_digest_table_default_ctx pkg_digest_table_all_dev_tools
14291417
in
1430-
( { pkg_digest_table; system_provided }
1418+
( create ~pkg_digest_table ~system_provided
14311419
, pkg_digest_of_name
14321420
lock_dir
14331421
platform

0 commit comments

Comments
 (0)