Add timing panel

This commit is contained in:
Daniel Compton 2018-01-12 11:40:45 +13:00
parent b9ec5319f1
commit e79fbf187c
5 changed files with 84 additions and 14 deletions

View File

@ -1,4 +1,5 @@
(ns day8.re-frame.trace.metamorphic) (ns day8.re-frame.trace.metamorphic
(:require [mranderson047.re-frame.v0v10v2.re-frame.utils :as utils]))
;; What starts an epoch? ;; What starts an epoch?
@ -62,19 +63,31 @@
; (or (quiescent? event history pattern-sequence pattern) ; (or (quiescent? event history pattern-sequence pattern)
; (epoch-started? event history pattern-sequence pattern))) ; (epoch-started? event history pattern-sequence pattern)))
; ;
(defn elapsed-time [ev1 ev2]
(let [start-of-epoch (:start ev1)
end-of-epoch (:end ev2)]
(when (and (some? start-of-epoch) (some? end-of-epoch))
#?(:cljs (js/Math.round (- end-of-epoch start-of-epoch))
:clj (Math/round ^double (- end-of-epoch start-of-epoch))))))
(defn run-queue? [event] (defn run-queue? [event]
(and (fsm-trigger? event) (and (fsm-trigger? event)
(= (:operation event) (= (:operation event)
[:scheduled :run-queue]))) [:scheduled :run-queue])))
; ;
;(defn request-animation-frame? [event history pattern-sequence pattern] (defn request-animation-frame? [event]
; (= :raf (:op-type event))) (= :raf (:op-type event)))
; ;
;(defn request-animation-frame-end? [event history pattern-sequence pattern] ;(defn request-animation-frame-end? [event history pattern-sequence pattern]
; (= :raf-end (:op-type event))) ; (= :raf-end (:op-type event)))
; ;
(defn summarise-event [ev] (defn summarise-event [ev]
(dissoc ev :start :duration :end :child-of)) (-> ev
(dissoc :start :duration :end :child-of)
(utils/dissoc-in [:tags :app-db-before])
(utils/dissoc-in [:tags :app-db-after])))
(defn summarise-match [match] (defn summarise-match [match]
(map summarise-event match)) (map summarise-event match))
@ -112,6 +125,11 @@
(= (:operation event) (= (:operation event)
[:idle :add-event]))) [:idle :add-event])))
(defn finish-run? [event]
(and (fsm-trigger? event)
(= (:operation event)
[:running :finish-run])))
(defn event-run? [event] (defn event-run? [event]
(= :event (:op-type event))) (= :event (:op-type event)))

View File

