Index: cc/layers/video_layer_impl.cc |
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc |
index 38494525536097775d0cd6b25a2433002c5efa67..8613232c9d90c0109c9e44a6369716a1e6ff77f2 100644 |
--- a/cc/layers/video_layer_impl.cc |
+++ b/cc/layers/video_layer_impl.cc |
@@ -69,8 +69,10 @@ void VideoLayerImpl::DidBecomeActive() { |
provider_client_impl_->set_active_video_layer(this); |
} |
-void VideoLayerImpl::WillDraw(ResourceProvider* resource_provider) { |
- LayerImpl::WillDraw(resource_provider); |
+bool VideoLayerImpl::WillDraw(DrawMode draw_mode, |
+ ResourceProvider* resource_provider) { |
+ if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) |
+ return false; |
// Explicitly acquire and release the provider mutex so it can be held from |
// WillDraw to DidDraw. Since the compositor thread is in the middle of |
@@ -86,9 +88,11 @@ void VideoLayerImpl::WillDraw(ResourceProvider* resource_provider) { |
updater_.reset(); |
provider_client_impl_->ReleaseLock(); |
- return; |
+ return false; |
} |
+ LayerImpl::WillDraw(draw_mode, resource_provider); |
+ |
if (!updater_) |
updater_.reset(new VideoResourceUpdater(resource_provider)); |
@@ -105,14 +109,14 @@ void VideoLayerImpl::WillDraw(ResourceProvider* resource_provider) { |
software_resources_ = external_resources.software_resources; |
software_release_callback_ = |
external_resources.software_release_callback; |
- return; |
+ return true; |
} |
if (external_resources.hardware_resource) { |
hardware_resource_ = external_resources.hardware_resource; |
hardware_release_callback_ = |
external_resources.hardware_release_callback; |
- return; |
+ return true; |
} |
for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) { |
@@ -120,6 +124,8 @@ void VideoLayerImpl::WillDraw(ResourceProvider* resource_provider) { |
resource_provider->CreateResourceFromTextureMailbox( |
external_resources.mailboxes[i])); |
} |
+ |
+ return true; |
} |
void VideoLayerImpl::AppendQuads(QuadSink* quad_sink, |
@@ -280,9 +286,6 @@ void VideoLayerImpl::AppendQuads(QuadSink* quad_sink, |
void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) { |
LayerImpl::DidDraw(resource_provider); |
- if (!frame_) |
- return; |
- |
if (frame_resource_type_ == |
VideoFrameExternalResources::SOFTWARE_RESOURCE) { |
for (size_t i = 0; i < software_resources_.size(); ++i) |
@@ -304,6 +307,7 @@ void VideoLayerImpl::DidDraw(ResourceProvider* resource_provider) { |
frame_ = NULL; |
provider_client_impl_->ReleaseLock(); |
+ |
} |
void VideoLayerImpl::DidLoseOutputSurface() { |