Clamp depths below 1px in CSSPerspective::toMatrix()
MERGED2026blinkcss-typed-omcss-transforms
2026. 9. 7.
injunchoi98
CSS Typed OM의 CSSPerspective.toMatrix()가 1px보다 작은 perspective 깊이를
1px로 제한하도록 수정했습니다.
문제 설명
CSS Transforms는 perspective 깊이가 1px보다 작을 때 렌더링과 행렬 변환에서
1px로 처리하도록 규정합니다. Blink의 렌더링 경로는 이 제한을 적용했지만CSSPerspective::toMatrix()는 변환된 길이를 그대로 행렬에 전달했습니다.
그 결과 CSS.px(0.5)와 같은 값의 Typed OM 행렬이 렌더링 동작 및 WPT 기대값과
달랐습니다.
해결 내용
길이를 CSS px로 변환한 뒤 std::max(1.0, length->value())를 적용해 perspective
행렬에 전달했습니다.
matrix->perspectiveSelf(std::max(1.0, length->value()));원래 단위의 값이 아니라 px 변환 후 제한하므로 0.5in처럼 1px보다 큰 절대
길이가 잘못 축소되지 않습니다. 수정 후 통과하는 WPT 실패 기대 파일도
삭제했습니다.
테스트 방법
CSS Typed OM의 행렬 변환, 상대 단위 오류, 생성, 직렬화에 관한 WPT 4개를
실행했습니다. 4개 모두 예상대로 통과했고 회귀나 예상 밖 결과는 없었습니다.content_shell 빌드와 diff 검사도 통과했으며, 이후 Commit Queue 검증을 거쳐
Chromium main에 병합됐습니다.
배운 점
- CSS 길이의 최솟값이나 최댓값은 단위 변환이 끝난 canonical 값에 적용해야
합니다. - 렌더링 경로와 Typed OM의 직접 행렬 변환 경로가 같은 명세 규칙을 공유하는지
함께 확인해야 합니다.