mirror of
https://github.com/penpot/penpot.git
synced 2026-11-05 01:20:38 +00:00
♻️ Reorganize benchmark runner, reporting and cli
This commit is contained in:
parent
61c5ef8854
commit
8c3a489e33
@ -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
|
||||
|
||||
@ -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})))
|
||||
@ -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))
|
||||
@ -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
|
||||
@ -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]
|
||||
@ -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"]
|
||||
@ -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)
|
||||
@ -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]
|
||||
@ -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]
|
||||
@ -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]))
|
||||
@ -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
|
||||
@ -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))))
|
||||
|
||||
@ -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]
|
||||
@ -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.
|
||||
@ -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]}]
|
||||
@ -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
|
||||
|
||||
@ -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]
|
||||
@ -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]))
|
||||
|
||||
@ -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)))
|
||||
|
||||
@ -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]))
|
||||
@ -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
|
||||
@ -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)
|
||||
@ -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"
|
||||
@ -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
|
||||
@ -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]
|
||||
@ -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))
|
||||
11
frontend/performance/benches/render_wasm/node/settings.cljs
Normal file
11
frontend/performance/benches/render_wasm/node/settings.cljs
Normal 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)
|
||||
@ -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
|
||||
@ -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]))
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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]))
|
||||
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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]))
|
||||
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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]))
|
||||
|
||||
|
||||
@ -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))
|
||||
|
||||
|
||||
@ -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]]))
|
||||
|
||||
|
||||
@ -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]))
|
||||
|
||||
@ -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]))
|
||||
|
||||
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user