| # ============================================================================ |
| # Apache Juneau — per-module test performance baselines. |
| # |
| # Relocated from juneau-utest/perf-baseline.txt to the project root by TODO-160 |
| # so the perf subsystem can track every reactor module, not just juneau-utest. |
| # |
| # FORMAT — one entry per line: |
| # <key> = <seconds> # optional trailing comment |
| # |
| # key = "suite" |
| # Overall reactor wall-clock baseline (subprocess time of `mvn test`). |
| # Compared against the measured wall-clock by scripts/test.py --enforce-perf. |
| # |
| # key = "<module>/<bucket>" |
| # Per-module Surefire XML aggregate test-time baseline. |
| # <module> = module path relative to the repo root (e.g. "juneau-integration-tests", |
| # "juneau-core/juneau-junit5"); MAY contain '/'. |
| # <bucket> ∈ { core, container.springboot, container.jetty, container.tomcat }. |
| # The owning module is the parent of <module>/target/surefire-reports. |
| # Parsed by splitting the key on its LAST '/'. |
| # |
| # Tolerance: ±20% by default (env JUNEAU_CI_PERF_THRESHOLD, a decimal fraction), |
| # applied per module AND to the suite total. |
| # |
| # New/unknown module handling: a module with NO entry here is treated as new — |
| # the guard WARNS but does NOT hard-fail, so the baseline degrades gracefully as |
| # TODO-160 migrates tests into co-located modules. |
| # |
| # Consumers: scripts/test.py (run_perf_guard / write_timing_log) and |
| # scripts/ci-perf-guard.py. |
| # |
| # To re-baseline: run `python3 scripts/test.py --full --timing-log /tmp/juneau-timing.jsonl`, |
| # read the per-module wallclock values from the JSONL (or the run's surefire reports), |
| # and update the entries below. |
| # |
| # Parsing note: blank lines, lines beginning with '#', the [observability] section |
| # below, and any non-"suite" key without a '/' (e.g. the observability metric) are |
| # ignored by the per-module perf-guard parser. |
| # ============================================================================ |
| |
| # 2026-07-17 parallel-model re-baseline (set by TODO-252, superseding the FINISHED-232 serial |
| # baseline): warm-machine full-suite runs via `python3 scripts/test.py --full`, PARALLEL execution |
| # model — reactor `mvn -T1C` parallel *module* builds (enabled in scripts/test.py) + Surefire |
| # `forkCount=8` on the juneau-integration-tests core bucket. 135,210 tests. |
| # |
| # IMPORTANT — reading these numbers under the parallel model: |
| # * The 'suite' value is the AUTHORITATIVE metric: it is the real subprocess wall-clock of the |
| # parallel `mvn test` phase. Measured 122-130s across 3 green runs (was 281s serial ≈ -55%). |
| # * The per-'<module>/<bucket>' values are NOT real wall-clock under -T. scripts/test.py derives |
| # them by SUMMING each test class's Surefire <time> for the module; under -T1C those per-class |
| # wall-times are inflated by CPU contention (up to 16 module builds run concurrently) and, for |
| # forked buckets, further multiplied by forkCount (e.g. integration-tests/core sums ~230s across |
| # its 8 forks while its real module wall-clock is a fraction of that). They are therefore |
| # ADVISORY only — self-consistent within this fixed -T1C+forkCount=8 model, useful for catching a |
| # large per-module regression, but not comparable to the old serial per-module seconds. |
| # * Values below are the MAX observed across the 3 re-baseline runs (rounded up) so normal |
| # warm-cache/JIT variance does not trip the ±20% guard; only a real >20%-over-worst jump fires. |
| suite = 130 # parallel wall-clock; measured 122-130s across 3 runs. |
| juneau-integration-tests/core = 252 # -T+forkCount=8 summed/inflated (real module wall-clock far lower); time-dominant. |
| juneau-integration-tests/container.springboot = 5.5 |
| juneau-integration-tests/container.jetty = 9 # startup/shutdown-variable. |
| juneau-microservice/juneau-microservice-examples/core = 22.5 |
| juneau-core/juneau-marshall/core = 17.5 # 76,973 tests (count-dominant, fast in-memory). |
| juneau-core/juneau-marshall-rdf/core = 15.5 # 21,921 tests. |
| juneau-rest/juneau-rest-server-auth-saml/core = 13.5 |
| juneau-rest/juneau-rest-server-springboot/container.springboot = 11.5 |
| juneau-rest/juneau-rest-server-view-jsp/core = 10 |
| juneau-petstore/juneau-petstore-jetty/container.jetty = 9.5 |
| juneau-petstore/juneau-petstore-springboot/container.springboot = 9.5 |
| juneau-rest/juneau-rest-server-view-thymeleaf/core = 8.5 |
| juneau-rest/juneau-rest-server-auth-jwt/core = 7.5 |
| juneau-rest/juneau-rest-server-metrics-micrometer/core = 7.5 |
| juneau-rest/juneau-rest-server-view-freemarker/core = 7.5 |
| juneau-microservice/juneau-microservice/core = 7.5 # embedded-server startup heavy; time-variable. |
| juneau-rest/juneau-rest-server-mcp-v20250618/core = 11 # bumped from 7.5 for TODO-312c4 resource-template + completion tests (measured 9.1s). |
| juneau-rest/juneau-rest-server-view-mustache/core = 7 |
| juneau-rest/juneau-rest-server-auth-oidc-rp/core = 6.6 |
| juneau-rest/juneau-rest-server-mcp/core = 6 # re-measured post-relayering (TODO-312a Task 16); most tests moved to the adapter module below. |
| juneau-rest/juneau-rest-server-tracing-otel/core = 6 |
| juneau-bean/juneau-bean-html5/core = 5.5 # 12,427 tests. |
| juneau-rest/juneau-rest-server-mcp-v20260728/core = 9.5 # bumped from 6.5 for TODO-312c4 resource-template + completion tests (measured 7.9s). |
| juneau-core/juneau-config/core = 4 |
| juneau-petstore/juneau-petstore-core/core = 4.5 |
| juneau-rest/juneau-rest-server-reactive/core = 4 |
| juneau-bean/juneau-bean-common/core = 2.8 |
| juneau-microservice/juneau-microservice-jetty/core = 3 |
| juneau-bean/juneau-bean-jsonschema/core = 2.5 |
| juneau-rest/juneau-rest-server/core = 2.6 |
| juneau-rest/juneau-rest-mock/core = 2.3 |
| juneau-rest/juneau-rest-server-auth-oauth/core = 2.5 |
| juneau-core/juneau-commons/core = 2.2 # 5,311 tests. |
| juneau-bean/juneau-bean-jsonrpc/core = 2 # re-measured post-relayering (TODO-312a Task 16); new module, JSON-RPC 2.0 envelope beans. |
| juneau-bean/juneau-bean-atom/core = 2 |
| juneau-bean/juneau-bean-jsonapi/core = 2 |
| juneau-bean/juneau-bean-hal/core = 2 |
| juneau-bean/juneau-bean-jsonpatch/core = 2 |
| juneau-bean/juneau-bean-openapi-v3/core = 1.5 |
| juneau-bean/juneau-bean-swagger-v2/core = 1.3 |
| juneau-bean/juneau-bean-mcp-v20250618/core = 1.8 # bumped from 1.2 for TODO-312c4 resource-template + completion tests (measured 1.5s). |
| juneau-bean/juneau-bean-mcp-v20260728/core = 1.5 # bumped from 1.0 for TODO-312c4 resource-template + completion tests (measured 1.2s). |
| |
| # ─── [observability] ────────────────────────────────────────────────────────── |
| # |
| # Consumed by scripts/microbench.py — NOT by the per-module perf guard. |
| # |
| # Baseline for the JMH ObservabilityNoopBenchmark (TODO-116). |
| # Metric: gc.alloc.rate.norm = bytes allocated per benchmark invocation. |
| # Assertion threshold: ≤ 8 bytes/op (see scripts/microbench.py --threshold). |
| # |
| # To re-baseline: run `python3 scripts/microbench.py observability`, |
| # read the reported gc.alloc.rate.norm, and update the line below. |
| # |
| # Measured on: developer M1 Pro laptop (Apple M1 Pro, Zulu JDK 25, forks=0). |
| # Note: forks=0 means the benchmark shares the JVM with Maven (exec:java). |
| # Numbers are still valid for allocation assertions since gc.alloc.rate.norm |
| # is deterministic per invocation modulo JIT warm-up. |
| # |
| observability-noop-alloc-bytes-per-op = 0.000 # as of 2026-05-28; set by FINISHED-116. |