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

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 1885073004: Merge M51: "Disable idle suspend for GpuVideoDecoder produced frames on OSX, Win." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/filters/gpu_video_decoder.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/webmediaplayer_impl.cc
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 0b270e96d4069dbcb229ad0c1e1c287695738d94..0b02e112ab68cd06f786320a28cf04d90f9978f2 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -204,7 +204,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
volume_multiplier_(1.0),
renderer_factory_(std::move(renderer_factory)),
surface_manager_(params.surface_manager()),
- suppress_destruction_errors_(false) {
+ suppress_destruction_errors_(false),
+ can_suspend_state_(CanSuspendState::UNKNOWN) {
DCHECK(!adjust_allocated_memory_cb_.is_null());
DCHECK(renderer_factory_);
DCHECK(client_);
@@ -1062,13 +1063,6 @@ void WebMediaPlayerImpl::OnShown() {
void WebMediaPlayerImpl::OnSuspendRequested(bool must_suspend) {
DCHECK(main_task_runner_->BelongsToCurrentThread());
-#if defined(OS_MACOSX)
- // TODO(sandersd): Idle suspend is disabled on OSX since hardware decoded
- // frames are owned by the video decoder in the GPU process. A mechanism for
- // detaching ownership from the decoder is needed. http://crbug.com/595716.
- return;
-#endif
-
if (must_suspend) {
must_suspend_ = true;
} else {
@@ -1455,6 +1449,26 @@ void WebMediaPlayerImpl::SetSuspendState(bool is_suspended) {
if (IsNetworkStateError(network_state_))
return;
+#if defined(OS_MACOSX) || defined(OS_WIN)
+ // TODO(sandersd): Idle suspend is disabled on OSX and Windows for hardware
+ // decoding / opaque video frames since these frames are owned by the decoder
+ // in the GPU process. http://crbug.com/595716 and http://crbug.com/602708
+ if (can_suspend_state_ == CanSuspendState::UNKNOWN) {
+ scoped_refptr<VideoFrame> frame = GetCurrentFrameFromCompositor();
+ if (frame) {
+ can_suspend_state_ =
+ frame->metadata()->IsTrue(VideoFrameMetadata::DECODER_OWNS_FRAME)
+ ? CanSuspendState::NO
+ : CanSuspendState::YES;
+ }
+ }
+#else
+ can_suspend_state_ = CanSuspendState::YES;
+#endif
+
+ if (can_suspend_state_ == CanSuspendState::NO)
+ return;
+
if (is_suspended) {
pipeline_controller_.Suspend();
} else {
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | media/filters/gpu_video_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698