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

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

Issue 2658513003: [Cleanup] Rename Hidden to Background in WMPI.
Patch Set: Created 3 years, 10 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 1387 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 if (video_weblayer_) 1398 if (video_weblayer_)
1399 video_weblayer_->layer()->SetContentsOpaque(opaque_); 1399 video_weblayer_->layer()->SetContentsOpaque(opaque_);
1400 } 1400 }
1401 1401
1402 void WebMediaPlayerImpl::OnFrameHidden() { 1402 void WebMediaPlayerImpl::OnFrameHidden() {
1403 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1403 DCHECK(main_task_runner_->BelongsToCurrentThread());
1404 1404
1405 if (watch_time_reporter_) 1405 if (watch_time_reporter_)
1406 watch_time_reporter_->OnHidden(); 1406 watch_time_reporter_->OnHidden();
1407 1407
1408 // OnFrameHidden() can be called when frame is closed, then IsHidden() will 1408 if (IsBackground()) {
1409 // return false, so check explicitly. 1409 if (ShouldPauseVideoWhenBackground()) {
1410 if (IsHidden()) {
1411 if (ShouldPauseVideoWhenHidden()) {
1412 PauseVideoIfNeeded(); 1410 PauseVideoIfNeeded();
1413 return; 1411 return;
1414 } else { 1412 } else {
1415 DisableVideoTrackIfNeeded(); 1413 DisableVideoTrackIfNeeded();
1416 } 1414 }
1417 } 1415 }
1418 1416
1419 UpdatePlayState(); 1417 UpdatePlayState();
1420 1418
1421 // Schedule suspended playing media to be paused if the user doesn't come back 1419 // Schedule suspended playing media to be paused if the user doesn't come back
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1797 1795
1798 #if defined(OS_ANDROID) // WMPI_CAST 1796 #if defined(OS_ANDROID) // WMPI_CAST
1799 bool is_remote = isRemote(); 1797 bool is_remote = isRemote();
1800 bool is_streaming = false; 1798 bool is_streaming = false;
1801 #else 1799 #else
1802 bool is_remote = false; 1800 bool is_remote = false;
1803 bool is_streaming = IsStreaming(); 1801 bool is_streaming = IsStreaming();
1804 #endif 1802 #endif
1805 1803
1806 bool is_suspended = pipeline_controller_.IsSuspended(); 1804 bool is_suspended = pipeline_controller_.IsSuspended();
1807 bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsHidden(); 1805 bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsBackground();
1808 PlayState state = UpdatePlayState_ComputePlayState( 1806 PlayState state = UpdatePlayState_ComputePlayState(
1809 is_remote, is_streaming, is_suspended, is_backgrounded); 1807 is_remote, is_streaming, is_suspended, is_backgrounded);
1810 SetDelegateState(state.delegate_state, state.is_idle); 1808 SetDelegateState(state.delegate_state, state.is_idle);
1811 SetMemoryReportingState(state.is_memory_reporting_enabled); 1809 SetMemoryReportingState(state.is_memory_reporting_enabled);
1812 SetSuspendState(state.is_suspended || pending_suspend_resume_cycle_); 1810 SetSuspendState(state.is_suspended || pending_suspend_resume_cycle_);
1813 } 1811 }
1814 1812
1815 void WebMediaPlayerImpl::SetDelegateState(DelegateState new_state, 1813 void WebMediaPlayerImpl::SetDelegateState(DelegateState new_state,
1816 bool is_idle) { 1814 bool is_idle) {
1817 DCHECK(delegate_); 1815 DCHECK(delegate_);
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_, 2094 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_,
2097 pipeline_metadata_.natural_size, 2095 pipeline_metadata_.natural_size,
2098 base::Bind(&GetCurrentTimeInternal, this))); 2096 base::Bind(&GetCurrentTimeInternal, this)));
2099 watch_time_reporter_->OnVolumeChange(volume_); 2097 watch_time_reporter_->OnVolumeChange(volume_);
2100 if (delegate_->IsFrameHidden()) 2098 if (delegate_->IsFrameHidden())
2101 watch_time_reporter_->OnHidden(); 2099 watch_time_reporter_->OnHidden();
2102 else 2100 else
2103 watch_time_reporter_->OnShown(); 2101 watch_time_reporter_->OnShown();
2104 } 2102 }
2105 2103
2106 bool WebMediaPlayerImpl::IsHidden() const { 2104 bool WebMediaPlayerImpl::IsBackground() const {
2107 DCHECK(main_task_runner_->BelongsToCurrentThread()); 2105 DCHECK(main_task_runner_->BelongsToCurrentThread());
2108 2106
2107 // Nothing related to the media being in the background should matter if the
2108 // frame is closed. However, the delegate might call OnFrameHidden() when
2109 // closed so specifically exclude this case.
2109 return delegate_->IsFrameHidden() && !delegate_->IsFrameClosed(); 2110 return delegate_->IsFrameHidden() && !delegate_->IsFrameClosed();
2110 } 2111 }
2111 2112
2112 bool WebMediaPlayerImpl::IsStreaming() const { 2113 bool WebMediaPlayerImpl::IsStreaming() const {
2113 return data_source_ && data_source_->IsStreaming(); 2114 return data_source_ && data_source_->IsStreaming();
2114 } 2115 }
2115 2116
2116 bool WebMediaPlayerImpl::DoesOverlaySupportMetadata() const { 2117 bool WebMediaPlayerImpl::DoesOverlaySupportMetadata() const {
2117 return pipeline_metadata_.video_rotation == VIDEO_ROTATION_0; 2118 return pipeline_metadata_.video_rotation == VIDEO_ROTATION_0;
2118 } 2119 }
2119 2120
2120 void WebMediaPlayerImpl::ActivateViewportIntersectionMonitoring(bool activate) { 2121 void WebMediaPlayerImpl::ActivateViewportIntersectionMonitoring(bool activate) {
2121 DCHECK(main_task_runner_->BelongsToCurrentThread()); 2122 DCHECK(main_task_runner_->BelongsToCurrentThread());
2122 2123
2123 client_->activateViewportIntersectionMonitoring(activate); 2124 client_->activateViewportIntersectionMonitoring(activate);
2124 } 2125 }
2125 2126
2126 bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const { 2127 bool WebMediaPlayerImpl::ShouldPauseVideoWhenBackground() const {
2127 #if !defined(OS_ANDROID) 2128 #if !defined(OS_ANDROID)
2128 // On desktop, this behavior is behind the feature flag. 2129 // On desktop, this behavior is behind the feature flag.
2129 if (!IsBackgroundVideoTrackOptimizationEnabled()) 2130 if (!IsBackgroundVideoTrackOptimizationEnabled())
2130 return false; 2131 return false;
2131 #endif 2132 #endif
2132 2133
2133 // Pause video-only players that match the criteria for being optimized. 2134 // Pause video-only players that match the criteria for being optimized.
2134 return !hasAudio() && IsBackgroundOptimizationCandidate(); 2135 return !hasAudio() && IsBackgroundOptimizationCandidate();
2135 } 2136 }
2136 2137
2137 bool WebMediaPlayerImpl::ShouldDisableVideoWhenHidden() const { 2138 bool WebMediaPlayerImpl::ShouldDisableVideoWhenBackground() const {
2138 // This optimization is behind the flag on all platforms. 2139 // This optimization is behind the flag on all platforms.
2139 if (!IsBackgroundVideoTrackOptimizationEnabled()) 2140 if (!IsBackgroundVideoTrackOptimizationEnabled())
2140 return false; 2141 return false;
2141 2142
2142 // Disable video track only for players with audio that match the criteria for 2143 // Disable video track only for players with audio that match the criteria for
2143 // being optimized. 2144 // being optimized.
2144 return hasAudio() && IsBackgroundOptimizationCandidate(); 2145 return hasAudio() && IsBackgroundOptimizationCandidate();
2145 } 2146 }
2146 2147
2147 bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const { 2148 bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const {
(...skipping 19 matching lines...) Expand all
2167 if (duration < max_keyframe_distance_to_disable_background_video_) 2168 if (duration < max_keyframe_distance_to_disable_background_video_)
2168 return true; 2169 return true;
2169 2170
2170 // Otherwise, only optimize videos with shorter average keyframe distance. 2171 // Otherwise, only optimize videos with shorter average keyframe distance.
2171 PipelineStatistics stats = GetPipelineStatistics(); 2172 PipelineStatistics stats = GetPipelineStatistics();
2172 return stats.video_keyframe_distance_average < 2173 return stats.video_keyframe_distance_average <
2173 max_keyframe_distance_to_disable_background_video_; 2174 max_keyframe_distance_to_disable_background_video_;
2174 } 2175 }
2175 2176
2176 void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() { 2177 void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() {
2177 if (IsHidden()) { 2178 if (IsBackground()) {
2178 if (ShouldPauseVideoWhenHidden()) 2179 if (ShouldPauseVideoWhenBackground())
2179 PauseVideoIfNeeded(); 2180 PauseVideoIfNeeded();
2180 else 2181 else
2181 DisableVideoTrackIfNeeded(); 2182 DisableVideoTrackIfNeeded();
2182 } else { 2183 } else {
2183 EnableVideoTrackIfNeeded(); 2184 EnableVideoTrackIfNeeded();
2184 } 2185 }
2185 } 2186 }
2186 2187
2187 void WebMediaPlayerImpl::PauseVideoIfNeeded() { 2188 void WebMediaPlayerImpl::PauseVideoIfNeeded() {
2188 DCHECK(IsHidden()); 2189 DCHECK(IsBackground());
2189 2190
2190 // Don't pause video while the pipeline is stopped, resuming or seeking. 2191 // Don't pause video while the pipeline is stopped, resuming or seeking.
2191 // Also if the video is paused already. 2192 // Also if the video is paused already.
2192 if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_ || paused_) 2193 if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_ || paused_)
2193 return; 2194 return;
2194 2195
2195 // OnPause() will set |paused_when_hidden_| to false and call 2196 // OnPause() will set |paused_when_hidden_| to false and call
2196 // UpdatePlayState(), so set the flag to true after and then return. 2197 // UpdatePlayState(), so set the flag to true after and then return.
2197 OnPause(); 2198 OnPause();
2198 paused_when_hidden_ = true; 2199 paused_when_hidden_ = true;
2199 } 2200 }
2200 2201
2201 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { 2202 void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() {
2202 // Don't change video track while the pipeline is stopped, resuming or 2203 // Don't change video track while the pipeline is stopped, resuming or
2203 // seeking. 2204 // seeking.
2204 if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_) 2205 if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_)
2205 return; 2206 return;
2206 2207
2207 if (video_track_disabled_) { 2208 if (video_track_disabled_) {
2208 video_track_disabled_ = false; 2209 video_track_disabled_ = false;
2209 if (client_->hasSelectedVideoTrack()) { 2210 if (client_->hasSelectedVideoTrack()) {
2210 WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); 2211 WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId();
2211 selectedVideoTrackChanged(&trackId); 2212 selectedVideoTrackChanged(&trackId);
2212 } 2213 }
2213 } 2214 }
2214 } 2215 }
2215 2216
2216 void WebMediaPlayerImpl::DisableVideoTrackIfNeeded() { 2217 void WebMediaPlayerImpl::DisableVideoTrackIfNeeded() {
2217 DCHECK(IsHidden()); 2218 DCHECK(IsBackground());
2218 2219
2219 // Don't change video track while the pipeline is resuming or seeking. 2220 // Don't change video track while the pipeline is resuming or seeking.
2220 if (is_pipeline_resuming_ || seeking_) 2221 if (is_pipeline_resuming_ || seeking_)
2221 return; 2222 return;
2222 2223
2223 if (!video_track_disabled_ && ShouldDisableVideoWhenHidden()) { 2224 if (!video_track_disabled_ && ShouldDisableVideoWhenBackground()) {
2224 video_track_disabled_ = true; 2225 video_track_disabled_ = true;
2225 selectedVideoTrackChanged(nullptr); 2226 selectedVideoTrackChanged(nullptr);
2226 } 2227 }
2227 } 2228 }
2228 2229
2229 void WebMediaPlayerImpl::SetPipelineStatisticsForTest( 2230 void WebMediaPlayerImpl::SetPipelineStatisticsForTest(
2230 const PipelineStatistics& stats) { 2231 const PipelineStatistics& stats) {
2231 pipeline_statistics_for_test_ = base::make_optional(stats); 2232 pipeline_statistics_for_test_ = base::make_optional(stats);
2232 } 2233 }
2233 2234
(...skipping 23 matching lines...) Expand all
2257 UMA_HISTOGRAM_TIMES( 2258 UMA_HISTOGRAM_TIMES(
2258 "Media.Video.TimeFromForegroundToFirstFrame.DisableTrack", 2259 "Media.Video.TimeFromForegroundToFirstFrame.DisableTrack",
2259 time_to_first_frame); 2260 time_to_first_frame);
2260 } else { 2261 } else {
2261 UMA_HISTOGRAM_TIMES("Media.Video.TimeFromForegroundToFirstFrame.Paused", 2262 UMA_HISTOGRAM_TIMES("Media.Video.TimeFromForegroundToFirstFrame.Paused",
2262 time_to_first_frame); 2263 time_to_first_frame);
2263 } 2264 }
2264 } 2265 }
2265 2266
2266 } // namespace media 2267 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698