The GitHub Actions job "SiteMesh 2 Compatibility" on 
grails-core.git/perf/request-path-8.0.x has succeeded.
Run started by GitHub user codeconsole (triggered by codeconsole).

Head commit for run:
8d315b7369663c287063ffc00fbe93b45b69c1f6 / Scott Murphy Heiberg 
<[email protected]>
Fold the request-path benchmarks into grails-benchmarks

PR #16071 landed a `grails-benchmarks` module using the same package root as
`grails-web-benchmarks`, with a comparison tool (`BenchmarkComparator`,
`JmhCompare`, `CommentPoster`, sharding and golden-file tests) that automates
the before/after comparison this branch was doing by hand. Move the
request-path benchmarks into it and delete `grails-web-benchmarks`.

Ported, regrouped into the package-per-subsystem layout the report aggregates
on, and reworked to that module's conventions - benchmarks in `src/jmh/java`,
setup in Groovy fixtures under `src/main/groovy`:

  controllers  ControllerActionBenchmark, ControllerMappingCollectionBenchmark
  interceptors InterceptorChainBenchmark
  web          GrailsWebRequestBenchmark, MultipartResolutionBenchmark,
               RequestPropertyAccessBenchmark

Because the fixtures live in `main`, which the jmh plugin puts on the jmh
compile classpath, the `UrlMappingsDefinition` / `InterceptorFactory` /
`RequestPropertyReader` interfaces and their `Class.forName` lookups are gone -
the Java benchmarks call the Groovy fixtures directly.

`UrlMappingBenchmark` is dropped. Its `matchCachedHit` and
`matchRestfulUriCacheMiss` duplicate `UrlMappingsBenchmark.matchWarmCache` and
`matchColdVariedKeys`. The one shape it measured that upstream did not - a cold
URI that only the catch-all `"/$controller/$action?/$id?"` mapping can serve, so
every earlier mapping is considered and rejected before the match succeeds - is
added to `UrlMappingsBenchmark` as `matchColdCatchAllFallThrough`. On the
existing fixture that costs ~568 ns against ~411 ns for a cold URI the first
mapping serves.

BASELINE.md is dropped: paired before/after numbers are what the new report
tooling produces per pull request. Its measured results, from two full suites
run back to back on an idle M4 Max under JDK 21.0.7 (2 forks, 5x1s warmup +
5x1s measurement), were:

  ControllerActionBenchmark.plainAction                  34.795 ->  3.592  
-89.7%
  InterceptorChainBenchmark.oneInterceptorNoOpRegistry  295.293 -> 127.541 
-56.8%
  InterceptorChainBenchmark.threeInterceptorsNoOp      1116.942 -> 545.608 
-51.2%
  InterceptorChainBenchmark.threeInterceptorsObserving 1972.929 ->1134.393 
-42.5%
  GrailsWebRequestBenchmark.construct                    16.283 -> 11.710  
-28.1%
  UrlMappingBenchmark.matchRestfulUriCacheMiss         1549.992 ->1287.754 
-16.9%
  UrlMappingBenchmark.matchDefaultMappingUriCacheMiss  1881.323 ->1595.361 
-15.2%

The request-attribute counts `ControllerActionBenchmark` prints at setup are the
independent evidence for the controller result and are unchanged by the move: an
action on a controller with no `allowedMethods` performs no attribute operations
at all, while one that declares `allowedMethods` still performs 2/1/1.

`grails-benchmarks/build.gradle` gains `:grails-controllers`,
`:grails-web-databinding`, `:grails-mimetypes`, `micrometer-observation` and
`spring-webmvc`. The suite stays opt-in: `build` compiles the benchmarks, only
the explicit `jmh` task runs them.

Report URL: https://github.com/apache/grails-core/actions/runs/32052863087

With regards,
GitHub Actions via GitBox

Reply via email to