@ -1,6 +1,7 @@
(ns day8.re-frame.trace.subs (ns day8.re-frame.trace.subs
(:require [mranderson047.re-frame.v0v10v2.re-frame.core :as rf] (:require [mranderson047.re-frame.v0v10v2.re-frame.core :as rf]
[day8.re-frame.trace.metamorphic :as metam])) [day8.re-frame.trace.metamorphic :as metam]
[day8.re-frame.trace.utils.utils :as utils]))
(rf/reg-sub (rf/reg-sub
:settings/root :settings/root
@ -104,8 +105,7 @@
:<- [:epochs/beginning-trace-id] :<- [:epochs/beginning-trace-id]
:<- [:epochs/ending-trace-id] :<- [:epochs/ending-trace-id]
(fn [[traces beginning ending] _] (fn [[traces beginning ending] _]
(filter #(<= beginning (:id %) ending) traces) (into [] (filter #(<= beginning (:id %) ending)) traces)))
#_traces))
(rf/reg-sub (rf/reg-sub
:traces/show-epoch-traces? :traces/show-epoch-traces?
@ -200,3 +200,36 @@
(fn [[current total]] (fn [[current total]]
(and (not (zero? current)) (and (not (zero? current))
(some? current)))) (some? current))))
;;
(rf/reg-sub
:timing/total-epoch-time
:<- [:traces/current-event-traces]
(fn [traces]
(let [start-of-epoch (nth traces 0)
end-of-epoch (utils/last-in-vec traces)]
(metam/elapsed-time start-of-epoch end-of-epoch))))
(rf/reg-sub
:timing/animation-frame-count
:<- [:traces/current-event-traces]
(fn [traces]
(count (filter metam/request-animation-frame? traces))))
(rf/reg-sub
:timing/event-processing-time
:<- [:traces/current-event-traces]
(fn [traces]
(let [start-of-epoch (nth traces 0)
finish-run (first (filter metam/finish-run? traces))]
(js/console.log "Start" start-of-epoch "fin" finish-run)
(metam/elapsed-time start-of-epoch finish-run))))
(rf/reg-sub
:timing/render-time
:<- [:traces/current-event-traces]
(fn [traces]
(let [start-of-render (first (filter metam/request-animation-frame? traces))
end-of-epoch (utils/last-in-vec traces)]
(metam/elapsed-time start-of-render end-of-epoch))))

View File

@ -1,2 +1,16 @@
(ns day8.re-frame.trace.utils.utils) (ns day8.re-frame.trace.utils.utils)
(defn last-in-vec
"Get the last element in the vector"
[v]
(nth v (dec (count v))))
(defn find-all-indexes-in-vec
"Gets the index of all items in vec that match the predicate"
[pred v]
(keep-indexed #(when (pred %2) %1) v))
(defn find-index-in-vec
"Gets the index of the first item in vec that matches the predicate"
[pred v]
(first (find-all-indexes-in-vec pred v)))

View File

@ -8,11 +8,11 @@
:gap "5px" :gap "5px"
:children :children
[ [
[rc/label :label (str "Number of matches " (prn-str @(rf/subscribe [:epochs/number-of-matches])))] [rc/label :label (str "Number of epochs " (prn-str @(rf/subscribe [:epochs/number-of-matches])))]
[rc/label :label (str "Beginning trace " (prn-str @(rf/subscribe [:epochs/beginning-trace-id])))] [rc/label :label (str "Beginning trace " (prn-str @(rf/subscribe [:epochs/beginning-trace-id])))]
[rc/label :label (str "Ending " (prn-str @(rf/subscribe [:epochs/ending-trace-id])))] [rc/label :label (str "Ending " (prn-str @(rf/subscribe [:epochs/ending-trace-id])))]
[rc/label :label "Matches"] [rc/label :label "Epochs"]
(for [match (:matches @(rf/subscribe [:epochs/epoch-root]))] (for [match (:matches @(rf/subscribe [:epochs/epoch-root]))]
^{:key (:id (first match))} ^{:key (:id (first match))}
[rc/v-box [rc/v-box

View File

@ -2,14 +2,19 @@
(:require [clojure.string :as str] (:require [clojure.string :as str]
[devtools.prefs] [devtools.prefs]
[devtools.formatters.core] [devtools.formatters.core]
[day8.re-frame.trace.view.components :as components]
[mranderson047.re-frame.v0v10v2.re-frame.core :as rf] [mranderson047.re-frame.v0v10v2.re-frame.core :as rf]
[mranderson047.reagent.v0v6v0.reagent.core :as r] [day8.re-frame.trace.utils.re-com :as rc])
[day8.re-frame.trace.utils.re-com :as rc]
[day8.re-frame.trace.common-styles :as common])
(:require-macros [day8.re-frame.trace.utils.macros :as macros])) (:require-macros [day8.re-frame.trace.utils.macros :as macros]))
(defn render [] (defn render []
[rc/v-box [rc/v-box
:padding "12px 0px" :padding "12px 0px"
:children [[rc/label :label "Timing panel"]]]) :children [[rc/label :label "Total Epoch Time"]
[rc/label :label (str @(rf/subscribe [:timing/total-epoch-time]) "ms")]
[rc/label :label "Animation Frames"]
[rc/label :label @(rf/subscribe [:timing/animation-frame-count])]
[rc/label :label "Event time"]
[rc/label :label (str @(rf/subscribe [:timing/event-processing-time]) "ms")]
[rc/label :label "Render/Subscription time"]
[rc/label :label (str @(rf/subscribe [:timing/render-time]) "ms")]]])