19 lines
625 B
Text
19 lines
625 B
Text
|
|
(ns portal.bench
|
||
|
|
#?(:cljs (:refer-clojure :exclude [simple-benchmark]))
|
||
|
|
#?(:cljs (:require-macros portal.bench)))
|
||
|
|
|
||
|
|
(defn now []
|
||
|
|
#?(:clj (System/currentTimeMillis)
|
||
|
|
:cljs (.now js/Date)))
|
||
|
|
|
||
|
|
(defmacro simple-benchmark
|
||
|
|
[bindings expr iterations & {:keys [print-fn] :or {print-fn 'println}}]
|
||
|
|
(let [expr-str (pr-str expr)]
|
||
|
|
`(let ~bindings
|
||
|
|
(dotimes [_# ~iterations] ~expr)
|
||
|
|
(let [start# (now)
|
||
|
|
ret# (dotimes [_# ~iterations] ~expr)
|
||
|
|
end# (now)
|
||
|
|
elapsed# (- end# start#)]
|
||
|
|
(~print-fn (str ~iterations " runs, " elapsed# " msecs, " ~expr-str))))))
|