기여 목록 / 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.hinclude도 제거했습니다.
- 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 설명에 그 범위를 밝혀 둡니다.