기여 목록 / 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를 함께 줘야 밤새 돌아갑니다.