|
| 1 | +(ns tech.v3.dataset.load-test) |
| 2 | + |
| 3 | +(def old-load-lib @#'clojure.core/load-lib) |
| 4 | + |
| 5 | +(def data (time (let [loading* (atom nil) |
| 6 | + data* (atom [])] |
| 7 | + (with-redefs [clojure.core/load-lib |
| 8 | + (fn [prefix lib & options] |
| 9 | + (let [s (System/nanoTime) |
| 10 | + m {:parent @loading* :child lib} |
| 11 | + old-lib @loading*] |
| 12 | + (reset! loading* lib) |
| 13 | + ;; (println {:prefix prefix :lib lib :options options}) |
| 14 | + (let [out (apply old-load-lib prefix lib options)] |
| 15 | + (swap! data* conj (assoc m :t (- (System/nanoTime) s))) |
| 16 | + (reset! loading* old-lib) |
| 17 | + out)))] |
| 18 | + (require '[tech.v3.dataset :as ds])) |
| 19 | + @data*))) |
| 20 | + |
| 21 | +(comment |
| 22 | + (require '[tech.v3.dataset :as ds]) |
| 23 | + (def data-ds (ds/->dataset data)) |
| 24 | + |
| 25 | + (require '[ham-fisted.function :as hamf-fn]) |
| 26 | + (defn process-data |
| 27 | + [data] |
| 28 | + (let [m (java.util.HashMap.)] |
| 29 | + (run! (fn [{:keys [parent child t]}] |
| 30 | + (.compute m child (hamf-fn/bi-function k v |
| 31 | + (+ (long t) (long (or v 0))))) |
| 32 | + (when parent |
| 33 | + (.compute m parent (hamf-fn/bi-function k v |
| 34 | + (- (long (or v 0)) t))))) |
| 35 | + data) |
| 36 | + (->> (mapv (juxt key val) (.entrySet m)) |
| 37 | + (sort-by second >)))) |
| 38 | + |
| 39 | + (defn compute-loaded |
| 40 | + [data ns-name] |
| 41 | + (->> (get (group-by :child data) |
| 42 | + ns-name) |
| 43 | + (mapv :parent))) |
| 44 | + |
| 45 | + (compute-loaded data 'ham-fisted.protocols) |
| 46 | + (compute-loaded data 'tech.v3.dataset.io.nippy) |
| 47 | + |
| 48 | + (defn compute-loads |
| 49 | + [data ns-name] |
| 50 | + (->> (get (group-by :parent data) |
| 51 | + ns-name) |
| 52 | + (mapv :child))) |
| 53 | + |
| 54 | + (compute-loads data 'ham-fisted.lazy-noncaching) |
| 55 | + |
| 56 | + ) |
0 commit comments