OSSCA Chromium

기여 목록 / 8409931

[Blink] Fix hyphen orientation in vertical text

BlinkfixMerged

세로쓰기에서 사용자 지정 하이픈 문자열 +=가 옆으로 회전하지 않고 똑바로 표시되는 문제를 수정했습니다.

문제 설명

HarfBuzzShaper는 8비트 문자열에 대해 문자 방향에 따른 구간 분할을 생략합니다. 따라서 8비트로 저장된 사용자 지정 하이픈 문자열 +=는 세로쓰기의 text-orientation: mixed에서도 올바른 회전이 적용되지 않았습니다.

이로 인해 css/css-text/hyphens/hyphens-vertical-003.html WPT가 실패했습니다.

해결 내용

  • HyphenResult::Shape()에서 글꼴 방향이 kVerticalMixed인 경우 text_.Ensure16Bit()를 호출하여 하이픈 문자열을 16비트로 저장하도록 했습니다. 이를 통해 shaper가 문자 방향 처리를 적용할 수 있도록 했습니다.
  • 기본 활성화된 HyphenVerticalOrientationFix 런타임 플래그를 추가하여, 필요할 때 플래그를 비활성화하면 기존 동작으로 돌아갈 수 있도록 했습니다.
  • 가로쓰기, 세로쓰기의 upright와 mixed를 검증하는 단위 테스트를 추가하고, 해당 WPT의 실패 기대값을 제거했습니다.

테스트 방법

CL에 기록한 단위 테스트는 다음과 같습니다.

blink_unittests --gtest_filter="HyphenResultTest.*"

각 테스트는 플래그를 켠 경우와 끈 경우 모두에서 글리프 회전 값을 확인합니다. 가로쓰기와 세로쓰기 upright의 기존 동작을 유지하면서, 세로쓰기 mixed에서는 플래그가 켜졌을 때 +=가 옆으로 회전하는지 검증합니다.

관련 WPT는 external/wpt/css/css-text/hyphens/hyphens-vertical-003.html입니다. Gerrit의 CQ dry run 통과 후, 2026년 9월 18일 Chromium main에 병합되었습니다.

배운 점

  • 같은 문자열이라도 내부 저장 방식이 8비트인지 16비트인지에 따라 shaper의 처리 경로가 달라질 수 있으므로, 렌더링 문제를 분석할 때 저장 방식도 확인해야 합니다.
  • 수정 대상인 세로쓰기 mixed뿐 아니라 가로쓰기와 upright도 함께 검증해야 다른 쓰기 방향에 회귀 문제가 생기지 않는지 확인할 수 있습니다.
  • 런타임 플래그로 변경 동작을 제어하면 문제가 발생했을 때 기존 동작으로 빠르게 되돌릴 수 있으며, 플래그를 켠 경우와 끈 경우 모두 테스트해야 합니다.

참고 자료