tp/docs/BENCHMARKS.md
Kinneyzhang 0d35358e05 refactor(tp)!: implement retained reactive runtime
Replace the legacy managed layer renderer with one independent retained/reactive text runtime. TP now owns exact dependencies, stable objects, marker-backed mounts, property contribution composition, atomic publication, rollback, and direct text-property facades without ECSS or Ebox dependencies.\n\nBREAKING CHANGE: remove tp-render, tp-stack, scan-driven managed layers, inline runtime metadata, TP-owned CSS cascade APIs, and dollar-variable declarations.\n\nVerified: 290/290 ERT, shuffled 290/290 (seed 20260806), 8/8 doctests, WERROR compile-all, checkdoc, package-lint, diff-check, and isolated TP-only load.
2026-08-07 00:39:50 +08:00

2.8 KiB

Reproducible benchmark evidence

Historical TP 0.3 benchmark snapshot; obsolete for TP 1.0. These results measure the removed managed stack, tp-text, layer registry, scan-driven renderer, and 0.3 benchmark runner. They are preserved as historical evidence only and are neither TP 1.0 performance baselines nor current release gates. Current runtime structure and verification expectations are documented in the README, current architecture, and API contract.

Command and environment

make benchmark \
  EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs \
  LOAD_EXTRA='-L /tmp/tp-elpa.Ur243x/dash-2.20.0'
  • Emacs: 30.2
  • Fixed seeds: 1, 7, 42, 747555
  • Reproducible generated seed: 8675309
  • Every scenario performs a correctness assertion before accepting timing.
  • The full command completed successfully on 2026-07-28.

The runner is tp-benchmark.el; make benchmark is the stable entry point. Output rows include scenario, status, fixture, seed, requested/actual size, operations, scanned/changed/refreshed counts, elapsed wall time, and GC count.

Representative result: seed 42

Scenario Requested / actual Operations Scanned Changed Refreshed Elapsed (s) GC
large text 100,000 2 100,000 100,000 0 0.000304 0
large text 1,000,000 2 1,000,000 1,000,000 0 0.000323 0
fragmented intervals 1,000 1 1,000 500 0 0.044254 0
fragmented intervals 10,000 1 10,000 5,000 0 0.404836 1
fragmented intervals 50,000 1 50,000 25,000 0 1.965066 3
stack depth 1 2 2,000 2,000 0 0.000909 0
stack depth 5 6 2,000 2,000 0 0.003204 0
stack depth 20 21 2,000 2,000 0 0.012905 0
stack depth 50 51 2,000 2,000 0 0.037830 0
reactive fan-out 1 / 1 1 1 1 1 0.000763 0
reactive fan-out 10 / 10 1 10 10 10 0.005469 0
reactive fan-out 100 / 100 1 100 100 100 0.051376 0
reactive fan-out 500 / 200 1 200 200 200 0.102989 0
theme refresh 1 / 1 1 1,000 0 1 0.001317 0

The 500-buffer fan-out fixture is intentionally capped at 200 live buffers on local hardware; output reports both requested and actual counts. Theme refresh uses the v1 conservative managed-range strategy.

Interpretation

These figures are advisory, not release thresholds. Fragmented interval count is the clearest scaling risk and should remain the first optimization target. Large-text lookup over one property run and deep-stack top lookup are cheap in this fixture, but those results must not be generalized to fragmented text or repeated stack mutation.