Use ancestor clips when checking for scroll checkerboarding

ABANDONED2026cccompositorcheckerboarding
2026. 8. 15.injunchoi98 프로필 이미지injunchoi98

스크롤 checkerboarding 판정에서 조상 clip을 반영하는 방법을 구현하고
검토했습니다. property tree의 소유권과 지연 생성 경로를 안전하게 연결하기
어렵다는 리뷰 결과에 따라 CL을 중단했습니다.

문제 설명

기존 checkerboarding 검사는 스크롤 영역의 가시 범위를 root render surface로만
제한했습니다. 조상 요소의 overflow clip에 가려진 콘텐츠도 보이는 영역으로
판정할 수 있어 새 콘텐츠의 우선순위를 불필요하게 높일 가능성이 있었습니다.

시도한 해결 내용

스크롤 노드에 overflow clip의 ElementId를 저장하고 checkerboarding 판정 시 해당
clip의 화면 좌표 사각형과 가시 영역의 교집합을 사용하도록 구현했습니다.

Blink가 만든 property tree와 cc::Layer에서 직접 만든 property tree 양쪽에서
매핑되도록 다음 경로를 수정했습니다.

  • Blink scroll node의 OverflowClipNode()를 compositor clip node에 연결
  • cc::Layer 경로에서 scroll parent의 clip node를 scroll node에 기록
  • checkerboarding 판정 전에 해당 clip의 누적 화면 사각형을 적용

테스트 방법

다음 회귀 테스트를 추가해 구현 방향을 확인했습니다.

  • 조상 clip 내부와 외부의 checkerboarding 우선순위 판정
  • cc::Layer에서 만든 scroll node와 clip node의 연결
  • Blink property tree에서 overflow clip이 compositor node로 매핑되는지 확인

content_shell 빌드는 통과했습니다. 실제 스크롤 페이지를 이용한 추적에서는
특정 업데이트에서 내부 우선순위 차이가 관찰됐지만, 한 가지 환경의 결과라 일반적인
사용자 개선으로 판단하지 않았습니다.

중단 이유

리뷰에서 scroll node와 clip node의 소유 관계가 항상 안전하다고 보장할 수 없다는
문제가 확인됐습니다. 상속된 clip_tree_parent는 현재 레이어가 소유한 노드가 아닐
수 있고, EnsureCompositorClipNode()는 단순 조회가 아니라 새 노드를 만들 수도
있습니다.

따라서 ElementId를 저장하는 접근이 모든 property tree 구성 순서에서 유효하다고
입증되지 않았습니다. 사용자에게 보이는 checkerboarding 개선 효과도 충분히
재현하지 못해, 불확실한 구조 변경을 유지하지 않고 CL을 abandoned 처리했습니다.

배운 점

  • property tree의 node ID를 계층 간에 전달하기 전에 노드의 소유자와 생성 시점을
    먼저 확인해야 합니다.
  • Ensure* 함수는 읽기 전용 조회가 아닐 수 있으므로 호출 시점에 트리를 변경하는지
    살펴봐야 합니다.
  • 성능 최적화는 코드상 가능성만으로 정당화하기 어렵고 실제 사용자 영향과 안정적인
    재현이 필요합니다.

참고 자료