OLD | NEW |
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 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 return false; | 880 return false; |
881 } | 881 } |
882 | 882 |
883 double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const { | 883 double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const { |
884 return base::TimeDelta::FromSecondsD(timeValue).InSecondsF(); | 884 return base::TimeDelta::FromSecondsD(timeValue).InSecondsF(); |
885 } | 885 } |
886 | 886 |
887 unsigned WebMediaPlayerImpl::decodedFrameCount() const { | 887 unsigned WebMediaPlayerImpl::decodedFrameCount() const { |
888 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 888 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
889 | 889 |
890 PipelineStatistics stats = pipeline_.GetStatistics(); | 890 PipelineStatistics stats = GetPipelineStatistics(); |
891 return stats.video_frames_decoded; | 891 return stats.video_frames_decoded; |
892 } | 892 } |
893 | 893 |
894 unsigned WebMediaPlayerImpl::droppedFrameCount() const { | 894 unsigned WebMediaPlayerImpl::droppedFrameCount() const { |
895 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 895 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
896 | 896 |
897 PipelineStatistics stats = pipeline_.GetStatistics(); | 897 PipelineStatistics stats = GetPipelineStatistics(); |
898 return stats.video_frames_dropped; | 898 return stats.video_frames_dropped; |
899 } | 899 } |
900 | 900 |
901 size_t WebMediaPlayerImpl::audioDecodedByteCount() const { | 901 size_t WebMediaPlayerImpl::audioDecodedByteCount() const { |
902 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 902 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
903 | 903 |
904 PipelineStatistics stats = pipeline_.GetStatistics(); | 904 PipelineStatistics stats = GetPipelineStatistics(); |
905 return stats.audio_bytes_decoded; | 905 return stats.audio_bytes_decoded; |
906 } | 906 } |
907 | 907 |
908 size_t WebMediaPlayerImpl::videoDecodedByteCount() const { | 908 size_t WebMediaPlayerImpl::videoDecodedByteCount() const { |
909 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 909 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
910 | 910 |
911 PipelineStatistics stats = pipeline_.GetStatistics(); | 911 PipelineStatistics stats = GetPipelineStatistics(); |
912 return stats.video_bytes_decoded; | 912 return stats.video_bytes_decoded; |
913 } | 913 } |
914 | 914 |
915 bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture( | 915 bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture( |
916 gpu::gles2::GLES2Interface* gl, | 916 gpu::gles2::GLES2Interface* gl, |
917 unsigned int texture, | 917 unsigned int texture, |
918 bool premultiply_alpha, | 918 bool premultiply_alpha, |
919 bool flip_y) { | 919 bool flip_y) { |
920 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 920 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
921 TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture"); | 921 TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture"); |
(...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 base::Bind(&Demuxer::GetMemoryUsage, base::Unretained(demuxer_.get())), | 1998 base::Bind(&Demuxer::GetMemoryUsage, base::Unretained(demuxer_.get())), |
1999 base::Bind(&WebMediaPlayerImpl::FinishMemoryUsageReport, AsWeakPtr())); | 1999 base::Bind(&WebMediaPlayerImpl::FinishMemoryUsageReport, AsWeakPtr())); |
2000 } else { | 2000 } else { |
2001 FinishMemoryUsageReport(0); | 2001 FinishMemoryUsageReport(0); |
2002 } | 2002 } |
2003 } | 2003 } |
2004 | 2004 |
2005 void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) { | 2005 void WebMediaPlayerImpl::FinishMemoryUsageReport(int64_t demuxer_memory_usage) { |
2006 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 2006 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
2007 | 2007 |
2008 const PipelineStatistics stats = pipeline_.GetStatistics(); | 2008 const PipelineStatistics stats = GetPipelineStatistics(); |
2009 const int64_t data_source_memory_usage = | 2009 const int64_t data_source_memory_usage = |
2010 data_source_ ? data_source_->GetMemoryUsage() : 0; | 2010 data_source_ ? data_source_->GetMemoryUsage() : 0; |
2011 const int64_t current_memory_usage = | 2011 const int64_t current_memory_usage = |
2012 stats.audio_memory_usage + stats.video_memory_usage + | 2012 stats.audio_memory_usage + stats.video_memory_usage + |
2013 data_source_memory_usage + demuxer_memory_usage; | 2013 data_source_memory_usage + demuxer_memory_usage; |
2014 | 2014 |
2015 // Note, this isn't entirely accurate, there may be VideoFrames held by the | 2015 // Note, this isn't entirely accurate, there may be VideoFrames held by the |
2016 // compositor or other resources that we're unaware of. | 2016 // compositor or other resources that we're unaware of. |
2017 | 2017 |
2018 DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage | 2018 DVLOG(2) << "Memory Usage -- Audio: " << stats.audio_memory_usage |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2100 return false; | 2100 return false; |
2101 #else // defined(OS_ANDROID) | 2101 #else // defined(OS_ANDROID) |
2102 if (!IsBackgroundVideoTrackOptimizationEnabled()) | 2102 if (!IsBackgroundVideoTrackOptimizationEnabled()) |
2103 return false; | 2103 return false; |
2104 #endif // defined(OS_ANDROID) | 2104 #endif // defined(OS_ANDROID) |
2105 | 2105 |
2106 return hasVideo() && !hasAudio(); | 2106 return hasVideo() && !hasAudio(); |
2107 } | 2107 } |
2108 | 2108 |
2109 bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { | 2109 bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { |
| 2110 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
2110 DCHECK(IsHidden()); | 2111 DCHECK(IsHidden()); |
2111 return IsBackgroundVideoTrackOptimizationEnabled() && hasVideo() && | 2112 |
2112 hasAudio() && !IsStreaming(); | 2113 if (!IsBackgroundVideoTrackOptimizationEnabled() || !hasVideo() || |
| 2114 !hasAudio() || IsStreaming()) { |
| 2115 return false; |
| 2116 } |
| 2117 |
| 2118 PipelineStatistics stats = GetPipelineStatistics(); |
| 2119 return stats.video_keyframe_distance_average < |
| 2120 max_keyframe_distance_to_disable_background_video_; |
2113 } | 2121 } |
2114 | 2122 |
2115 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { | 2123 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { |
2116 DCHECK(!IsHidden()); | 2124 DCHECK(!IsHidden()); |
2117 | 2125 |
2118 // Don't change video track while the pipeline is resuming or seeking. | 2126 // Don't change video track while the pipeline is resuming or seeking. |
2119 if (is_pipeline_resuming_ || seeking_) | 2127 if (is_pipeline_resuming_ || seeking_) |
2120 return; | 2128 return; |
2121 | 2129 |
2122 if (video_track_disabled_) { | 2130 if (video_track_disabled_) { |
(...skipping 11 matching lines...) Expand all Loading... |
2134 // Don't change video track while the pipeline is resuming or seeking. | 2142 // Don't change video track while the pipeline is resuming or seeking. |
2135 if (is_pipeline_resuming_ || seeking_) | 2143 if (is_pipeline_resuming_ || seeking_) |
2136 return; | 2144 return; |
2137 | 2145 |
2138 if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) { | 2146 if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) { |
2139 video_track_disabled_ = true; | 2147 video_track_disabled_ = true; |
2140 selectedVideoTrackChanged(nullptr); | 2148 selectedVideoTrackChanged(nullptr); |
2141 } | 2149 } |
2142 } | 2150 } |
2143 | 2151 |
| 2152 void WebMediaPlayerImpl::SetPipelineStatisticsForTest( |
| 2153 const PipelineStatistics& stats) { |
| 2154 pipeline_statistics_for_test_ = base::make_optional(stats); |
| 2155 } |
| 2156 |
| 2157 PipelineStatistics WebMediaPlayerImpl::GetPipelineStatistics() const { |
| 2158 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 2159 |
| 2160 return pipeline_statistics_for_test_.value_or(pipeline_.GetStatistics()); |
| 2161 } |
| 2162 |
2144 } // namespace media | 2163 } // namespace media |
OLD | NEW |