Miguel de Benito Delgado 756541939a
🔧 Add renderer benchmark runner (#12756)
Add a CLI under frontend/performance/benches/render_wasm that builds the
renderer, runs seeded scenes (rects, plus, paths, masks) in headless
Chromium and saves per-case timings.

- build, run: prepare or reuse builds; measure cases with warmups,
  repetitions, deadlines
- ab: build and compare Cargo feature configurations
- compare, merge: median changes with bootstrap CIs between saved runs,
  guarded by scene, build and settings checks
- purge: delete managed builds, runs or comparisons
- GPU runs through `run-devenv --gpu`

Lint, format and pnpm scripts now cover performance/ and its tests.

AI-assisted-by: gpt-6.1-sol, deepseek-flash, muse-spark, glm-5.3, gpt6-astra, claude-5.5-sonnet, claude-haiku-5.5
2026-11-12 11:02:34 +01:00

31 lines
1.1 KiB
Clojure

;; 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.runtime.protocol
"Forms for evaluating renderer operations as Promises.
A Promise represents a result that can complete with a value or reject with
a cause. These forms include synchronous errors in that result.")
(defmacro resolve-or-reject
"Evaluates `body` and returns a Promise of its result.
A synchronous throw rejects the Promise."
[& body]
`(try
(js/Promise.resolve (do ~@body))
(catch :default cause#
(js/Promise.reject cause#))))
(defmacro resolve-or-reject-with
"Evaluates `body` and returns a Promise of its result.
A synchronous throw rejects with `on-error`, evaluated with `cause` bound
to the thrown value."
[cause on-error & body]
`(try
(js/Promise.resolve (do ~@body))
(catch :default cause#
(let [~cause cause#]
(js/Promise.reject ~on-error)))))