기여 목록 / 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.hinclude를 함께 제거했습니다. - 트레일러는
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한 번으로 풀렸습니다.