Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 96c5424ebb666ca204a410ac7461d8da3d5e0030..b0e7d1c71f3d6819338ed00105d809ee43f03bf3 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -887,28 +887,28 @@ double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const { |
unsigned WebMediaPlayerImpl::decodedFrameCount() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- PipelineStatistics stats = pipeline_.GetStatistics(); |
+ PipelineStatistics stats = GetPipelineStatistics(); |
return stats.video_frames_decoded; |
} |
unsigned WebMediaPlayerImpl::droppedFrameCount() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- PipelineStatistics stats = pipeline_.GetStatistics(); |
+ PipelineStatistics stats = GetPipelineStatistics(); |
return stats.video_frames_dropped; |
} |
size_t WebMediaPlayerImpl::audioDecodedByteCount() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- PipelineStatistics stats = pipeline_.GetStatistics(); |
+ PipelineStatistics stats = GetPipelineStatistics(); |
return stats.audio_bytes_decoded; |
} |
size_t WebMediaPlayerImpl::videoDecodedByteCount() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- PipelineStatistics stats = pipeline_.GetStatistics(); |
+ PipelineStatistics stats = GetPipelineStatistics(); |
return stats.video_bytes_decoded; |
} |
@@ -2005,7 +2005,7 @@ void WebMediaPlayerImpl::ReportMemoryUsage() { |
void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- const PipelineStatistics stats = pipeline_.GetStatistics(); |
+ const PipelineStatistics stats = GetPipelineStatistics(); |
const int64_t data_source_memory_usage = |
data_source_ ? data_source_->GetMemoryUsage() : 0; |
const int64_t current_memory_usage = |
@@ -2107,9 +2107,17 @@ bool WebMediaPlayerImpl::ShouldPauseWhenHidden() const { |
} |
bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { |
+ DCHECK(main_task_runner_->BelongsToCurrentThread()); |
DCHECK(IsHidden()); |
- return IsBackgroundVideoTrackOptimizationEnabled() && hasVideo() && |
- hasAudio() && !IsStreaming(); |
+ |
+ if (!IsBackgroundVideoTrackOptimizationEnabled() || !hasVideo() || |
+ !hasAudio() || IsStreaming()) { |
+ return false; |
+ } |
+ |
+ PipelineStatistics stats = GetPipelineStatistics(); |
+ return stats.video_keyframe_distance_average < |
+ max_keyframe_distance_to_disable_background_video_; |
} |
void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { |
@@ -2141,4 +2149,15 @@ void WebMediaPlayerImpl::DisableVideoTrackIfNeeded() { |
} |
} |
+void WebMediaPlayerImpl::SetPipelineStatisticsForTest( |
+ const PipelineStatistics& stats) { |
+ pipeline_statistics_for_test_ = base::make_optional(stats); |
+} |
+ |
+PipelineStatistics WebMediaPlayerImpl::GetPipelineStatistics() const { |
+ DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
+ return pipeline_statistics_for_test_.value_or(pipeline_.GetStatistics()); |
+} |
+ |
} // namespace media |