mirror of
https://github.com/penpot/penpot.git
synced 2025-05-30 02:06:10 +02:00
🎉 Add metrics for svgc function.
This commit is contained in:
parent
b80295a21c
commit
b252b55c85
1 changed files with 39 additions and 34 deletions
|
@ -25,33 +25,36 @@
|
||||||
;; SVG Clean
|
;; SVG Clean
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(declare do-svg-clean)
|
(declare clean-svg)
|
||||||
(declare prepare-context-pool)
|
(declare prepare-context-pool)
|
||||||
|
|
||||||
(defmethod ig/pre-init-spec ::svgc [_]
|
(defmethod ig/pre-init-spec ::svgc [_]
|
||||||
(s/keys :req-un [::mtx/metrics]))
|
(s/keys :req-un [::mtx/metrics]))
|
||||||
|
|
||||||
(defmethod ig/init-key ::svgc
|
(defmethod ig/init-key ::svgc
|
||||||
[_ _]
|
[_ {:keys [metrics] :as cfg}]
|
||||||
(let [ctx-pool (prepare-context-pool)]
|
(let [pool (prepare-context-pool cfg)
|
||||||
(with-meta
|
cfg (assoc cfg :pool pool)
|
||||||
(fn [data]
|
handler #(clean-svg cfg %)
|
||||||
(with-open [ctx (pool/acquire ctx-pool)]
|
handler (->> {:registry (:registry metrics)
|
||||||
(do-svg-clean @ctx data)))
|
:type :summary
|
||||||
{::ctx-pool ctx-pool})))
|
:name "svgc_timing"
|
||||||
|
:help "svg optimization function timing"}
|
||||||
|
(mtx/instrument handler))]
|
||||||
|
(with-meta handler {::pool pool})))
|
||||||
|
|
||||||
(defmethod ig/halt-key! ::svgc
|
(defmethod ig/halt-key! ::svgc
|
||||||
[_ f]
|
[_ f]
|
||||||
(let [{:keys [::ctx-pool]} (meta f)]
|
(let [{:keys [::pool]} (meta f)]
|
||||||
(pool/clear! ctx-pool)
|
(pool/clear! pool)
|
||||||
(pool/close! ctx-pool)))
|
(pool/close! pool)))
|
||||||
|
|
||||||
(defn- prepare-context-pool
|
(defn- prepare-context-pool
|
||||||
[]
|
[cfg]
|
||||||
(pool/create
|
(pool/create
|
||||||
{:min-idle 0
|
{:min-idle (:min-idle cfg 0)
|
||||||
:max-idle 3
|
:max-idle (:max-idle cfg 3)
|
||||||
:max-total 3
|
:max-total (:max-total cfg 3)
|
||||||
:create
|
:create
|
||||||
(fn []
|
(fn []
|
||||||
(let [ctx (graal/context "js")]
|
(let [ctx (graal/context "js")]
|
||||||
|
@ -62,27 +65,29 @@
|
||||||
(fn [ctx]
|
(fn [ctx]
|
||||||
(graal/close! ctx))}))
|
(graal/close! ctx))}))
|
||||||
|
|
||||||
(defn- do-svg-clean
|
(defn- clean-svg
|
||||||
[ctx data]
|
[{:keys [pool]} data]
|
||||||
(let [res (promise)
|
(with-open [ctx (pool/acquire pool)]
|
||||||
optimize (-> (graal/get-bindings ctx "js")
|
(let [res (promise)
|
||||||
(graal/get-member "svgc")
|
optimize (-> (graal/get-bindings @ctx "js")
|
||||||
(graal/get-member "optimize"))
|
(graal/get-member "svgc")
|
||||||
resultp (graal/invoke optimize data)]
|
(graal/get-member "optimize"))
|
||||||
|
resultp (graal/invoke optimize data)]
|
||||||
|
|
||||||
(graal/invoke-member resultp "then"
|
(graal/invoke-member resultp "then"
|
||||||
(reify Consumer
|
(reify Consumer
|
||||||
(accept [_ val]
|
(accept [_ val]
|
||||||
(deliver res val))))
|
(deliver res val))))
|
||||||
(graal/invoke-member resultp "catch"
|
|
||||||
(reify Consumer
|
|
||||||
(accept [_ err]
|
|
||||||
(deliver res err))))
|
|
||||||
|
|
||||||
(let [result (deref res)]
|
(graal/invoke-member resultp "catch"
|
||||||
(if (instance? Throwable result)
|
(reify Consumer
|
||||||
(throw result)
|
(accept [_ err]
|
||||||
result))))
|
(deliver res err))))
|
||||||
|
|
||||||
|
(let [result (deref res)]
|
||||||
|
(if (instance? Throwable result)
|
||||||
|
(throw result)
|
||||||
|
result)))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Handler
|
;; Handler
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue