OSSCA Chromium

기여 목록 / 8423128

[media] Remove the expired kSuspendMediaForFrozenFrames flag

MediacleanupMerged

프레임이 얼어붙었을 때(frozen) WebMediaPlayerImpl이 재생을 멈추고 미디어 자원을 놓는 동작을 감싸고 있던 롤백용 플래그 kSuspendMediaForFrozenFrames를 제거했습니다. 2025-07(M140)에 «M143에서 제거» 주석과 함께 들어온 뒤 12개 마일스톤을 더 살아 있던 플래그로, 도입 이래 기본 켜짐이었으므로 동작은 바뀌지 않습니다(crbug.com/41161335). 4파일 +8/−24. 2026-09-23에 머지됐습니다(7a3cf7f869ea4). dalecurtis@와 tmathmeyer@의 +1을 받았고, 제출 요청 댓글 뒤 dalecurtis@가 CQ를 돌려 한 번에 통과했습니다.

문제 설명

  • issue url: https://crbug.com/41161335
  • 도입 CL 6724838은 RenderFrame이 frozen 상태가 되면 WebMediaPlayerImpl이 프리로드를 멈추고 정지 상태로 들어가며, 그 플레이어를 «숨김» 상태로 취급하도록 바꿨습니다. 롤백에 대비해 BASE_FEATURE(kSuspendMediaForFrozenFrames, ENABLED_BY_DEFAULT)로 감쌌고, 주석에 «Remove in M143 after it goes stable»이라고 적어 두었습니다.
  • 트리가 M155인 지금은 OnFrozen() 경로와 IsPageHidden()·IsFrameHidden() 세 곳에 FeatureList 조회와 죽은 분기만 남아 있었습니다.

해결 내용

  • media/base/media_switches.{h,cc}에서 플래그 선언·정의를 지웠습니다.
  • web_media_player_impl.cc 세 사용처를 켜진 쪽 분기만 남겨 정리했습니다. IsPageHidden()은 delegate의 답을 그대로, IsFrameHidden()은 is_frame_hidden_를 그대로 돌려주게 됩니다.
  • 테스트 OnFrozenSuspendsPlayback에서 플래그를 켜던 ScopedFeatureList 두 줄을 지웠습니다. 기본값이 켜짐이라 검증 조건은 같습니다.
  • was_suspended_for_frame_closed_or_frozen_ 멤버는 UpdatePlayState_ComputePlayState()가 계속 읽으므로 남겼습니다.
 bool WebMediaPlayerImpl::IsFrameHidden() const {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
-  if (base::FeatureList::IsEnabled(media::kSuspendMediaForFrozenFrames)) {
-    return is_frame_hidden_;
-  }
-  return is_frame_hidden_ && !was_suspended_for_frame_closed_or_frozen_;
+  return is_frame_hidden_;
 }

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

발굴 과정

«Remove … in M» 만료 주석 스윕에서 나온 항목입니다. 플래그를 지우면 어느 분기가 남아야 하는지 도입 CL을 직접 읽어 확인했고, 멤버 변수를 함께 지울 수 있는지 사용처를 전부 따라가 «다른 곳에서 읽는다»를 확인한 뒤 남기기로 했습니다. web_media_player_impl.cc는 열린 CL이 109건인 활발한 파일이라 오래 묵히지 않도록 등록(OSSCA #465) 직후 올렸습니다.

테스트 방법

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

  • blink_unittests 빌드: Mac M5, -j 6, 4시간 35분 / 28,621 스텝 (브랜치 전환으로 파일 mtime이 바뀌어 사실상 전체 재빌드)
  • blink_unittests --gtest_filter='WebMediaPlayerImplTest.*' 78/78 통과

배운 점

  • 롤백 플래그를 지울 때 «플래그가 꺼진 분기에서만 읽던 상태 변수»가 남는지 확인해야 합니다. 이번엔 다른 곳에서도 읽고 있어 남겼지만, 그렇지 않았다면 멤버까지 지우는 게 맞습니다.
  • 빌드 캐시는 mtime에 묶여 있습니다. 브랜치를 새 main으로 리베이스했다가 옛 base 브랜치로 돌아오면 파일 mtime이 전부 바뀌어 증분 빌드가 전체 재빌드가 됩니다. 리베이스는 업로드 직전에만 합니다.
  • caffeinate -i는 덮개 닫힘을 막지 못합니다. 배터리로 덮개를 닫아 두면 빌드가 사실상 멈추고, 전원을 연결하고 -s를 함께 줘야 밤새 돌아갑니다.

참고 자료