OSSCA Chromium

기여 목록 / 8450690

[viz] Remove the kValidatePromiseImageFormat kill switch

GraphicscleanupMerged

viz ImageContextImpl이 promise texture를 채울 때 SharedImage 포맷이 요청한 포맷과 같은지 확인하는 검증을 감싸고 있던 킬스위치 kValidatePromiseImageFormat을 제거했습니다. «M152 stable 이후 제거»라는 주석과 함께 들어온 플래그로, 트리가 M156이 된 지금까지 기본 켜짐이었으므로 동작은 바뀌지 않습니다(crbug.com/524822746). 1파일 +3/−9. 2026-09-23에 머지됐습니다(faf118a8c89fb). kylechar@와 vasilyt@의 +1을 받았고, 첫 CQ가 Android GPU 픽셀 테스트 두 개(각각 한 기기에서만 실패, 패치 없이 재실행 통과)로 떨어져 재요청 뒤 통과했습니다.

문제 설명

  • issue url: https://crbug.com/524822746
  • 합성 단계에서 promise image가 가리키는 SharedImage의 포맷이 TransferableResource 포맷과 다르면 GPU 메모리 손상으로 이어질 수 있는 문제가 있었습니다. 2026-06 CL 8013009가 포맷이 다르면 fulfill을 실패시키는 검증을 넣으면서, 롤백용 킬스위치로 감싸 두었습니다.
  • 지금은 검증 조건 끝에 FeatureList 조회 한 항과 TODO만 남아 있었습니다.

해결 내용

  • components/viz/service/display_embedder/image_context_impl.cc에서 BASE_FEATURE 정의와 TODO를 지웠습니다.
  • BeginAccessIfNecessaryInternal()의 포맷 불일치 검사를 무조건 실행하도록 플래그 항을 뺐습니다.
  • 파일에서 유일한 FeatureList 사용이 사라져 base/feature_list.h include도 제거했습니다.
-    if ((representation->format() != format() ||
-         representation->format().PrefersExternalSampler() !=
-             format().PrefersExternalSampler()) &&
-        base::FeatureList::IsEnabled(kValidatePromiseImageFormat)) {
+    if (representation->format() != format() ||
+        representation->format().PrefersExternalSampler() !=
+            format().PrefersExternalSampler()) {

발굴 과정

«Remove … after M» 만료 주석을 트리 전체에서 다시 훑은 스윕(148건)에서 나온 항목입니다. 플래그 이름이 든 열린 CL과 OSSCA 이슈가 없는지 확인하고 OSSCA #497로 등록한 뒤 착수했습니다. 첫 리뷰어는 플래그를 직접 넣은 kylechar@(components/viz OWNER)로 정했습니다.

테스트 방법

동작 불변 정리라 새 테스트는 없고, 컴파일과 관련 테스트 통과가 검증입니다.

  • 같은 시기에 준비한 킬스위치 정리 네 건을 통합 브랜치에 모아 media_unittests·viz_unittests·google_apis_unittests를 한 번에 빌드: Mac M5, 12분 29초 / 623 스텝
  • viz_unittests의 SkiaOutputSurfaceImplTest.*·HitTestAggregatorTest.* 필터 19/19 통과 (1개는 플랫폼 조건으로 SKIPPED)
  • presubmit 0 경고

배운 점

  • 조건문 끝에 && IsEnabled(...)로 붙은 킬스위치는 항 하나만 빼면 되지만, 괄호 묶음이 남는지 보고 git cl format으로 정리합니다.
  • 코드 경로를 직접 타는 테스트가 없는 정리 CL은 «컴파일 + 같은 파일을 쓰는 테스트 통과»가 현실적인 검증 범위입니다. CL 설명에 그 범위를 밝혀 둡니다.

참고 자료