| Index: ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
|
| diff --git a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
|
| index dcc8cca2b2029dfd5ff5dba6e9059ecb3f0c0589..985b06e9401fbe9c2589a89627b9f8de49d64ee5 100644
|
| --- a/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
|
| +++ b/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
|
| @@ -129,7 +129,10 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
|
|
| } // namespace
|
|
|
| -CARendererLayerTree::CARendererLayerTree() {}
|
| +CARendererLayerTree::CARendererLayerTree(
|
| + bool allow_av_sample_buffer_display_layer)
|
| + : allow_av_sample_buffer_display_layer_(
|
| + allow_av_sample_buffer_display_layer) {}
|
| CARendererLayerTree::~CARendererLayerTree() {}
|
|
|
| bool CARendererLayerTree::ScheduleCALayer(const CARendererLayerParams& params) {
|
| @@ -139,7 +142,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| LOG(ERROR) << "ScheduleCALayer called after CommitScheduledCALayers.";
|
| return false;
|
| }
|
| - return root_layer_.AddContentLayer(params);
|
| + return root_layer_.AddContentLayer(this, params);
|
| }
|
|
|
| void CARendererLayerTree::CommitScheduledCALayers(
|
| @@ -267,6 +270,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| }
|
|
|
| CARendererLayerTree::ContentLayer::ContentLayer(
|
| + CARendererLayerTree* tree,
|
| base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
|
| base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer,
|
| const gfx::RectF& contents_rect,
|
| @@ -311,7 +315,8 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
|
|
| // Only allow 4:2:0 frames which fill the layer's contents to be promoted to
|
| // AV layers.
|
| - if (IOSurfaceGetPixelFormat(io_surface) ==
|
| + if (tree->allow_av_sample_buffer_display_layer_ &&
|
| + IOSurfaceGetPixelFormat(io_surface) ==
|
| kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange &&
|
| contents_rect == gfx::RectF(0, 0, 1, 1)) {
|
| use_av_layer = true;
|
| @@ -339,6 +344,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| }
|
|
|
| bool CARendererLayerTree::RootLayer::AddContentLayer(
|
| + CARendererLayerTree* tree,
|
| const CARendererLayerParams& params) {
|
| bool needs_new_clip_and_sorting_layer = true;
|
|
|
| @@ -375,11 +381,12 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| params.is_clipped, params.clip_rect, params.sorting_context_id,
|
| is_singleton_sorting_context));
|
| }
|
| - clip_and_sorting_layers.back().AddContentLayer(params);
|
| + clip_and_sorting_layers.back().AddContentLayer(tree, params);
|
| return true;
|
| }
|
|
|
| void CARendererLayerTree::ClipAndSortingLayer::AddContentLayer(
|
| + CARendererLayerTree* tree,
|
| const CARendererLayerParams& params) {
|
| bool needs_new_transform_layer = true;
|
| if (!transform_layers.empty()) {
|
| @@ -389,10 +396,11 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| }
|
| if (needs_new_transform_layer)
|
| transform_layers.push_back(TransformLayer(params.transform));
|
| - transform_layers.back().AddContentLayer(params);
|
| + transform_layers.back().AddContentLayer(tree, params);
|
| }
|
|
|
| void CARendererLayerTree::TransformLayer::AddContentLayer(
|
| + CARendererLayerTree* tree,
|
| const CARendererLayerParams& params) {
|
| base::ScopedCFTypeRef<IOSurfaceRef> io_surface;
|
| base::ScopedCFTypeRef<CVPixelBufferRef> cv_pixel_buffer;
|
| @@ -405,7 +413,7 @@ bool AVSampleBufferDisplayLayerEnqueueIOSurface(
|
| }
|
|
|
| content_layers.push_back(
|
| - ContentLayer(io_surface, cv_pixel_buffer, params.contents_rect,
|
| + ContentLayer(tree, io_surface, cv_pixel_buffer, params.contents_rect,
|
| params.rect, params.background_color, params.edge_aa_mask,
|
| params.opacity, params.filter));
|
| }
|
|
|