Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index 2986a27c8a2daacba2205b99fca390f6d153e882..11e7c20f76223c823eea3ed56b9339e4cd311fe7 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -60,6 +60,7 @@ |
| #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
| #include "third_party/WebKit/public/platform/WebSize.h" |
| #include "third_party/WebKit/public/platform/WebString.h" |
| +#include "third_party/WebKit/public/platform/WebSurfaceLayerBridge.h" |
| #include "third_party/WebKit/public/platform/WebURL.h" |
| #include "third_party/WebKit/public/web/WebDocument.h" |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| @@ -259,6 +260,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| params->enable_instant_source_buffer_gc()), |
| embedded_media_experience_enabled_( |
| params->embedded_media_experience_enabled()), |
| + surface_layer_for_video_enabled_( |
| + base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)), |
| request_routing_token_cb_(params->request_routing_token_cb()), |
| overlay_routing_token_(OverlayInfo::RoutingToken()) { |
| DVLOG(1) << __func__; |
| @@ -267,6 +270,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| DCHECK(client_); |
| DCHECK(delegate_); |
| + if (surface_layer_for_video_enabled_) |
| + bridge_ = base::WrapUnique(blink::WebSurfaceLayerBridge::Create()); |
| + |
| force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kForceVideoOverlays); |
| @@ -323,8 +329,11 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
| // Destruct compositor resources in the proper order. |
| client_->SetWebLayer(nullptr); |
| - if (video_weblayer_) |
| + if (!surface_layer_for_video_enabled_ && video_weblayer_) { |
| static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider(); |
| + } |
| + // TODO(lethalantidote): Handle destruction of compositor for surface layer. |
| + // https://crbug/739854. |
| compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_); |
| media_log_->AddEvent( |
| @@ -1349,12 +1358,22 @@ void WebMediaPlayerImpl::OnMetadata(PipelineMetadata metadata) { |
| surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); |
| } |
| - DCHECK(!video_weblayer_); |
| - video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( |
| - compositor_, pipeline_metadata_.video_rotation))); |
| - video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| - video_weblayer_->SetContentsOpaqueIsFixed(true); |
| - client_->SetWebLayer(video_weblayer_.get()); |
| + if (!surface_layer_for_video_enabled_) { |
| + DCHECK(!video_weblayer_); |
| + video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( |
| + compositor_, pipeline_metadata_.video_rotation))); |
| + video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| + video_weblayer_->SetContentsOpaqueIsFixed(true); |
| + client_->SetWebLayer(video_weblayer_.get()); |
| + } else { |
| + if (bridge_->GetWebLayer()) { |
|
liberato (no reviews please)
2017/07/07 15:26:43
} else if () {, mostly to reduce the indentation.
|
| + bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_); |
| + // TODO(lethalantidote): Figure out how to persist opaque setting |
| + // without calling WebLayerImpl's SetContentsOpaueIsFixed; |
| + // https://crbug/739859. |
| + client_->SetWebLayer(bridge_->GetWebLayer()); |
| + } |
| + } |
| } |
| if (observer_) |
| @@ -1548,8 +1567,14 @@ void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { |
| opaque_ = opaque; |
| // Modify content opaqueness of cc::Layer directly so that |
| // SetContentsOpaqueIsFixed is ignored. |
| - if (video_weblayer_) |
| - video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| + if (!surface_layer_for_video_enabled_) { |
| + if (video_weblayer_) |
| + video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| + } else { |
| + if (bridge_->GetWebLayer()) { |
|
liberato (no reviews please)
2017/07/07 15:26:43
} else if () {
|
| + bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_); |
| + } |
| + } |
| } |
| void WebMediaPlayerImpl::OnVideoAverageKeyframeDistanceUpdate() { |
| @@ -1723,10 +1748,17 @@ void WebMediaPlayerImpl::SuspendForRemote() { |
| } |
| gfx::Size WebMediaPlayerImpl::GetCanvasSize() const { |
| - if (!video_weblayer_) |
| - return pipeline_metadata_.natural_size; |
| + if (!surface_layer_for_video_enabled_) { |
| + if (!video_weblayer_) |
| + return pipeline_metadata_.natural_size; |
| - return video_weblayer_->Bounds(); |
| + return video_weblayer_->Bounds(); |
| + } else { |
| + if (!bridge_->GetWebLayer()) |
|
liberato (no reviews please)
2017/07/07 15:26:43
} else if () {
CJ
2017/07/07 18:50:47
Done.
|
| + return pipeline_metadata_.natural_size; |
| + |
| + return bridge_->GetWebLayer()->Bounds(); |
| + } |
| } |
| void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) { |