OSSCA Chromium

기여 목록 / 8429522

[mediastream] Remove expired kMediaStreamAccurateDroppedFrameCount flag

MediacleanupMerged

MediaStream 재생의 드롭 프레임 카운트 수정을 감싸고 있던 롤백용 플래그 kMediaStreamAccurateDroppedFrameCount를 제거했습니다. 2025-08(M140)에 «M143 이후 제거» 주석과 함께 들어온 뒤 12개 마일스톤을 더 살아 있던 플래그로, 도입 이래 기본 켜짐이었으므로 동작은 바뀌지 않습니다(crbug.com/432367602). 3파일 +5/−25. 2026-09-21에 머지됐습니다(24cd108dc57b6). Fixed: 트레일러로 원 버그도 함께 닫혔습니다.

문제 설명

  • issue url: https://crbug.com/432367602
  • WebMediaPlayerMSCompositor는 video.getVideoPlaybackQuality().droppedVideoFrames의 근거가 되는 dropped_frame_count_를 관리합니다. 첫 프레임이 도착했을 때 «아직 렌더된 프레임이 없다»는 상태를 드롭으로 잘못 세는 버그가 있었고, 수정 CL 6766143이 이를 고치면서 롤백에 대비해 BASE_FEATURE(kMediaStreamAccurateDroppedFrameCount, ENABLED_BY_DEFAULT)로 감싸 두었습니다.
  • 플래그가 꺼진 분기가 곧 «버그가 있던 원래 동작»이라, 트리가 M155인 지금은 죽은 분기와 FeatureList 조회만 남아 있었습니다. 원 버그는 Bug:로만 연결돼 아직 열려 있었습니다.

해결 내용

  • media/base/media_switches.{h,cc}에서 플래그 선언·정의를 지웠습니다.
  • 컴포지터의 두 사용처를 켜진 쪽 분기만 남겨 정리했습니다. 렌더 버퍼를 비울 때 frames_queued()가 0이어도 언더플로하지 않는 std::max(…, 1) - 1, SetCurrentFrame()에서 «이전 프레임이 있고 렌더되지 않았을 때만» 세는 조건입니다.
  • 그 파일에서만 쓰이던 base/feature_list.h·media/base/media_switches.h include를 함께 제거했습니다.
  • 트레일러는 Fixed: 432367602로 두어 랜딩 시 원 버그가 닫히게 했습니다.
-  if (base::FeatureList::IsEnabled(
-          media::kMediaStreamAccurateDroppedFrameCount)) {
-    if (current_frame_ && !current_frame_rendered_) {
-      ++dropped_frame_count_;
-    }
-  } else {
-    if (!current_frame_rendered_) {
-      ++dropped_frame_count_;
-    }
+  // Count the previous frame as dropped if it was never rendered.
+  if (current_frame_ && !current_frame_rendered_) {
+    ++dropped_frame_count_;
   }

about_flags·flag-metadata·enums.xml·fieldtrial_testing_config에 등록되지 않은 플래그라 다른 파일은 손댈 것이 없었습니다. gn check 통과.

발굴 과정

«Remove … after M» 만료 주석 스윕에서 나온 항목입니다. 착수 전에 crbug를 브라우저로 직접 열어 코멘트가 «수정 CL 자동 링크» 하나뿐이고 아직 열려 있음을 확인했고, 플래그 이름이 든 열린 CL이 없는지, media_switches.cc(열린 CL 101건)에서 우리 줄 근처를 건드리는 CL이 없는지 확인한 뒤 OSSCA #464로 등록하고 시작했습니다.

테스트 방법

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

  • blink_unittests 빌드: Mac M5, -j 6, 2시간 47분 / 21,889 스텝 (이 머신 첫 빌드)
  • blink_unittests --gtest_filter='WebMediaPlayerMSCompositor*' 14/14 통과
  • 업로드 직전 origin/main(09-18) 위로 리베이스, 충돌 없음

배운 점

  • 롤백용 플래그 제거는 «어느 분기가 버그였고 어느 분기가 수정인가»를 원 CL과 버그 원문에서 직접 확인하는 것이 본작업입니다. 플래그가 꺼진 쪽을 남기면 버그를 되살립니다.
  • 원 CL이 Bug:로만 연결한 버그는 플래그를 지우는 CL이 Fixed:로 닫아 줘야 합니다. 그렇지 않으면 수정이 끝난 버그가 계속 열려 있습니다.
  • git fetch origin으로 트리를 당겼으면 depot_tools도 같이 갱신해야 합니다. 새 PRESUBMIT.py가 옛 depot_tools에 없는 API를 써서 presubmit이 50건 오류로 전멸했고, update_depot_tools 한 번으로 풀렸습니다.

참고 자료