Files
OpenNest/docs/performance/cutting-planner-native-cache.md
T

27 lines
1.6 KiB
Markdown

# Cutting-planner native curve reuse
The opt-in 144-part synthetic grid probe measures only `CuttingPlanService.Plan`, not build,
fixture creation, assertions, desktop rendering or posting:
```sh
OPENNEST_RUN_CUTTING_PERF=1 dotnet test OpenNest.Tests/OpenNest.Tests.csproj -c Release \
--filter 'FullyQualifiedName~ReorderSearchTests.DenseGrid144_PerformanceProbe' \
--logger 'console;verbosity=detailed'
```
Run separate fresh processes on the same machine with build and filesystem caches warm;
there is no in-process plan/JIT warmup, so these are first-call measurements. Compare
`Cutting144 elapsedMs`, `expansions`, `status` and `executionSha256`. The hash covers
expanded owned motions (including called hole programs), their layers, rapid flags,
exact coordinate bits, curve type and arc/circle parameters in source order; it does
not claim byte-identical authored G-code flags or post output. The test also requires
a Ready, independently replayed result and exact source-part conservation. Without
the environment flag it skips. Timing is diagnostic, not a deadline assertion.
The native curve wrapper now lazily owns one private native `Entity` for repeated
contact/containment queries. `ToEntity()` still makes a fresh object for other callers.
No lead or rapid check is skipped: long-lead/tiny-circle numerical contacts make a
fixed-extent material prefilter unsafe. Retest the cutting-planner and native-contact
regressions, especially near tangencies, repeated/concurrent queries and incomplete
material; do not infer posted NC or machine acceptance from this probe.