mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-02 18:13:39 +00:00
539f5bd58f
* perf(algo): row-parallel local_sharpen with fast-path protect_detail (#5426) Refs #5426. Follow-up to #5499. Cause: While #5499 parallelized local_blur and the per-dab mix in DabTool::Focus, local_sharpen in crates/algo/src/retouch.rs remained single-threaded. In addition, protect_detail redundantly evaluated coordinate clamping and strided memory lookups across 8 neighbors inside the per-channel inner loop for every pixel in the dab. On large brush sizes (e.g. 1000–2500 px), strokes took seconds and stalled the application. Change: - Process local_sharpen window rows in parallel with Rayon across threads, with wasm32 serial fallback matching local_blur. - Hoist protect_detail 3x3 neighborhood offset calculations outside the channel loop. - Fast-path interior pixels (x > 0 && x + 1 < w && y > 0 && y + 1 < h) with direct stride offsets, skipping boundary clamping entirely for >99.9% of pixels in large brush dabs. - Add retouch_sharpen_exact integration test verifying bit-for-bit parity against the frozen scalar implementation across layouts, edges, and channels. * bench(engine): add bench_sharpen_tool example