From f5bcf92ce47d7449e6f29a270a3b249d1e0192e9 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Sun, 17 May 2026 02:41:13 +0300 Subject: [PATCH] test(canvas): cover scene cache recovery after drag preview --- tests/engine/render/canvas/cache.test.ts | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/engine/render/canvas/cache.test.ts b/tests/engine/render/canvas/cache.test.ts index dbc35e9dc..dc1a848de 100644 --- a/tests/engine/render/canvas/cache.test.ts +++ b/tests/engine/render/canvas/cache.test.ts @@ -175,4 +175,38 @@ describe('render cache regressions', () => { surface.delete() } }) + + test('scene picture cache recovers after position preview commits', async () => { + const surface = expectDefined(ck.MakeSurface(900, 700), 'preview surface') + const renderer = new SkiaRenderer(ck, surface) + renderer.viewportWidth = 900 + renderer.viewportHeight = 700 + renderer.dpr = 1 + renderer.panX = 0 + renderer.panY = 0 + renderer.zoom = 0.75 + renderer.pageId = graph.getPages()[0].id + + try { + renderPreview(renderer, 10) + expect(renderer.profiler.stats.scenePictureMode).toBe('record') + + const movingNode = expectDefined(graph.getNode(movingNodeId), 'moving node') + const originalX = movingNode.x + graph.updateNodePositionPreview(movingNodeId, originalX + 20, movingNode.y) + renderPreview(renderer, 10) + expect(renderer.profiler.stats.scenePictureMode).toBe('volatile') + expect(renderer.profiler.stats.scenePictureMissReason).toBe('position-preview') + + graph.updateNode(movingNodeId, { x: originalX + 20 }) + renderPreview(renderer, 11) + expect(renderer.profiler.stats.scenePictureMode).toBe('record') + expect(renderer.profiler.stats.scenePictureMissReason).toBe('position-preview-version') + + renderPreview(renderer, 11) + expect(renderer.profiler.stats.scenePictureMode).toBe('hit') + } finally { + surface.delete() + } + }) })