Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 0ab7b54d2cfdf4ee3dc09c257d782eea66e0c312..da39318d924ab3816ffe1bf0136aac04b38e74de 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -206,7 +206,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
opaque_(false), |
playback_rate_(0.0), |
paused_(true), |
- paused_when_hidden_(false), |
+ paused_when_background_(false), |
seeking_(false), |
pending_suspend_resume_cycle_(false), |
ended_(false), |
@@ -453,8 +453,8 @@ void WebMediaPlayerImpl::pause() { |
// paused state. |
paused_ = true; |
- // No longer paused because it was hidden. |
- paused_when_hidden_ = false; |
+ // No longer paused because it was backgrounded. |
+ paused_when_background_ = false; |
#if defined(OS_ANDROID) // WMPI_CAST |
if (isRemote()) { |
@@ -1117,8 +1117,8 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_updated) { |
// actions from artificially inflating the underflow count. |
underflow_count_ = 0; |
- // Background video optimizations are delayed when shown/hidden if pipeline |
- // is seeking. |
+ // Background video optimizations are delayed when if pipeline |
+ // is seeking when the video goes to the background or the foreground. |
UpdateBackgroundVideoOptimizationState(); |
} |
@@ -1405,10 +1405,8 @@ void WebMediaPlayerImpl::OnFrameHidden() { |
if (watch_time_reporter_) |
watch_time_reporter_->OnHidden(); |
- // OnFrameHidden() can be called when frame is closed, then IsHidden() will |
- // return false, so check explicitly. |
- if (IsHidden()) { |
- if (ShouldPauseVideoWhenHidden()) { |
+ if (IsBackgrounded()) { |
+ if (ShouldPauseVideoWhenBackground()) { |
PauseVideoIfNeeded(); |
return; |
} else { |
@@ -1436,10 +1434,10 @@ void WebMediaPlayerImpl::OnFrameShown() { |
watch_time_reporter_->OnShown(); |
// Only track the time to the first frame if playing or about to play because |
- // of being shown and only for videos we would optimize background playback |
- // for. |
+ // of being foregrounded and only for videos we would optimize background |
+ // playback for. |
if ((!paused_ && IsBackgroundOptimizationCandidate()) || |
- paused_when_hidden_) { |
+ paused_when_background_) { |
VideoFrameCompositor::OnNewProcessedFrameCB new_processed_frame_cb = |
BIND_TO_RENDER_LOOP1( |
&WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame, |
@@ -1450,8 +1448,8 @@ void WebMediaPlayerImpl::OnFrameShown() { |
base::Unretained(compositor_), new_processed_frame_cb)); |
} |
- if (paused_when_hidden_) { |
- paused_when_hidden_ = false; |
+ if (paused_when_background_) { |
+ paused_when_background_ = false; |
OnPlay(); // Calls UpdatePlayState() so return afterwards. |
return; |
} |
@@ -1804,7 +1802,7 @@ void WebMediaPlayerImpl::UpdatePlayState() { |
#endif |
bool is_suspended = pipeline_controller_.IsSuspended(); |
- bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsHidden(); |
+ bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsBackgrounded(); |
PlayState state = UpdatePlayState_ComputePlayState( |
is_remote, is_streaming, is_suspended, is_backgrounded); |
SetDelegateState(state.delegate_state, state.is_idle); |
@@ -1949,7 +1947,7 @@ WebMediaPlayerImpl::UpdatePlayState_ComputePlayState(bool is_remote, |
// the have future data state; see didLoadingProgress(). |
// |
// TODO(sandersd): Make the delegate suspend idle players immediately when |
- // hidden. |
+ // in the background. |
bool idle_suspended = |
!is_streaming && is_stale && paused_ && !seeking_ && !overlay_enabled_; |
@@ -2103,9 +2101,12 @@ void WebMediaPlayerImpl::CreateWatchTimeReporter() { |
watch_time_reporter_->OnShown(); |
} |
-bool WebMediaPlayerImpl::IsHidden() const { |
+bool WebMediaPlayerImpl::IsBackgrounded() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ // Nothing related to the media being in the background should matter if the |
+ // frame is closed. However, the delegate might call OnFrameHidden() when |
+ // closed so specifically exclude this case. |
return delegate_->IsFrameHidden() && !delegate_->IsFrameClosed(); |
} |
@@ -2123,7 +2124,7 @@ void WebMediaPlayerImpl::ActivateViewportIntersectionMonitoring(bool activate) { |
client_->activateViewportIntersectionMonitoring(activate); |
} |
-bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const { |
+bool WebMediaPlayerImpl::ShouldPauseVideoWhenBackground() const { |
#if !defined(OS_ANDROID) |
// On desktop, this behavior is behind the feature flag. |
if (!IsBackgroundVideoTrackOptimizationEnabled()) |
@@ -2134,7 +2135,7 @@ bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const { |
return !hasAudio() && IsBackgroundOptimizationCandidate(); |
} |
-bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { |
+bool WebMediaPlayerImpl::ShouldDisableVideoWhenBackground() const { |
// This optimization is behind the flag on all platforms. |
if (!IsBackgroundVideoTrackOptimizationEnabled()) |
return false; |
@@ -2174,8 +2175,8 @@ bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const { |
} |
void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() { |
- if (IsHidden()) { |
- if (ShouldPauseVideoWhenHidden()) |
+ if (IsBackgrounded()) { |
+ if (ShouldPauseVideoWhenBackground()) |
PauseVideoIfNeeded(); |
else |
DisableVideoTrackIfNeeded(); |
@@ -2185,17 +2186,17 @@ void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() { |
} |
void WebMediaPlayerImpl::PauseVideoIfNeeded() { |
- DCHECK(IsHidden()); |
+ DCHECK(IsBackgrounded()); |
// Don't pause video while the pipeline is stopped, resuming or seeking. |
// Also if the video is paused already. |
if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_ || paused_) |
return; |
- // OnPause() will set |paused_when_hidden_| to false and call |
+ // OnPause() will set |paused_when_background_| to false and call |
// UpdatePlayState(), so set the flag to true after and then return. |
OnPause(); |
- paused_when_hidden_ = true; |
+ paused_when_background_ = true; |
} |
void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { |
@@ -2214,13 +2215,13 @@ void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { |
} |
void WebMediaPlayerImpl::DisableVideoTrackIfNeeded() { |
- DCHECK(IsHidden()); |
+ DCHECK(IsBackgrounded()); |
// Don't change video track while the pipeline is resuming or seeking. |
if (is_pipeline_resuming_ || seeking_) |
return; |
- if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) { |
+ if (!video_track_disabled_ && ShouldDisableVideoWhenBackground()) { |
video_track_disabled_ = true; |
selectedVideoTrackChanged(nullptr); |
} |