Skip to content

render: add renderer baseline sweep reports#1312

Merged
edwardkim merged 10 commits into
edwardkim:develfrom
seo-rii:render-p21
Jun 8, 2026
Merged

render: add renderer baseline sweep reports#1312
edwardkim merged 10 commits into
edwardkim:develfrom
seo-rii:render-p21

Conversation

@seo-rii

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

Copy link
Copy Markdown
Contributor

변경 내용

  • 수동 Full Renderer Sweep workflow와 scripts/renderer_baseline.py를 추가해서 legacy SVG, layer SVG, native Skia PNG, browser Canvas2D/CanvasKit 산출물을 같은 manifest 기준으로 수집할 수 있게 했습니다.
  • scripts/renderer_baseline_manifest.json에는 리뷰 가능한 크기의 대표 샘플 20개만 남겼습니다. 문단/표/이미지/수식/머리말/각주/미주/field/control/exam/form/HWPX/mixed document를 최소 범위로 덮습니다.
  • browser Canvas2D vs CanvasKit, native Skia vs CanvasKit 비교 결과를 JSON/Markdown report로 남기고, profile/category/surface별 summary와 worst comparison을 같이 보여주도록 했습니다.
  • CanvasKit surface 선택/실패/소프트웨어 fallback diagnostic, image effect/performance metric, native/browser capture size drift normalization을 baseline report에 포함했습니다.
  • renderer replay plane 탐지를 paint::replay_order의 shared helper로 옮기고, Skia/WebCanvas 경로가 같은 기준으로 empty replay plane을 건너뛰도록 정리했습니다.

의도

P21은 빠른 PR gate를 더 무겁게 만드는 단계가 아니라, 큰 renderer 전환에서 문제가 났을 때 같은 입력 corpus를 기준으로 결과물을 모아 비교할 수 있는 수동 진단 파이프라인을 만드는 단계입니다. 기본 렌더링 경로를 바꾸지는 않고, 수동 workflow artifact와 로컬 baseline runner로 drift를 추적할 수 있게 하는 쪽에 초점을 뒀습니다.

비범위

  • visual/pixel diff를 기본 CI gate로 강제하지 않습니다.
  • large corpus baseline 확장은 이 PR에서 빼고 후속 data-only PR로 넘깁니다.
  • PDF artifact 수집과 PDF export API 안정화는 이 PR에서 다루지 않습니다.
  • CanvasKit/native Skia의 rendering semantics를 크게 바꾸는 PR은 아닙니다.
  • 생성 산출물인 pkg/, rhwp-studio/dist/, baseline output은 커밋하지 않습니다.

검증

  • cargo fmt --all -- --check
  • cargo check --lib
  • cargo test replay_order --lib
  • node --check rhwp-studio/e2e/helpers.mjs
  • node --check rhwp-studio/e2e/renderer-baseline.mjs
  • node --check rhwp-studio/e2e/renderer-baseline-native-diff.mjs
  • python3 -m json.tool scripts/renderer_baseline_manifest.json
  • python3 scripts/renderer_baseline.py --help
  • python3 scripts/renderer_baseline.py --skip-browser --skip-native --filter paragraph-basic --output /tmp/rhwp-renderer-baseline-smoke-rescoped
  • wasm-pack build --target web --release --no-opt
  • npm --prefix rhwp-studio run build

Refs #536

Comment thread rhwp-studio/e2e/renderer-baseline.mjs Fixed
@edwardkim edwardkim self-requested a review June 6, 2026 13:35
@edwardkim edwardkim added the enhancement New feature or request label Jun 6, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone Jun 6, 2026
@seo-rii seo-rii marked this pull request as ready for review June 8, 2026 00:39
Copilot AI review requested due to automatic review settings June 8, 2026 00:39

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 baseline capture + parity reporting tooling for renderer transition hardening, and optimizes layered rendering by skipping replay planes that are not present in a layer tree.

Changes:

  • Centralize “layer tree contains replay plane” detection in paint and use it in both WebCanvas and Skia renderers.
  • Add baseline capture tooling (manifest + Python driver + Studio E2E scripts) to generate multi-backend artifacts and parity reports.
  • Add a GitHub Actions workflow to run a full renderer sweep and upload artifacts.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/renderer/web_canvas.rs Switches replay-plane presence check to shared paint helper.
src/renderer/skia/renderer.rs Skips rendering replay planes that aren’t present in the layer tree.
src/paint/replay_order.rs Introduces shared layer-tree replay-plane scan helpers + tests.
src/paint/mod.rs Re-exports new replay-plane scan helpers from paint.
scripts/renderer_baseline_manifest.json Adds representative baseline corpus manifest and per-sample thresholds.
scripts/renderer_baseline.py Adds baseline capture driver (native exports + browser captures + reports).
rhwp-studio/package.json Adds baseline E2E script and PNG diff dependencies.
rhwp-studio/e2e/renderer-baseline.mjs Captures per-backend screenshots and generates Canvas2D↔CanvasKit parity report.
rhwp-studio/e2e/renderer-baseline-native-diff.mjs Generates native-skia↔canvaskit parity report from captured artifacts.
rhwp-studio/e2e/helpers.mjs Adds Chrome path resolution, canvas screenshot capture, and PNG diff utilities.
.github/workflows/full-renderer-sweep.yml Adds workflow to run sweep + baseline capture and upload artifacts.
Files not reviewed (1)
  • rhwp-studio/package-lock.json: Language not supported

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

Comment thread rhwp-studio/e2e/renderer-baseline-native-diff.mjs
Comment thread scripts/renderer_baseline.py
Comment thread rhwp-studio/e2e/helpers.mjs
Comment thread rhwp-studio/e2e/helpers.mjs Outdated
Comment thread rhwp-studio/e2e/renderer-baseline.mjs
Comment thread src/paint/mod.rs Outdated
@edwardkim

Copy link
Copy Markdown
Owner

@seo-rii 감사합니다. PR #1312 검토 및 로컬 검증을 완료했습니다.

확인한 내용:

  • 수동 Full Renderer Sweep workflow가 기본 CI gate를 무겁게 만들지 않는 workflow_dispatch 구성임을 확인했습니다.
  • renderer baseline manifest/driver/studio E2E report 경로가 representative corpus 기준으로 동작하는 것을 확인했습니다.
  • Copilot/CodeQL 지적사항은 현재 head 기준으로 반영된 것을 확인했고 관련 review thread를 resolve했습니다.
  • layer_node_has_replay_plane는 internal renderer plumbing으로 유지되어 public API surface 고정 리스크가 낮습니다.

로컬 검증:

  • cargo fmt --all -- --check
  • cargo check --lib
  • cargo test replay_order --lib
  • node --check rhwp-studio/e2e/helpers.mjs
  • node --check rhwp-studio/e2e/renderer-baseline.mjs
  • node --check rhwp-studio/e2e/renderer-baseline-native-diff.mjs
  • python3 -m json.tool scripts/renderer_baseline_manifest.json
  • python3 scripts/renderer_baseline.py --help
  • python3 scripts/renderer_baseline.py --skip-browser --skip-native --filter paragraph-basic --output /tmp/rhwp-renderer-baseline-smoke-pr1312
  • npm --prefix rhwp-studio run build
  • docker compose --env-file .env.docker run --rm wasm

GitHub checks도 모두 통과 상태로 확인했습니다. 이 PR은 수용 방향으로 처리하겠습니다.

@edwardkim edwardkim merged commit 785f5ef into edwardkim:devel Jun 8, 2026
7 checks passed
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.

5 participants