1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
type stats = { solver_time : Mtime.Span.t Atomic.t }
let handle_solver_time stats f =
if Log.is_bench_enabled () then
let counter = Mtime_clock.counter () in
let res = f () in
let solver_time = Mtime_clock.count counter in
let rec atomic_set () =
let curr = Atomic.get stats.solver_time in
let success =
Atomic.compare_and_set stats.solver_time curr
(Mtime.Span.add curr solver_time)
in
if success then res else atomic_set ()
in
atomic_set ()
else f ()