Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 2771681dc395bd07efcf560c62f8af063b9ed87c..cd6091ddd3ccfcfc26d03a634d700428c75ac598 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -124,6 +124,10 @@ bool IsResumeBackgroundVideosEnabled() { |
return base::FeatureList::IsEnabled(kResumeBackgroundVideo); |
} |
+bool IsBackgroundVideoTrackOptimizationEnabled() { |
+ return base::FeatureList::IsEnabled(kBackgroundVideoTrackOptimization); |
+} |
+ |
bool IsNetworkStateError(blink::WebMediaPlayer::NetworkState state) { |
bool result = state == blink::WebMediaPlayer::NetworkStateFormatError || |
state == blink::WebMediaPlayer::NetworkStateNetworkError || |
@@ -651,7 +655,9 @@ void WebMediaPlayerImpl::selectedVideoTrackChanged( |
std::ostringstream logstr; |
std::vector<MediaTrack::Id> selectedVideoMediaTrackId; |
- if (selectedTrackId) { |
+ bool canAddVideoTrack = |
+ !IsBackgroundVideoTrackOptimizationEnabled() || !IsHidden(); |
+ if (selectedTrackId && canAddVideoTrack) { |
selectedVideoMediaTrackId.push_back(selectedTrackId->utf8().data()); |
logstr << selectedVideoMediaTrackId[0]; |
} |
@@ -1309,6 +1315,10 @@ void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { |
void WebMediaPlayerImpl::OnHidden() { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
+ if (IsBackgroundVideoTrackOptimizationEnabled()) |
+ selectedVideoTrackChanged(nullptr); |
+ |
if (watch_time_reporter_) |
watch_time_reporter_->OnHidden(); |
@@ -1324,6 +1334,12 @@ void WebMediaPlayerImpl::OnShown() { |
if (watch_time_reporter_) |
watch_time_reporter_->OnShown(); |
+ if (IsBackgroundVideoTrackOptimizationEnabled() && |
+ client_->hasSelectedVideoTrack()) { |
+ WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); |
+ selectedVideoTrackChanged(&trackId); |
+ } |
+ |
must_suspend_ = false; |
background_pause_timer_.Stop(); |
@@ -1700,8 +1716,7 @@ void WebMediaPlayerImpl::UpdatePlayState() { |
#endif |
bool is_suspended = pipeline_controller_.IsSuspended(); |
- bool is_backgrounded = |
- IsBackgroundedSuspendEnabled() && delegate_ && delegate_->IsHidden(); |
+ bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsHidden(); |
PlayState state = UpdatePlayState_ComputePlayState( |
is_remote, is_streaming, is_suspended, is_backgrounded); |
SetDelegateState(state.delegate_state); |
@@ -1960,10 +1975,16 @@ void WebMediaPlayerImpl::CreateWatchTimeReporter() { |
pipeline_metadata_.natural_size, |
base::Bind(&GetCurrentTimeInternal, this))); |
watch_time_reporter_->OnVolumeChange(volume_); |
- if (delegate_ && delegate_->IsHidden()) |
+ if (IsHidden()) |
watch_time_reporter_->OnHidden(); |
else |
watch_time_reporter_->OnShown(); |
} |
+bool WebMediaPlayerImpl::IsHidden() const { |
+ DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
+ return delegate_ && delegate_->IsHidden(); |
+} |
+ |
} // namespace media |