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?
@ -62,19 +63,31 @@
; (or (quiescent? 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]
(and (fsm-trigger? event)
(= (:operation event)
[:scheduled :run-queue])))
;
;(defn request-animation-frame? [event history pattern-sequence pattern]
; (= :raf (:op-type event)))
(defn request-animation-frame? [event]
(= :raf (:op-type event)))
;
;(defn request-animation-frame-end? [event history pattern-sequence pattern]
; (= :raf-end (:op-type event)))
;
(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]
(map summarise-event match))
@ -112,6 +125,11 @@
(= (:operation event)
[:idle :add-event])))
(defn finish-run? [event]
(and (fsm-trigger? event)
(= (:operation event)
[:running :finish-run])))
(defn event-run? [event]
(= :event (:op-type event)))

View File

@ -1,6 +1,7 @@
(ns day8.re-frame.trace.subs
(: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
:settings/root
@ -104,8 +105,7 @@
:<- [:epochs/beginning-trace-id]
:<- [:epochs/ending-trace-id]
(fn [[traces beginning ending] _]
(filter #(<= beginning (:id %) ending) traces)
#_traces))
(into [] (filter #(<= beginning (:id %) ending)) traces)))
(rf/reg-sub
:traces/show-epoch-traces?
@ -200,3 +200,36 @@
(fn [[current total]]
(and (not (zero? 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)
(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"
: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 "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]))]
^{:key (:id (first match))}
[rc/v-box

View File

@ -2,14 +2,19 @@
(:require [clojure.string :as str]
[devtools.prefs]
[devtools.formatters.core]
[day8.re-frame.trace.view.components :as components]
[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.common-styles :as common])
[day8.re-frame.trace.utils.re-com :as rc])
(:require-macros [day8.re-frame.trace.utils.macros :as macros]))
(defn render []
[rc/v-box
: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")]]])