Skip to content

render: expand CanvasKit image replay coverage#1096

Merged
edwardkim merged 3 commits into
edwardkim:develfrom
seo-rii:render-p18
May 25, 2026
Merged

render: expand CanvasKit image replay coverage#1096
edwardkim merged 3 commits into
edwardkim:develfrom
seo-rii:render-p18

Conversation

@seo-rii

@seo-rii seo-rii commented May 23, 2026

Copy link
Copy Markdown
Contributor

What

  • CanvasKit image replay가 layer crop, originalSize, fillMode, transform payload를 소비하도록 확장합니다.
  • image cache key를 imageRef만 보지 않고 base64 payload fingerprint까지 포함하도록 바꿔 같은 ref의 다른 payload 충돌을 막습니다.
  • CanvasKit image helper를 순수 함수로 분리하고 crop/source rect, fill-mode anchor, cache-key 회귀 테스트를 추가합니다.
  • getCanvasKitReplayPlan에서 단순 image는 direct item으로 보고, image effect/brightness/contrast처럼 아직 직접 적용하지 않는 항목은 deterministic detail로 남깁니다.
  • image effect/brightness/contrast는 아직 direct pixel effect로 적용하지 않고 imageEffect:* diagnostics로 드러냅니다.

Why

P17에서 default/compat 모두 hidden Canvas2D overlay 없이 direct replay contract로 고정했습니다. P18은 그 다음 단계로 CanvasKit image replay가 이미 layer JSON에 있는 image geometry payload를 실제로 소비하게 만드는 작업입니다.

특히 crop/fill-mode/transform은 Canvas2D overlay 없이도 CanvasKit이 직접 replay할 수 있는 범위라 이번 PR에 넣고, raster effect/filter와 resource-cache 확장은 후속 범위로 남깁니다.

Compatibility

  • 기본 renderer는 계속 Canvas2D입니다.
  • CanvasKit은 opt-in path입니다.
  • image effect/brightness/contrast는 렌더 결과를 조용히 바꾸지 않고 diagnostics에 남깁니다.
  • public native Skia/PDF API는 바꾸지 않습니다.

Non-goals

  • grayscale/blackWhite/pattern8x8 pixel filter direct 적용은 이 PR에서 닫지 않습니다.
  • RawSvg/WMF/OLE object replay 확장은 후속 PR로 넘깁니다.
  • TextRun effect/glyph payload replay는 별도 gate로 넘깁니다.
  • renderer sweep/WebGPU/performance/PDF는 후속 범위입니다.

Validation

  • npm --prefix rhwp-studio test
  • npm --prefix rhwp-studio run build
  • cargo test canvaskit --lib
  • cargo fmt --check
  • git diff --cached --check

Refs #536

@seo-rii seo-rii marked this pull request as ready for review May 24, 2026 01:04
Copilot AI review requested due to automatic review settings May 24, 2026 01:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds richer CanvasKit image replay support and reporting, including direct-replay classification, image geometry payloads, and CanvasKit-side rendering for crop/fill/transform with improved cache keys.

Changes:

  • Classify image ops as Direct vs Overlay based on supported image effects/adjustments and attach detail payloads for debugging.
  • Implement CanvasKit image rendering for crop, fill-mode anchors, tiling, and transforms; improve image cache key uniqueness.
  • Add Rust and TS tests covering new image replay behaviors (cache key, crop scaling, placement).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/renderer/canvaskit_policy.rs Adds image replay item classification and detail strings; updates/extends replay plan tests for images.
rhwp-studio/src/view/canvaskit/image-replay.ts New shared helpers for image cache keys, crop → source-rect conversion, placement, and tiling detection.
rhwp-studio/src/view/canvaskit-renderer.ts Uses new helpers; adds crop/fill/tiling/transform support and tighter validation around image drawing.
rhwp-studio/src/core/types.ts Extends LayerImageOp with originalSize/crop/transform metadata needed by the renderer.
rhwp-studio/tests/render-backend.test.ts Adds tests for image cache key fingerprinting, crop scaling, and placement anchors.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/renderer/canvaskit_policy.rs Outdated
Comment thread rhwp-studio/src/view/canvaskit-renderer.ts Outdated
Comment thread rhwp-studio/src/view/canvaskit/image-replay.ts Outdated
Comment thread rhwp-studio/src/view/canvaskit-renderer.ts Outdated
Comment thread rhwp-studio/src/view/canvaskit/image-replay.ts
@edwardkim edwardkim self-requested a review May 24, 2026 12:24
@edwardkim edwardkim added the enhancement New feature or request label May 24, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone May 24, 2026
@edwardkim edwardkim merged commit 6cbd25e into edwardkim:devel May 25, 2026
7 checks passed
edwardkim added a commit that referenced this pull request May 25, 2026
- pr_1096_review.md: 검토 (P-series 컨텍스트 + 코드 정독 + scope 명확)
- pr_1096_report.md: 최종 결정 — merge 수용 (검증 7/7 + CI 전부 pass)

본 PR 의 본질:
- CanvasKit image replay 가 crop/originalSize/fillMode/transform payload 직접 소비
- image cache key 강화 (base64 fingerprint, 같은 ref 다른 payload 충돌 방지)
- 순수 함수 helper 분리 (image-replay.ts 신규) + 회귀 테스트 4
- replay item 분류 (direct vs deterministic detail) — effect/brightness/contrast 후속

검증:
- cargo test canvaskit: 18 passed
- lib 1341 passed / 0 failed
- clippy + fmt clean
- npm test 34 passed
- npm run build 성공
- CI 전부 pass

호환성:
- 기본 Canvas2D 무영향
- CanvasKit opt-in path 만 확장
- public Skia/PDF API 변경 없음

merge: 6cbd25e (GitHub admin merge — BEHIND 상태 우회, CI/검증 모두 통과 확인 후), 이슈 #536 은 트래킹 유지 (P19+ 후속).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants