From 2ef1e881fdcfd044bfa283698b682eef16320041 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@gmail.com> Date: Wed, 3 Mar 2021 23:31:20 +0100 Subject: [PATCH] Display time between passage events when profiling is enabled. --- css/debugging/profileEvents.css | 5 +++ src/debugging/profileEvents.js | 60 ++++++++++++++++++++++++++++++ src/zz1-last/setupEventHandlers.js | 24 +++++++++--- 3 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 css/debugging/profileEvents.css create mode 100644 src/debugging/profileEvents.js diff --git a/css/debugging/profileEvents.css b/css/debugging/profileEvents.css new file mode 100644 index 00000000000..eb3d4304269 --- /dev/null +++ b/css/debugging/profileEvents.css @@ -0,0 +1,5 @@ +.profile-events { + display: grid; + grid-template-columns: max-content max-content max-content auto; + grid-column-gap: 1em; +} diff --git a/src/debugging/profileEvents.js b/src/debugging/profileEvents.js new file mode 100644 index 00000000000..cce2b14802b --- /dev/null +++ b/src/debugging/profileEvents.js @@ -0,0 +1,60 @@ +globalThis.profileEvents = (function() { + let passageinit = 0; + let passagestart = 0; + let passagerender = 0; + let passagedisplay = 0; + let passageend = 0; + + /** + * @param {HTMLElement} container + */ + function render(container) { + App.UI.DOM.appendNewElement("h2", container, "Passage Events Profiler"); + const p = document.createElement("p"); + p.classList.add("profile-events"); + row(p, ":passageinit", ":passagestart", "Copy State", passagestart - passageinit); + row(p, ":passagestart", ":passagerender", "Render", passagerender - passagestart); + row(p, ":passagerender", ":passagedisplay", "Display", passagedisplay - passagerender); + row(p, ":passagedisplay", ":passageend", "Cleanup / Auto Save", passageend - passagedisplay); + container.append(p); + } + + function row(container, start, stop, desc, value) { + App.UI.DOM.appendNewElement("div", container, `From ${start}`); + App.UI.DOM.appendNewElement("div", container, `To ${stop}`); + App.UI.DOM.appendNewElement("div", container, `(${desc})`); + App.UI.DOM.appendNewElement("div", container, `${value}ms`); + } + + return { + passageinit: () => { + if (V.profiler) { + passageinit = performance.now(); + } + }, + passagestart: () => { + if (V.profiler) { + passagestart = performance.now(); + } + }, + passagerender: () => { + if (V.profiler) { + passagerender = performance.now(); + } + }, + passagedisplay: () => { + if (V.profiler) { + passagedisplay = performance.now(); + } + }, + /** + * @param {HTMLElement} content + */ + passageend: (content) => { + if (V.profiler) { + passageend = performance.now(); + render(content); + } + }, + }; +})(); diff --git a/src/zz1-last/setupEventHandlers.js b/src/zz1-last/setupEventHandlers.js index bbe69053495..8ad72f2310c 100644 --- a/src/zz1-last/setupEventHandlers.js +++ b/src/zz1-last/setupEventHandlers.js @@ -8,19 +8,33 @@ $(document).on(":storyready", () => { App.EventHandlers.storyReady(); }); +$(document).on(":passageinit", () => { + if (V.passageSwitchHandler) { + V.passageSwitchHandler(); + delete V.passageSwitchHandler; + } + profileEvents.passageinit(); +}); + $(document).on(":passagestart", event => { App.Debug.slavesConsistency(event); Object.defineProperty(State.temporary, "S", { get: () => S, enumerable: true }); + profileEvents.passagestart(); }); -$(document).on(":passageinit", () => { - if (V.passageSwitchHandler) { - V.passageSwitchHandler(); - delete V.passageSwitchHandler; - } +$(document).on(":passagerender", () => { + profileEvents.passagerender(); +}); + +$(document).on(":passagedisplay", () => { + profileEvents.passagedisplay(); +}); + +$(document).on(":passageend", ev => { + profileEvents.passageend(ev.content); }); /* ### One-time listeners ### */ -- GitLab