mirror of
https://github.com/storytold/photocraft.git
synced 2026-11-10 12:22:22 +00:00
* perf: add P85, the app frame after Paste Into on 24 MP (#9329) Track-only row in the redraw area group: Paste Into a 5 % selection (untimed), then time the next kittest frame. Guards: the command moves revision by >= 2 and the frame records a refresh. Prints refresh px. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: P85 re-creates the selection before each Paste Into (#9329) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: a command's redraw area spans all its revisions; count whole redraws of small edits (#9329) Session::dispatch is the one place damage spans revisions: a command that moved the revision more than once reports step_damage of the document before and after it, measured from DocState::damage_from. Deletes note_insert (Paste Into), Stroke Path's hand-made union and the failed compound's None. Debug and test builds count a whole-document redraw of an edit under 25 % in Session::whole_redraws. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: the canvas redraws the damage since the revision it showed (#9329) damage_since, the navigator and the histograms accept any cached revision within DocState::damage_from..revision, not only the one before. The Move tool's Auto-Select clause becomes the generic rule: no pixels changed since the cache. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: P85 shows the selection for a frame before Paste Into (#9329) Without that frame the canvas last showed the revision before select.rect, two commands back, so it redrew everything whatever Paste Into reported. The app always draws frames between a selection and the next command. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: a newly added pattern no layer refers to changes no pixels (#9329) Pattern Stamp copies its pattern into the document on first use, which made a multi-subpath Stroke Path report the whole canvas. Appended patterns are now pixel-equal unless a layer reference could resolve to one. The small-edit sweep also covers layer.translate and layer.showOnly. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf: renumber the Paste Into frame row P85 -> P89 (#9329) Main uses P83-P86 for #10259's open benchmarks. Regenerate docs/scorecard.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * style: rustfmt viewport_pages damage lookup Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Canvas: bound the pattern-reference walk; P89 undoes each paste - `any_layer` stops at the same depth as the file's other layer walks, treating a deeper tree as referring to the pattern. - The Paste Into frame row undoes each paste, untimed, and checks the layer stack is restored, so every sample pastes onto the same document. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Canvas: a same-named pattern a reference still resolves past is bounded - `patterns_pixels_equal` compares where each reference resolves before and after the append, since `pattern::find` tries ids before names. - P89 also undoes its selection each sample and checks the history length is restored; the timed frame is unchanged. - Main's new `damage_since` callers take the `(damage_from, last_damage)` pair. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: FredApps <FredApps@users.noreply.github.com>