render: harden PageLayerTree schema and resource keys#761
Closed
seo-rii wants to merge 1 commit into
Closed
Conversation
This was referenced May 10, 2026
edwardkim
added a commit
that referenced
this pull request
May 10, 2026
…esource keys (P8) Skia native raster 트래킹 (Issue #536) 의 단계적 진전 — P4/P5/P6 후속 P8 (text/image/cache 작업 사전 정리): - paint/schema.rs 신규 모듈 — LayerTreeSchema 단일 관리 (schema_version=1, resource_table_version=1, unit='px', coordinate_system='page-top-left') - paint/resources.rs 함수 신규 — blake3 digest + image/svg_resource_key (kind:algorithm:byte_len:digest 형식) - SvgLayerRenderer + WebCanvasRenderer 영역 LayerOutputOptions 직접 호출 경로 보강 - WASM canvas scale guard 공통 helper 인프라 도입: blake3 crate (Cargo.toml +1). Non-goals (PR 본문 명시): - binary resource interning 미구현 - native Skia text/image/cache replay 변경 부재 - CanvasKit / rhwp-studio resource transport 후속 결정적 검증 — 신규 테스트 6 PASS: - resource_digest_is_stable_and_content_dependent - resource_keys_include_kind_algorithm_length_and_digest - layer_tree_schema_contract_is_stable - normalize_canvas_scale_clamps_request_and_canvas_extent + rejects_invalid_page_dimensions - render_page_consumes_layer_output_options 검증: - cargo build --release ✅ - cargo test --release ALL GREEN - cargo clippy --release --lib -- -D warnings 통과 - cargo check --target wasm32-unknown-unknown --lib 통과 - 광범위 sweep 170/170 same diff=0 - 시각 판정 면제 (작업지시자 결정 — contract 정리 단계 + 결정적 검증 + 회귀 가드) Refs #536
Owner
|
@seo-rii 검토 완료했습니다. 감사합니다. 처리 결과Merge commit: 본질P8 단계 — 이후 text/image/cache 작업 의존할 Layer IR contract 정리. PR #599 (P4) → #626 (P5) → #720 (P6) 의 단계적 진전 (Issue #536 트래킹). 주요 변경
검증
5/10 사이클 — Skia native raster 트래킹의 단단한 기반 정리, 수고하셨습니다. |
Owner
|
Merged. Merge commit: 88d7fd3 |
edwardkim
added a commit
that referenced
this pull request
May 10, 2026
edwardkim
added a commit
that referenced
this pull request
May 10, 2026
P9 단계 — native Skia text replay 영역 기존 TextRunNode payload 영역 더 많이 소비. 단순 glyph drawing 영역 layer payload 의 text metadata 영역 가능 범위 영역 replay. Skia native raster 트래킹 (Issue #536) 의 단계적 진전: - P4 #599 → P5 #626 → P6 #720 → P8 #761 → P9 #769 P9 본질 보강: - char overlap / tab leader / text decoration (underline/strike/overline) - shade/shadow/outline-style effect - emphasis dot (한글 강조점) - vertical rotation (세로쓰기) - output options 영역 control mark replay 인프라 도입 — text_replay.rs 모듈 분리 (P10 → P9 통합): - src/renderer/skia/text_replay.rs 신규 (+748) - renderer.rs 영역 page/layer replay orchestration 영역 집중 - src/renderer/skia/mod.rs 모듈 등록 본 환경 cherry-pick: - 49b540a (P8) → empty (PR #761 머지 완료 영역 동일 본질) → skip - 8f079b1 (P9 본질 1) → cherry-pick - c74fb92 (P9 본질 2, split) → cherry-pick Non-goals (PR 본문 명시): - full text source table / glyph-run IR 미포함 - Skia 영역 기본 public render path 전환 부재 - targeted raster test 외 visual/pixel regression infrastructure 추가 부재 검증: - cargo build/test/clippy --release ALL GREEN - cargo test --features native-skia --lib skia → 28/28 PASS (신규 4건 + 기존 24건) - renders_char_overlap_text_run_as_ink - renders_decorated_text_as_ink - renders_tab_leader_for_empty_text_run - renders_output_control_marks_as_ink - cargo clippy --release --features native-skia --lib -- -D warnings 통과 - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 (skia 만 영역 svg sweep 무영향 입증) - 시각 판정 면제 (작업지시자 결정 — targeted raster + sweep 통과 + Skia 만 변경) Refs #536
edwardkim
added a commit
that referenced
this pull request
May 10, 2026
5/10 + 5/11 사이클 누적 — 외부 기여자 다수 PR 30+ 머지. Cargo.toml + rhwp-vscode/package.json + npm/editor/package.json + rhwp-studio/package.json: 0.7.10 → 0.7.11 rhwp-vscode/CHANGELOG.md: [0.7.11] 항목 추가 핵심 변경: - Skia native raster P8 (#761) + P9 (#769) — Layer IR contract hardening + text replay parity - HWP3 native 렌더링 (#753) — hwp3-sample10 8 단계 정정 + Git LFS pdf-large/ 신규 - 페이지네이션 정정 (#778) — Task #703 다단 컬럼 분배 회귀 정정 - rhwp-studio 인터랙션 (PR #781/#786/#787/#788) — scrollbar/수식/표 셀/도구 모음 결함 정정 - rhwp-studio editor 신규 기능 (PR #728/#748/#750/#760 등) — 표 편집 Undo/Redo + 다단 설정 + 다수 단축키
edwardkim
added a commit
that referenced
this pull request
May 11, 2026
…ract (P11) P11 단계 — P9 영역 영역 text replay parity 후속 영역 영역 Text IR v2 compatibility contract 추가. Skia native raster Issue #536 트래킹 단계적 진전: P4 #599 → P5 #626 → P6 #720 → P8 #761 → P9 #769 → P11 #797 중요: 본 PR 은 GlyphRun 을 기본 경로로 만드는 PR 이 아니라 TextRun v2 compatibility contract 를 완성하는 PR. 4 본질 원칙: - Compatibility first — 모든 backend 가 TextRun fallback 으로 렌더링 가능 - Additive schema — schemaMinorVersion + feature negotiation (기존 consumer 미파괴) - Source traceability — text_sources + TextRun.source span - Placement/cluster metadata — paintStyle/projectionKind/orientation/placement/clusterBasis/clusters/legacyVisuals 신규 인프라: - PaintOp::{CharOverlap, TextControlMark, TabLeader, TextDecoration} — explicit visual ops - PageLayerTree.text_sources + TextSourceTable (export-local) - TextRun.source span + 7 신규 metadata - schemaMinorVersion + resourceTableMinorVersion + feature negotiation - docs/text-ir-v2.md migration contract Renderer 정정 — 4 backend 동기 (feedback_image_renderer_paths_separate 권위 사례): - svg_layer.rs / canvas.rs / skia/renderer.rs / web_canvas.rs — 신규 special visual op skip (double-painting 방지) Non-goals (Still designing): - GlyphRun eligibility / font resource table / cluster basis / fallback diagnostics — P12+ 분리 검증: - cargo build/test/clippy --release ALL GREEN (clippy -D warnings) - native-skia 28/28 PASS (PR #769 인프라 보존) - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 (Compatibility first 원칙 입증) - 시각 판정 면제 (작업지시자 결정 — contract 정합 단계 + 결정적 검증 + sweep 통과) Refs #536
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
P8은 이후 text/image/cache 작업이 기대게 될 Layer IR contract를 먼저 단단하게 잡는 PR입니다.
paint/schema.rs를 추가해서PageLayerTreeJSON schema metadata를 한 곳에서 관리합니다.blake3digest 기반으로 고정하고, key에 kind/algorithm/byte length/digest가 모두 들어가게 했습니다.SvgLayerRenderer와WebCanvasRenderer가 renderer 직접 호출에서도LayerOutputOptions를 소비하도록 보강했습니다.Why
skia브랜치의 다음 큰 묶음은 text replay, image effect, cache/diagnostics로 커지기 쉽습니다. 그 전에 schema version, resource key, output option 전달 규칙을 먼저 고정해 두는 편이 이후 PR에서 diff 원인을 좁히기 좋습니다.이 PR은 렌더링 결과를 크게 바꾸는 단계라기보다는, 이후 backend 작업이 같은 contract 위에 올라가게 만드는 정리 단계입니다.
Non-goals
Tests
cargo test --lib resource_cargo test --lib layer_tree_schema_contract_is_stablecargo test --lib page_layer_tree_exportcargo test --lib normalize_canvas_scalecargo test --lib render_page_consumes_layer_output_optionscargo clippy --lib -- -D warningscargo check --target wasm32-unknown-unknown --libRefs #536