render: reduce WebCanvas layer adapter and split option metadata#1346
render: reduce WebCanvas layer adapter and split option metadata#1346seo-rii wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
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
RenderNoderebuilding with directPaintOpreplay viarender_paint_opand extractedrender_*helpers. - LayerTree JSON: bump schema minor version and emit
buildOptions/debugOptionsplususedFeaturesflag 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.
|
PR #1346 수용 처리 완료했습니다. 반영 방식:
검증:
GitHub Canvas visual diff도 pass였고, 관련 이슈 #536은 멀티 렌더러 tracking issue이므로 이 PR 처리로 닫지 않습니다. 기여 감사합니다. |
What
PaintOpleaf를 임시RenderNode로 다시 조립하지 않고 직접 replay하도록 정리합니다.RenderNode경로와 WebCanvas layer 경로가 같은 leaf drawing helper를 쓰게 하되, transform restore 시점은 기존RenderNode경로와 동일하게 유지합니다.PageLayerTreeschema minor를1.16으로 올리고 top-levelbuildOptions/debugOptions를 추가합니다. 기존outputOptionsmirror는 호환을 위해 유지합니다.PageLayerTreebridge/type/test를 업데이트해서 old/new JSON 모두 canonical option metadata로 normalize합니다.Non-goals
outputOptionsmirror를 제거하지 않습니다. 외부 소비자 호환을 위해 이번 PR에서는 유지합니다.Compatibility
outputOptions.showTransparentBorders,outputOptions.clipEnabled,outputOptions.debugOverlay는 compatibility mirror로 남아 있습니다.buildOptions.showTransparentBorders,buildOptions.clipEnabled,debugOptions.debugOverlay를 canonical metadata로 보면 됩니다.outputOptions값으로 normalize합니다.Validation
cargo fmt --checkCARGO_INCREMENTAL=0 cargo test --lib serializes_layer_option_metadata -- --nocaptureCARGO_INCREMENTAL=0 cargo test --lib test_page_layer_tree_export_preserves_output_options -- --nocaptureCARGO_INCREMENTAL=0 cargo test --lib layer_tree_schema_constants_match_schema -- --nocaptureCARGO_INCREMENTAL=0 cargo test --test render_p22_web_canvas_contract -- --nocaptureCARGO_INCREMENTAL=0 cargo check --lib --target wasm32-unknown-unknown -j 2node --test rhwp-studio/tests/render-backend.test.tsNotes
cargo check --target wasm32-unknown-unknown는 CLI bin까지 체크하면서 기존 bin wasm 비지원 코드에서 실패합니다. WebCanvas가 포함되는 lib target은 위의cargo check --lib --target wasm32-unknown-unknown로 통과했습니다.Relates #536