Skip to content

render: reduce WebCanvas layer adapter and split option metadata#1346

Closed
seo-rii wants to merge 4 commits into
edwardkim:develfrom
seo-rii:render-p22
Closed

render: reduce WebCanvas layer adapter and split option metadata#1346
seo-rii wants to merge 4 commits into
edwardkim:develfrom
seo-rii:render-p22

Conversation

@seo-rii

@seo-rii seo-rii commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

What

  • WebCanvas layer replay에서 core PaintOp leaf를 임시 RenderNode로 다시 조립하지 않고 직접 replay하도록 정리합니다.
  • 기존 RenderNode 경로와 WebCanvas layer 경로가 같은 leaf drawing helper를 쓰게 하되, transform restore 시점은 기존 RenderNode 경로와 동일하게 유지합니다.
  • PageLayerTree schema minor를 1.16으로 올리고 top-level buildOptions / debugOptions를 추가합니다. 기존 outputOptions mirror는 호환을 위해 유지합니다.
  • Studio PageLayerTree bridge/type/test를 업데이트해서 old/new JSON 모두 canonical option metadata로 normalize합니다.
  • README의 renderer phase 설명을 P21/P22 상태에 맞게 갱신합니다.

Non-goals

  • public Canvas route를 다시 전환하지 않습니다. 이미 layer 기반인 경로의 내부 adapter risk만 줄입니다.
  • CanvasKit/native Skia/PDF replay coverage를 넓히지 않습니다.
  • legacy outputOptions mirror를 제거하지 않습니다. 외부 소비자 호환을 위해 이번 PR에서는 유지합니다.

Compatibility

  • outputOptions.showTransparentBorders, outputOptions.clipEnabled, outputOptions.debugOverlay는 compatibility mirror로 남아 있습니다.
  • 새 소비자는 buildOptions.showTransparentBorders, buildOptions.clipEnabled, debugOptions.debugOverlay를 canonical metadata로 보면 됩니다.
  • 구버전 WASM에서 새 option metadata가 없으면 Studio bridge가 기존 outputOptions 값으로 normalize합니다.

Validation

  • cargo fmt --check
  • CARGO_INCREMENTAL=0 cargo test --lib serializes_layer_option_metadata -- --nocapture
  • CARGO_INCREMENTAL=0 cargo test --lib test_page_layer_tree_export_preserves_output_options -- --nocapture
  • CARGO_INCREMENTAL=0 cargo test --lib layer_tree_schema_constants_match_schema -- --nocapture
  • CARGO_INCREMENTAL=0 cargo test --test render_p22_web_canvas_contract -- --nocapture
  • CARGO_INCREMENTAL=0 cargo check --lib --target wasm32-unknown-unknown -j 2
  • node --test rhwp-studio/tests/render-backend.test.ts

Notes

  • 전체 cargo check --target wasm32-unknown-unknown는 CLI bin까지 체크하면서 기존 bin wasm 비지원 코드에서 실패합니다. WebCanvas가 포함되는 lib target은 위의 cargo check --lib --target wasm32-unknown-unknown로 통과했습니다.

Relates #536

@edwardkim edwardkim added the enhancement New feature or request label Jun 8, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone Jun 8, 2026
@jangster77

Copy link
Copy Markdown
Collaborator

https://open.kakao.com/o/gQ2PMJui 초대합니다.

@seo-rii seo-rii marked this pull request as ready for review June 9, 2026 13:20
Copilot AI review requested due to automatic review settings June 9, 2026 13:20

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.

This PR refactors the WebCanvas layer replay path to render PaintOp leaves directly (avoiding temporary RenderNode construction) and evolves the PageLayerTree JSON contract to separate canonical buildOptions/debugOptions from replay outputOptions while keeping compatibility mirrors.

Changes:

  • WebCanvas: replace per-op RenderNode rebuilding with direct PaintOp replay via render_paint_op and extracted render_* helpers.
  • LayerTree JSON: bump schema minor version and emit buildOptions/debugOptions plus usedFeatures flag for option metadata.
  • Studio bridge/types/tests: add build/debug option normalization and update contract tests/docs accordingly.

Reviewed changes

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

Show a summary per file
File Description
tests/render_p22_web_canvas_contract.rs Adds a source-level contract test to ensure WebCanvas leaf replay calls render_paint_op and avoids RenderNode::new.
src/wasm_api/tests.rs Updates WASM API tests for new JSON option metadata structure.
src/renderer/web_canvas.rs Refactors rendering to replay PaintOp leaves directly and extracts rendering helpers per node type.
src/paint/schema.rs Bumps schema_minor_version to reflect additive JSON changes.
src/paint/json.rs Emits buildOptions/debugOptions sections and updates used-features metadata and tests.
rhwp-studio/tests/render-backend.test.ts Adds a contract test asserting bridge-side normalization of build/debug options.
rhwp-studio/src/core/wasm-bridge.ts Adds build/debug options defaults + normalization when bridging PageLayerTree.
rhwp-studio/src/core/types.ts Extends PageLayerTree typings with buildOptions/debugOptions and documents outputOptions mirrors.
README_EN.md Documents P22 changes to WebCanvas replay + option metadata split.
README.md Documents P21/P22 changes in the roadmap/renderer notes.

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

Comment thread rhwp-studio/src/core/wasm-bridge.ts Outdated
Comment thread rhwp-studio/src/core/wasm-bridge.ts
Comment thread rhwp-studio/src/core/wasm-bridge.ts Outdated
Comment thread tests/render_p22_web_canvas_contract.rs Outdated
Comment thread src/wasm_api/tests.rs Outdated
@edwardkim edwardkim self-requested a review June 9, 2026 23:20
edwardkim pushed a commit that referenced this pull request Jun 9, 2026
@edwardkim

Copy link
Copy Markdown
Owner

PR #1346 수용 처리 완료했습니다.

반영 방식:

  • PR 브랜치의 non-merge commit 3개를 현재 devel 기준으로 cherry-pick했습니다.
  • PR 내부 동기화 merge commit 68683a26은 제외했습니다.
  • devel 병합 커밋: 2bc411f4

검증:

  • cargo fmt --check
  • git diff --check
  • PageLayerTree option metadata 관련 Rust 단위 테스트
  • tests/render_p22_web_canvas_contract
  • rhwp-studio render backend node test
  • wasm32-unknown-unknown cargo check
  • Docker WASM build

GitHub Canvas visual diff도 pass였고, outputOptions compatibility mirror가 유지되어 기존 소비자 호환성도 확인했습니다.

관련 이슈 #536은 멀티 렌더러 tracking issue이므로 이 PR 처리로 닫지 않습니다.

기여 감사합니다.

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.

4 participants