[media/gpu/mac] Remove the kResetDecoderForNonIDR kill switch

IN REVIEW2026media/gpu/mackill-switch-cleanup
2026. 9. 15.jmsmg 프로필 이미지jmsmg

macOS VideoToolbox H.264 가속기에 남아 있던 만료된 킬스위치 kResetDecoderForNonIDR를 제거했습니다. "M145가 안정되면 제거"라는 주석이 붙은 채 10개 마일스톤을 더 살아 있던 플래그로, 도입 이래 기본 켜짐이었으므로 동작은 바뀌지 않습니다. 1파일 +1/−10, Mac 전용 코드입니다.

문제 설명

  • issue url: 없음 (플래그가 보호하던 원 수정의 버그: https://crbug.com/451536366)
  • media/gpu/mac/video_toolbox_h264_accelerator.cc는 첫 샘플이 non-IDR이면 kCMSampleBufferAttachmentKey_ResetDecoderBeforeDecoding을 붙입니다. SEI recovery point로 탐색할 때 손상을 막기 위한 Apple 권고 동작인데, 이를 되돌릴 수 있게 BASE_FEATURE(kResetDecoderForNonIDR, ENABLED_BY_DEFAULT)로 감싸고 "Kill-switch: Remove after M145 is stable"이라고 적어 두었습니다.
  • 트리는 M155입니다. 킬스위치는 롤아웃 기간에만 의미가 있고, 남겨 두면 FeatureList 조회와 죽은 분기만 남습니다.

해결 내용

  • BASE_FEATURE 정의와 주석을 지우고, 조건에서 base::FeatureList::IsEnabled(...) 항을 뺐습니다.
  • 파일에서 다른 사용이 없어진 base/feature_list.h include와 비게 된 익명 namespace도 함께 제거했습니다.
-  if (!pic->idr && first_decode_ &&
-      base::FeatureList::IsEnabled(kResetDecoderForNonIDR)) {
+  if (!pic->idr && first_decode_) {

about_flags·flag-metadata·enums.xml에 등록된 플래그가 아니라 다른 파일은 손댈 것이 없었습니다. gn check //media/gpu/mac/* 통과.

발굴 과정

"Remove/Delete … after/in M" 형태의 만료 주석을 트리 전체에서 훑어 97건을 모은 뒤, 마일스톤이 지났고 선점 CL이 없으며 한 OWNERS 그룹에 닫힌 것을 골랐습니다. 이 항목은 Mac 전용 파일이라 리눅스 빌드 서버에서는 검증할 수 없었고, Mac으로 빌드 환경을 옮긴 뒤에야 잡을 수 있게 된 첫 사례입니다. 같은 파일에 OWNER의 열린 CL(8400064)이 있어, 업로드하며 그 CL과 순서를 맞추거나 합칠지 물었습니다.

테스트 방법

동작 불변 정리라 새 테스트는 없고 기존 테스트 통과가 검증입니다.

  • media_unittests 빌드: Mac M5, -j 6, 19분 16초 / 7,917 스텝
  • media_unittests --gtest_filter='VideoToolboxH264Accelerator*' 8/8 통과

배운 점

  • 킬스위치 제거는 «플래그가 항상 켜져 있었는가»와 «다른 등록(about_flags·enums)이 없는가» 두 가지만 확인하면 위험이 없습니다. 만료 주석 스윕은 이런 XS 정리를 꾸준히 공급합니다.
  • 플랫폼 전용 코드는 그 플랫폼에서만 검증됩니다. 빌드 환경을 두 머신으로 나눈 뒤 Mac 전용·리눅스 전용 후보를 구분해 배정하니 큐가 넓어졌습니다.
  • git cl upload -m은 커버 메시지가 아니라 새 CL의 설명을 통째로 대체합니다. 리뷰어에게 남길 말은 업로드 뒤 별도 메시지로 보냅니다. 이번엔 PS1 제목이 오염돼 PS2로 복구했습니다.

참고 자료