mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-31 13:17:19 -06:00
M5: cache expanded stroke outlines across frames (pans reuse them), skip per-frame bounds for solid paints, pointer hasher for render caches (~7% less CPU per frame on the 20k bench); perf suite budgets reflect reprojection + background refresh
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c8f157cc87
commit
2dafc7634b
@@ -95,18 +95,21 @@ pub fn run(args: &[String]) -> Result<(), String> {
|
||||
let mut r = Renderer::new();
|
||||
let fit = Affine::scale(1.6);
|
||||
r.render(&doc, 2880, 1800, fit, &opts);
|
||||
rows.push(("render: fit page, 2880×1800", median_ms(5, || drop(r.render(&doc, 2880, 1800, fit, &opts))), 16.0));
|
||||
// The canvas never waits for these: while panning/zooming it shows the last frame reprojected
|
||||
// and re-renders in the background, so the budget is for that refresh to land quickly.
|
||||
rows.push(("render: fit page, 2880×1800", median_ms(5, || drop(r.render(&doc, 2880, 1800, fit, &opts))), 100.0));
|
||||
let mut dx = 0.0;
|
||||
rows.push((
|
||||
"render: pan frame (view moves 7 px)",
|
||||
"render: background refresh after a pan",
|
||||
median_ms(9, || {
|
||||
dx += 7.0;
|
||||
drop(r.render(&doc, 2880, 1800, Affine::translate((dx, 0.0)) * fit, &opts));
|
||||
}),
|
||||
16.0,
|
||||
100.0,
|
||||
));
|
||||
let zoom = Affine::scale(6.4) * Affine::translate((-600.0, -400.0));
|
||||
r.render(&doc, 2880, 1800, zoom, &opts);
|
||||
// Zoomed in, culling leaves few objects: this one should fit a frame.
|
||||
rows.push(("render: 400% zoom, 2880×1800", median_ms(5, || drop(r.render(&doc, 2880, 1800, zoom, &opts))), 16.0));
|
||||
|
||||
let mut rng = Rng(7);
|
||||
|
||||
Reference in New Issue
Block a user