♻️ Reorganize benchmark runner, reporting and cli

This commit is contained in:
Miguel de Benito Delgado 2026-11-03 15:58:18 +01:00
parent 61c5ef8854
commit 8c3a489e33
42 changed files with 178 additions and 164 deletions

View File

@ -1290,7 +1290,14 @@ observed change matters for the workload.
```text
frontend/performance/benches/render_wasm/
├── browser/ page entry and browser bridge
├── node/ CLI, build preparation, server, browser host, run, artefacts
├── features/ feature selection, configurations and comparison edges
├── node/
│ ├── catalog/ compiled catalog entry and retained catalog loader
│ ├── cli/ CLI entry, resolution, requests and execution lifecycle
│ │ └── commands/ per-command schemas, help and resolution
│ ├── report/ saved-record comparison and merge
│ ├── runner/ build preparation, server, browser host and run orchestration
│ └── storage/ artifacts and saved runs
├── report/ summaries, comparisons, statistics, formatting
├── runtime/ renderer commands, render drains, and camera sessions
├── scenes/ scene recipes and their cases
@ -1299,7 +1306,6 @@ frontend/performance/benches/render_wasm/
├── cases.cljs case discovery and collection
├── codec.cljs Transit round-trip validation
├── errors.cljc failure values and diagnostics
├── feature_plan.cljs feature configurations and comparison edges
├── snapshot.cljs snapshot validation and upload order
├── fingerprint.cljs digest of the starting snapshot
├── identity.cljc build identity and bundle compatibility checks

View File

@ -4,10 +4,10 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.feature-plan
(ns benches.render-wasm.features.plan
"Requested-feature configurations and comparison edges."
(:require
[benches.render-wasm.node.options :as options]
[benches.render-wasm.features.selection :as selection]
[clojure.string :as str]))
(def ^:const default-max-features 3)
@ -16,7 +16,7 @@
"Checks names and empty declared defaults against Cargo metadata's feature
definitions. Cargo owns activation; these definitions are not resolved here."
[features definitions]
(let [features (:features (options/feature-selection {:features features}))]
(let [features (:features (selection/feature-selection {:features features}))]
(when-not (and (map? definitions)
(every? string? (keys definitions))
(every? #(and (vector? %) (every? string? %)) (vals definitions)))
@ -34,7 +34,7 @@
above eight configurations or with an empty filter; dry-run needs none."
[features {:keys [max-features confirm dry-run filter]
:or {max-features default-max-features confirm false dry-run false}}]
(let [features (:features (options/feature-selection {:features features}))
(let [features (:features (selection/feature-selection {:features features}))
n (count features)]
(when-not (and (int? max-features) (<= 1 max-features 6))
(throw (ex-info "max-features must be an integer from 1 to 6" {:type ::invalid-limit})))

View File

@ -4,13 +4,8 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.options
"Command defaults and feature validation."
(:require
[clojure.string :as str]))
(def default-build-timeout-ms 300000)
(def default-startup-timeout-ms 30000)
(ns benches.render-wasm.features.selection
"Feature validation.")
(def ^:private diagnostic-features #{"stats" "profile" "profile-macros" "profile-raf"})
@ -32,17 +27,3 @@
(throw (ex-info "measurement builds cannot enable diagnostic Cargo features"
{:type ::diagnostic-features :features (vec selected)})))
{:default-features? default-features? :features (vec (sort (distinct features)))})
(defn parse-feature-list
[text]
(:features (feature-selection {:features (mapv str/trim (str/split text #"," -1))})))
(defn console-level
"Returns the console level selected by quiet or verbose options."
[opts]
(cond (:quiet opts) :warn (:verbose opts) :debug :else :info))
(defn color-mode
"Returns automatic, forced or disabled console coloring."
[opts]
(case (:color opts) true :always false :never :auto))

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.case-catalog
(ns benches.render-wasm.node.catalog.entry
"Node entry points of a compiled renderer benchmark build.
The `:bench-render-wasm-catalog` build in `frontend/shadow-cljs.edn` names

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.catalog
(ns benches.render-wasm.node.catalog.loader
"Loads case descriptors from a selected build, without the runner's registry."
(:require
["module" :as node-module]

View File

@ -4,12 +4,12 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.ab
(ns benches.render-wasm.node.cli.commands.ab
"Options for comparing configurations of Cargo features."
(:require
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.node.cli.shared :as shared]
[benches.render-wasm.node.options :as options]))
[benches.render-wasm.node.settings :as settings]))
(def schema:max-features
[:int {:min 1 :max 6}])
@ -21,7 +21,7 @@
[:max-features {:default feature-plan/default-max-features} schema:max-features]
[:confirm {:default false} :boolean]
[:dry-run {:default false} :boolean]
[:build-timeout-ms {:default options/default-build-timeout-ms} shared/schema:timeout-ms]]])
[:build-timeout-ms {:default settings/default-build-timeout-ms} shared/schema:timeout-ms]]])
(def ^:const usage "runner ab --features A,B [options]")
@ -31,7 +31,7 @@
(def cli-options
(into [[nil "--features FEATURES" "Comma-separated functional Cargo features"
:parse-fn options/parse-feature-list]
:parse-fn shared/parse-feature-list]
(shared/number-option "--max-features N" "Maximum number of requested features"
schema:max-features "must be an integer from 1 to 6")
[nil "--confirm" "Confirm above eight configurations or with a blank filter"]

View File

@ -4,17 +4,18 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.build
(ns benches.render-wasm.node.cli.commands.build
"Options for preparing a benchmark build."
(:require
[benches.render-wasm.features.selection :as selection]
[benches.render-wasm.node.cli.shared :as shared]
[benches.render-wasm.node.options :as options]))
[benches.render-wasm.node.settings :as settings]))
(def schema:options
[:map {:closed true}
[:default-features {:default true} :boolean]
[:features {:default []} [:vector shared/schema:feature]]
[:build-timeout-ms {:default options/default-build-timeout-ms} shared/schema:timeout-ms]])
[:build-timeout-ms {:default settings/default-build-timeout-ms} shared/schema:timeout-ms]])
(def ^:const usage "runner build [options]")
@ -23,7 +24,7 @@
(def cli-options
[[nil "--[no-]default-features" "Enable Cargo defaults"]
[nil "--features FEATURES" "Comma-separated functional Cargo features"
:parse-fn options/parse-feature-list]
:parse-fn shared/parse-feature-list]
(shared/build-timeout-option "Complete preparation deadline")])
(defn resolve-options
@ -35,6 +36,6 @@
(defn check-options
"Checks measurement feature policy and returns the resolved build options."
[resolved]
(options/feature-selection {:default-features? (:default-features resolved)
:features (:features resolved)})
(selection/feature-selection {:default-features? (:default-features resolved)
:features (:features resolved)})
resolved)

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.compare
(ns benches.render-wasm.node.cli.commands.compare
"Options for comparing saved benchmark records."
(:require
[app.common.schema :as sm]

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.merge
(ns benches.render-wasm.node.cli.commands.merge
"Options for merging saved benchmark records."
(:require
[app.common.schema :as sm]

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.purge
(ns benches.render-wasm.node.cli.commands.purge
"Options for purging managed benchmark artifacts."
(:require
[benches.render-wasm.node.cli.shared :as shared]))

View File

@ -4,11 +4,11 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli.run
(ns benches.render-wasm.node.cli.commands.run
"Options for a benchmark run and its selected build source."
(:require
[app.common.schema :as sm]
[benches.render-wasm.node.cli.build :as build]
[benches.render-wasm.node.cli.commands.build :as build]
[benches.render-wasm.node.cli.shared :as shared]))
(def schema:build

View File

@ -7,8 +7,7 @@
(ns benches.render-wasm.node.cli.console
"Console settings carried by resolved benchmark requests."
(:require
[benches.render-wasm.node.cli.shared :as shared]
[benches.render-wasm.node.options :as options]))
[benches.render-wasm.node.cli.shared :as shared]))
(def schema:console
[:map {:closed true}
@ -20,6 +19,16 @@
["-v" "--verbose" "Show debug details and raw build output"]
[nil "--[no-]color" "Colorize terminal output"]])
(defn console-level
"Returns the console level selected by quiet or verbose options."
[opts]
(cond (:quiet opts) :warn (:verbose opts) :debug :else :info))
(defn color-mode
"Returns automatic, forced or disabled console coloring."
[opts]
(case (:color opts) true :always false :never :auto))
(defn resolve-options
"Resolves supplied console flags into console settings."
[options]
@ -27,5 +36,5 @@
(throw (ex-info "--quiet and --verbose are mutually exclusive"
{:type ::shared/invalid-args})))
(cond-> {}
(or (:quiet options) (:verbose options)) (assoc :level (options/console-level options))
(contains? options :color) (assoc :color (options/color-mode options))))
(or (:quiet options) (:verbose options)) (assoc :level (console-level options))
(contains? options :color) (assoc :color (color-mode options))))

View File

@ -4,17 +4,17 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.commands
(ns benches.render-wasm.node.cli.deferred
"Deferred execution entry for build, run and feature comparison commands."
(:require
[app.common.transit :as transit]
[benches.render-wasm.errors :refer [attempt failure?]]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.build :as build]
[benches.render-wasm.node.execution :as execution]
[benches.render-wasm.node.feature-comparison :as feature-comparison]
[benches.render-wasm.node.cli.execution :as execution]
[benches.render-wasm.node.outcome :as outcome]
[benches.render-wasm.node.run :as run]))
[benches.render-wasm.node.runner.build :as build]
[benches.render-wasm.node.runner.feature-comparison :as feature-comparison]
[benches.render-wasm.node.runner.run :as run]
[benches.render-wasm.node.storage.artifacts :as artifacts]))
(defn- ^:async build-command
[{:keys [get-root signal]} options]

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.execution
(ns benches.render-wasm.node.cli.execution
"Validate benchmark command requests, run their handlers and print results.
Both the CLI entry and the separately compiled renderer command entry use
@ -21,9 +21,9 @@
[app.common.schema :as sm]
[benches.render-wasm.errors :as errors :refer [attempt failure?]]
[benches.render-wasm.node.cli.registry :as registry]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.outcome :as outcome]
[benches.render-wasm.node.request :as request]))
[benches.render-wasm.node.outcome :as outcome]))
(defn on-signals
"Listen for process interrupts so the caller can stop work and finish cleanup.

View File

@ -4,18 +4,18 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.runner
(ns benches.render-wasm.node.cli.main
"Command-line entry for renderer benchmarks and saved results."
(:require
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.errors :refer [attempt failure?]]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.cli :as cli]
[benches.render-wasm.node.compare :as compare]
[benches.render-wasm.node.execution :as execution]
[benches.render-wasm.node.merge :as merge]
[benches.render-wasm.node.outcome :as outcome]))
[benches.render-wasm.node.cli.execution :as execution]
[benches.render-wasm.node.cli.resolve :as cli]
[benches.render-wasm.node.outcome :as outcome]
[benches.render-wasm.node.report.compare :as compare]
[benches.render-wasm.node.report.merge :as merge]
[benches.render-wasm.node.storage.artifacts :as artifacts]))
(defn- help-command
[_ {:keys [topic]}]

View File

@ -7,12 +7,12 @@
(ns benches.render-wasm.node.cli.registry
"Ordered command definitions for parsing, request schemas and help."
(:require
[benches.render-wasm.node.cli.ab :as ab]
[benches.render-wasm.node.cli.build :as build]
[benches.render-wasm.node.cli.compare :as compare]
[benches.render-wasm.node.cli.merge :as merge]
[benches.render-wasm.node.cli.purge :as purge]
[benches.render-wasm.node.cli.run :as run]))
[benches.render-wasm.node.cli.commands.ab :as ab]
[benches.render-wasm.node.cli.commands.build :as build]
[benches.render-wasm.node.cli.commands.compare :as compare]
[benches.render-wasm.node.cli.commands.merge :as merge]
[benches.render-wasm.node.cli.commands.purge :as purge]
[benches.render-wasm.node.cli.commands.run :as run]))
(def commands
[["build" {:usage build/usage

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.request
(ns benches.render-wasm.node.cli.request
"Resolved benchmark requests, sender defaults and receiver validation."
(:require
[app.common.schema :as sm]

View File

@ -4,15 +4,15 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.cli
(ns benches.render-wasm.node.cli.resolve
"Command-specific argument resolution and help for renderer benchmarks."
(:require
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.node.cli.console :as console]
[benches.render-wasm.node.cli.help :as help]
[benches.render-wasm.node.cli.registry :as registry]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.cli.shared :as shared]
[benches.render-wasm.node.request :as request]
[clojure.string :as str]
[clojure.tools.cli :as tools]))

View File

@ -8,8 +8,9 @@
"Value constraints and option groups shared by benchmark commands."
(:require
[app.common.schema :as sm]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.options :as options]
[benches.render-wasm.features.selection :as selection]
[benches.render-wasm.node.settings :as settings]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.random :as random]
[clojure.string :as str]))
@ -30,7 +31,7 @@
[:fn {:error/message "expected a benchmark artifact ID"} artifacts/valid-id?])
(def schema:feature
[:fn {:error/message "expected a Cargo feature name"} options/feature-name?])
[:fn {:error/message "expected a Cargo feature name"} selection/feature-name?])
(def schema:measurement
[:map {:closed true}
@ -39,7 +40,7 @@
[:warmups {:default 3} schema:nonnegative-count]
[:repetitions {:default 10} schema:positive-count]
[:timeout-ms {:default 30000} schema:timeout-ms]
[:startup-timeout-ms {:default options/default-startup-timeout-ms} schema:timeout-ms]
[:startup-timeout-ms {:default settings/default-startup-timeout-ms} schema:timeout-ms]
[:output-dir {:default nil} [:maybe ::sm/text]]
[:screenshots {:default false} :boolean]
[:require-gpu {:default false} :boolean]])
@ -50,6 +51,10 @@
[:allow-scene-differences {:default false} :boolean]
[:allow-all-differences {:default false} :boolean]])
(defn parse-feature-list
[text]
(:features (selection/feature-selection {:features (mapv str/trim (str/split text #"," -1))})))
(defn- parse-number
[text]
(if (str/blank? text) js/NaN (js/Number text)))

View File

@ -4,12 +4,12 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.compare
(ns benches.render-wasm.node.report.compare
"Offline comparison of two saved schema:run records.
Inputs are user file paths resolved from the caller's cwd."
(:require
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.report.compare :as compare]
[benches.render-wasm.report.format :as format]
[benches.render-wasm.result :as result]))

View File

@ -4,11 +4,11 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.merge
(ns benches.render-wasm.node.report.merge
"Offline merge of two saved schema:run records."
(:require
["fs" :as fs]
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.result :as result]))
(defn execute

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.browser
(ns benches.render-wasm.node.runner.browser
"Owns Chromium through process/run from spawn, then attaches Playwright by CDP.
Shutdown stops the owned process group before disconnecting the client."
(:require-macros
@ -17,8 +17,8 @@
[app.common.transit :as transit]
[benches.render-wasm.errors :as errors :refer [attempt]]
[benches.render-wasm.identity :as identity]
[benches.render-wasm.node.options :as options]
[benches.render-wasm.node.process :as process]))
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.settings :as settings]))
(defn gpu-active?
"Returns whether the development container enables GPU access."
@ -211,7 +211,7 @@
Startup failures include information about endpoint and profile."
[{:keys [signal startup-timeout-ms deadline]
:or {startup-timeout-ms options/default-startup-timeout-ms}}]
:or {startup-timeout-ms settings/default-startup-timeout-ms}}]
(let [deadline (or deadline (process/deadline startup-timeout-ms))
budget (process/remaining deadline)]
(when (and signal (.-aborted ^js signal))
@ -278,7 +278,7 @@
Failures close the started page/context before rejecting."
[owner host {:keys [viewport signal startup-timeout-ms deadline]
:or {startup-timeout-ms options/default-startup-timeout-ms}}]
:or {startup-timeout-ms settings/default-startup-timeout-ms}}]
(let [deadline (or deadline (process/deadline startup-timeout-ms))
bounds {:deadline deadline :signal signal :phase :browser-page-startup}
^js browser (:browser owner)

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.build
(ns benches.render-wasm.node.runner.build
"These functions build the renderer and package it with the code that runs
benchmarks in Node and the browser.
@ -22,12 +22,13 @@
["url" :as url]
[app.common.transit :as transit]
[benches.render-wasm.errors :as errors :refer [attempt failure?]]
[benches.render-wasm.features.selection :as selection]
[benches.render-wasm.identity :as identity]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.catalog :as catalog]
[benches.render-wasm.node.catalog.loader :as catalog]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.options :as options]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.settings :as settings]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[clojure.string :as str]))
(defn ^:async git-provenance
@ -116,11 +117,11 @@
A failure rejects the promise and keeps any files already written for
inspection. Error data includes :build-id and :log-path when available."
[{:keys [root features selection build-timeout-ms signal on-created]
:or {build-timeout-ms options/default-build-timeout-ms}}]
:or {build-timeout-ms settings/default-build-timeout-ms}}]
(when-not (and (js/Number.isSafeInteger build-timeout-ms) (pos? build-timeout-ms))
(throw (ex-info "build timeout must be a positive integer" {:type ::invalid-timeout})))
(let [root (or root (artifacts/frontend-root))
selection (options/feature-selection (or selection features))
selection (selection/feature-selection (or selection features))
deadline (process/deadline build-timeout-ms)
bounds {:deadline deadline :signal signal}
initial (artifacts/create-build root selection {:git {:sha nil :dirty nil}
@ -153,8 +154,8 @@
"RENDER_WASM_BUILD_INFO" facts-path}})))
(let [facts (js/JSON.parse (fs/readFileSync facts-path "utf8"))
profile (js->clj (.-profile facts) :keywordize-keys true)
resolved (:features (options/feature-selection {:features (js->clj (.-features facts))
:default-features? (:default-features? selection)}))]
resolved (:features (selection/feature-selection {:features (js->clj (.-features facts))
:default-features? (:default-features? selection)}))]
(when-not (and (= "3" (:opt_level profile))
(false? (:debug_assertions profile)))
(throw (ex-info "Cargo did not produce an optimized renderer"

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.feature-comparison
(ns benches.render-wasm.node.runner.feature-comparison
"Plan and run benchmarks for combinations of optional Cargo renderer features.
`prepare` reads Cargo metadata and collects the selected benchmark cases.
@ -23,17 +23,17 @@
["path" :as path]
[benches.render-wasm.cases :as cases]
[benches.render-wasm.errors :as errors :refer [attempt failure?]]
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.build :as build]
[benches.render-wasm.node.catalog :as catalog]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.node.catalog.loader :as catalog]
[benches.render-wasm.node.files :as files]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.options :as options]
[benches.render-wasm.node.outcome :as outcome]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.run :as run]
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.runner.build :as build]
[benches.render-wasm.node.runner.run :as run]
[benches.render-wasm.node.settings :as settings]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.node.time :as time]
[benches.render-wasm.report.compare :as compare]
[benches.render-wasm.result :as result]
@ -690,9 +690,9 @@
prepared: The result of `prepare`.
signal: An optional AbortSignal that cancels execution.
settings: May contain `:services` overrides with the same contracts as the
defaults: `:prepare-build` uses `node.build/prepare`, `:collect-catalog`
uses `node.catalog/collect`, `:create-run-home` uses `node.runs/create-home`,
and `:execute-run` uses `node.run/execute`. Omitted services use
defaults: `:prepare-build` uses `node.runner.build/prepare`, `:collect-catalog`
uses `node.catalog.loader/collect`, `:create-run-home` uses `node.storage.runs/create-home`,
and `:execute-run` uses `node.runner.run/execute`. Omitted services use
`default-services`.
Returns:
@ -781,7 +781,7 @@
{:command "cargo"
:args ["metadata" "--offline" "--locked" "--no-deps" "--format-version" "1"]
:cwd cwd
:deadline (process/deadline (:build-timeout-ms opts options/default-build-timeout-ms))
:deadline (process/deadline (:build-timeout-ms opts settings/default-build-timeout-ms))
:signal signal}))]
(feature-plan/check-manifest (:features plan) (get-root-features cwd (:stdout metadata)))
{:plan plan

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.run
(ns benches.render-wasm.node.runner.run
"Renderer benchmark runs over fixed builds.
Runs are stored in a `home`, and execute via a loopback host and at most one
@ -27,15 +27,15 @@
[benches.render-wasm.declarations :as declarations]
[benches.render-wasm.errors :as errors :refer [attempt failure?]]
[benches.render-wasm.measurement :as measurement]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.browser :as browser]
[benches.render-wasm.node.build :as build]
[benches.render-wasm.node.catalog :as catalog]
[benches.render-wasm.node.catalog.loader :as catalog]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.outcome :as outcome]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.server :as server]
[benches.render-wasm.node.runner.browser :as browser]
[benches.render-wasm.node.runner.build :as build]
[benches.render-wasm.node.runner.server :as server]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.node.time :as time]
[benches.render-wasm.report.format :as format]
[benches.render-wasm.report.summarize :as summary]

View File

@ -4,14 +4,14 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.server
(ns benches.render-wasm.node.runner.server
"An owned loopback HTTP server for one immutable renderer build."
(:require
["fs" :as fs]
["http" :as http]
["path" :as path]
[benches.render-wasm.node.files :as files]
[benches.render-wasm.node.options :as options]
[benches.render-wasm.node.settings :as settings]
[clojure.string :as str]))
(def ^:private mime
@ -113,7 +113,7 @@
has a 30000 ms default timeout and accepts an optional AbortSignal. Abort,
timeout and listen errors close the owned server before rejecting."
([build] (open build {}))
([build {:keys [startup-timeout-ms signal] :or {startup-timeout-ms options/default-startup-timeout-ms}}]
([build {:keys [startup-timeout-ms signal] :or {startup-timeout-ms settings/default-startup-timeout-ms}}]
(js/Promise.
(fn [resolve reject]
(let [root (fs/realpathSync (:dir build))

View File

@ -0,0 +1,11 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.settings
"Shared operational defaults.")
(def default-build-timeout-ms 300000)
(def default-startup-timeout-ms 30000)

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.artifacts
(ns benches.render-wasm.node.storage.artifacts
"Managed renderer builds and output homes for benchmark runs and comparisons.
Here, 'managed' means that the runner owns the build directory and its

View File

@ -4,7 +4,7 @@
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns benches.render-wasm.node.runs
(ns benches.render-wasm.node.storage.runs
"Manages saved run destinations, schema:run persistence and diagnostic logs.
Runs are saved under <frontend>/target/performance/render-wasm/runs.
@ -14,8 +14,8 @@
(:require
["fs" :as fs]
["path" :as path]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.files :as files]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.result :as result]
[clojure.string :as str]))

View File

@ -10,7 +10,7 @@
[app.common.schema :as sm]
[app.common.transit :as transit]
[benches.render-wasm.codec :as codec]
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.report.analysis :as analysis]))
(def schema:basis

View File

@ -13,8 +13,8 @@
[app.common.transit :as transit]
[benches.render-wasm.codec :as codec]
[benches.render-wasm.identity :as identity]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.catalog :as catalog]
[benches.render-wasm.node.catalog.loader :as catalog]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[cljs.test :as t :include-macros true]))
(def ^:private temporary-root (atom nil))

View File

@ -13,9 +13,9 @@
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.identity :as identity]
[benches.render-wasm.node.browser :as browser]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.server :as server]
[benches.render-wasm.node.runner.browser :as browser]
[benches.render-wasm.node.runner.server :as server]
[cljs.test :as t :include-macros true]))
(def ^:private temporary-root (atom nil))

View File

@ -16,8 +16,8 @@
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.errors :as errors]
[benches.render-wasm.node.build :as build]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.runner.build :as build]
[cljs.test :as t :include-macros true]
[clojure.string :as str]))

View File

@ -677,7 +677,7 @@ test(
assert.match(result.stderr, /renderer build preparation failed/);
assert.match(
result.stderr,
/type\s+:benches.render-wasm.node.build\/preparation-failed/,
/type\s+:benches.render-wasm.node.runner.build\/preparation-failed/,
);
assert.match(result.stderr, new RegExp(`build\\s+${id}`));
assert.ok(result.stderr.includes(logPath));

View File

@ -7,8 +7,8 @@
(ns performance-tests.render-wasm.cli-test
(:require
[app.common.schema :as sm]
[benches.render-wasm.node.cli :as cli]
[benches.render-wasm.node.request :as request]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.cli.resolve :as cli]
[cljs.test :as t :include-macros true]
[clojure.string :as str]))

View File

@ -11,9 +11,9 @@
["os" :as os]
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.node.compare :as compare]
[benches.render-wasm.node.execution :as execution]
[benches.render-wasm.node.cli.execution :as execution]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.report.compare :as compare]
[benches.render-wasm.report.compare :as report-compare]
[benches.render-wasm.result :as result]
[cljs.test :as t :include-macros true]

View File

@ -14,10 +14,10 @@
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.errors :as errors]
[benches.render-wasm.node.cli :as cli]
[benches.render-wasm.node.execution :as execution]
[benches.render-wasm.node.cli.execution :as execution]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.cli.resolve :as cli]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.request :as request]
[cljs.test :as t :include-macros true]
[clojure.string :as str]))

View File

@ -6,25 +6,25 @@
(ns performance-tests.render-wasm.feature-comparison-test
(:require
["fs" :as fs]
["node:timers/promises" :as timers]
["os" :as os]
["path" :as path]
[benches.render-wasm.cases :as cases]
[benches.render-wasm.declarations :as decl]
[benches.render-wasm.errors :as errors]
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.node.build :as build]
[benches.render-wasm.node.execution :as execution]
[benches.render-wasm.node.feature-comparison :as feature-comparison]
[benches.render-wasm.node.files :as files]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.request :as request]
[benches.render-wasm.result :as result]
[cljs.test :as t :include-macros true]
[clojure.string :as str]
[frontend-tests.helpers.mock :as mock]))
["fs" :as fs]
["node:timers/promises" :as timers]
["os" :as os]
["path" :as path]
[benches.render-wasm.cases :as cases]
[benches.render-wasm.declarations :as decl]
[benches.render-wasm.errors :as errors]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.node.cli.execution :as execution]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.files :as files]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.process :as process]
[benches.render-wasm.node.runner.build :as build]
[benches.render-wasm.node.runner.feature-comparison :as feature-comparison]
[benches.render-wasm.result :as result]
[cljs.test :as t :include-macros true]
[clojure.string :as str]
[frontend-tests.helpers.mock :as mock]))
(def ^:private temporary-root (atom nil))

View File

@ -7,7 +7,7 @@
(ns performance-tests.render-wasm.request-test
(:require
[app.common.schema :as sm]
[benches.render-wasm.node.request :as request]
[benches.render-wasm.node.cli.request :as request]
[cljs.test :as t :include-macros true]
[performance-tests.render-wasm.test-helpers :refer [failure-data]]))

View File

@ -11,13 +11,13 @@
["path" :as path]
[app.common.transit :as transit]
[benches.render-wasm.errors :as errors]
[benches.render-wasm.feature-plan :as feature-plan]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.feature-comparison :as feature-comparison]
[benches.render-wasm.features.plan :as feature-plan]
[benches.render-wasm.node.cli.request :as request]
[benches.render-wasm.node.log :as log]
[benches.render-wasm.node.request :as request]
[benches.render-wasm.node.run :as run]
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.runner.feature-comparison :as feature-comparison]
[benches.render-wasm.node.runner.run :as run]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.result :as result]
[cljs.test :as t :include-macros true]
[clojure.string :as str]))

View File

@ -9,8 +9,8 @@
["fs" :as fs]
["os" :as os]
["path" :as path]
[benches.render-wasm.node.artifacts :as artifacts]
[benches.render-wasm.node.runs :as runs]
[benches.render-wasm.node.storage.artifacts :as artifacts]
[benches.render-wasm.node.storage.runs :as runs]
[benches.render-wasm.result :as result]
[cljs.test :as t :include-macros true]
[clojure.string :as str]))

View File

@ -11,7 +11,7 @@
["net" :as net]
["os" :as os]
["path" :as path]
[benches.render-wasm.node.server :as server]
[benches.render-wasm.node.runner.server :as server]
[cljs.test :as t :include-macros true]))
(def ^:private temporary-root (atom nil))