Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: media/blink/webmediaplayer_impl.cc

Issue 2611333003: [Video] Disable bg optimization if avg keyframe distance is >10s (Closed)
Patch Set: Unittest Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/blink/webmediaplayer_impl.h" 5 #include "media/blink/webmediaplayer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 return false; 869 return false;
870 } 870 }
871 871
872 double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const { 872 double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const {
873 return base::TimeDelta::FromSecondsD(timeValue).InSecondsF(); 873 return base::TimeDelta::FromSecondsD(timeValue).InSecondsF();
874 } 874 }
875 875
876 unsigned WebMediaPlayerImpl::decodedFrameCount() const { 876 unsigned WebMediaPlayerImpl::decodedFrameCount() const {
877 DCHECK(main_task_runner_->BelongsToCurrentThread()); 877 DCHECK(main_task_runner_->BelongsToCurrentThread());
878 878
879 PipelineStatistics stats = pipeline_.GetStatistics(); 879 PipelineStatistics stats = GetPipelineStatistics();
880 return stats.video_frames_decoded; 880 return stats.video_frames_decoded;
881 } 881 }
882 882
883 unsigned WebMediaPlayerImpl::droppedFrameCount() const { 883 unsigned WebMediaPlayerImpl::droppedFrameCount() const {
884 DCHECK(main_task_runner_->BelongsToCurrentThread()); 884 DCHECK(main_task_runner_->BelongsToCurrentThread());
885 885
886 PipelineStatistics stats = pipeline_.GetStatistics(); 886 PipelineStatistics stats = GetPipelineStatistics();
887 return stats.video_frames_dropped; 887 return stats.video_frames_dropped;
888 } 888 }
889 889
890 size_t WebMediaPlayerImpl::audioDecodedByteCount() const { 890 size_t WebMediaPlayerImpl::audioDecodedByteCount() const {
891 DCHECK(main_task_runner_->BelongsToCurrentThread()); 891 DCHECK(main_task_runner_->BelongsToCurrentThread());
892 892
893 PipelineStatistics stats = pipeline_.GetStatistics(); 893 PipelineStatistics stats = GetPipelineStatistics();
894 return stats.audio_bytes_decoded; 894 return stats.audio_bytes_decoded;
895 } 895 }
896 896
897 size_t WebMediaPlayerImpl::videoDecodedByteCount() const { 897 size_t WebMediaPlayerImpl::videoDecodedByteCount() const {
898 DCHECK(main_task_runner_->BelongsToCurrentThread()); 898 DCHECK(main_task_runner_->BelongsToCurrentThread());
899 899
900 PipelineStatistics stats = pipeline_.GetStatistics(); 900 PipelineStatistics stats = GetPipelineStatistics();
901 return stats.video_bytes_decoded; 901 return stats.video_bytes_decoded;
902 } 902 }
903 903
904 bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture( 904 bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
905 gpu::gles2::GLES2Interface* gl, 905 gpu::gles2::GLES2Interface* gl,
906 unsigned int texture, 906 unsigned int texture,
907 unsigned int internal_format, 907 unsigned int internal_format,
908 unsigned int type, 908 unsigned int type,
909 bool premultiply_alpha, 909 bool premultiply_alpha,
910 bool flip_y) { 910 bool flip_y) {
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
2009 base::Bind(&Demuxer::GetMemoryUsage, base::Unretained(demuxer_.get())), 2009 base::Bind(&Demuxer::GetMemoryUsage, base::Unretained(demuxer_.get())),
2010 base::Bind(&WebMediaPlayerImpl::FinishMemoryUsageReport, AsWeakPtr())); 2010 base::Bind(&WebMediaPlayerImpl::FinishMemoryUsageReport, AsWeakPtr()));
2011 } else { 2011 } else {
2012 FinishMemoryUsageReport(0); 2012 FinishMemoryUsageReport(0);
2013 } 2013 }
2014 } 2014 }
2015 2015
2016 void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) { 2016 void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) {
2017 DCHECK(main_task_runner_->BelongsToCurrentThread()); 2017 DCHECK(main_task_runner_->BelongsToCurrentThread());
2018 2018
2019 const PipelineStatistics stats = pipeline_.GetStatistics(); 2019 const PipelineStatistics stats = GetPipelineStatistics();
2020 const int64_t data_source_memory_usage = 2020 const int64_t data_source_memory_usage =
2021 data_source_ ? data_source_->GetMemoryUsage() : 0; 2021 data_source_ ? data_source_->GetMemoryUsage() : 0;
2022 const int64_t current_memory_usage = 2022 const int64_t current_memory_usage =
2023 stats.audio_memory_usage + stats.video_memory_usage + 2023 stats.audio_memory_usage + stats.video_memory_usage +
2024 data_source_memory_usage + demuxer_memory_usage; 2024 data_source_memory_usage + demuxer_memory_usage;
2025 2025
2026 // Note, this isn't entirely accurate, there may be VideoFrames held by the 2026 // Note, this isn't entirely accurate, there may be VideoFrames held by the
2027 // compositor or other resources that we're unaware of. 2027 // compositor or other resources that we're unaware of.
2028 2028
2029 DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage 2029 DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 return false; 2111 return false;
2112 #else // defined(OS_ANDROID) 2112 #else // defined(OS_ANDROID)
2113 if (!IsBackgroundVideoTrackOptimizationEnabled()) 2113 if (!IsBackgroundVideoTrackOptimizationEnabled())
2114 return false; 2114 return false;
2115 #endif // defined(OS_ANDROID) 2115 #endif // defined(OS_ANDROID)
2116 2116
2117 return hasVideo() && !hasAudio(); 2117 return hasVideo() && !hasAudio();
2118 } 2118 }
2119 2119
2120 bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { 2120 bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const {
2121 DCHECK(main_task_runner_->BelongsToCurrentThread());
2121 DCHECK(IsHidden()); 2122 DCHECK(IsHidden());
2122 return IsBackgroundVideoTrackOptimizationEnabled() && hasVideo() && 2123
2123 hasAudio() && !IsStreaming(); 2124 if (!IsBackgroundVideoTrackOptimizationEnabled() || !hasVideo() ||
2125 !hasAudio() || IsStreaming()) {
2126 return false;
2127 }
2128
2129 PipelineStatistics stats = GetPipelineStatistics();
2130 return stats.video_keyframe_distance_average <
2131 max_keyframe_distance_to_disable_background_video_;
2124 } 2132 }
2125 2133
2126 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { 2134 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() {
2127 DCHECK(!IsHidden()); 2135 DCHECK(!IsHidden());
2128 2136
2129 // Don't change video track while the pipeline is resuming or seeking. 2137 // Don't change video track while the pipeline is resuming or seeking.
2130 if (is_pipeline_resuming_ || seeking_) 2138 if (is_pipeline_resuming_ || seeking_)
2131 return; 2139 return;
2132 2140
2133 if (video_track_disabled_) { 2141 if (video_track_disabled_) {
(...skipping 11 matching lines...) Expand all
2145 // Don't change video track while the pipeline is resuming or seeking. 2153 // Don't change video track while the pipeline is resuming or seeking.
2146 if (is_pipeline_resuming_ || seeking_) 2154 if (is_pipeline_resuming_ || seeking_)
2147 return; 2155 return;
2148 2156
2149 if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) { 2157 if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) {
2150 video_track_disabled_ = true; 2158 video_track_disabled_ = true;
2151 selectedVideoTrackChanged(nullptr); 2159 selectedVideoTrackChanged(nullptr);
2152 } 2160 }
2153 } 2161 }
2154 2162
2163 void WebMediaPlayerImpl::SetPipelineStatisticsForTest(
2164 const PipelineStatistics& stats) {
2165 pipeline_statistics_for_test_ = base::make_optional(stats);
2166 }
2167
2168 PipelineStatistics WebMediaPlayerImpl::GetPipelineStatistics() const {
2169 DCHECK(main_task_runner_->BelongsToCurrentThread());
2170
2171 return pipeline_statistics_for_test_.value_or(pipeline_.GetStatistics());
2172 }
2173
2155 } // namespace media 2174 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698