OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "cc/layers/surface_layer_impl.h" | 5 #include "cc/layers/surface_layer_impl.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/trace_event/trace_event_argument.h" | 9 #include "base/trace_event/trace_event_argument.h" |
10 #include "cc/debug/debug_colors.h" | 10 #include "cc/debug/debug_colors.h" |
| 11 #include "cc/layers/append_quads_data.h" |
11 #include "cc/quads/solid_color_draw_quad.h" | 12 #include "cc/quads/solid_color_draw_quad.h" |
12 #include "cc/quads/surface_draw_quad.h" | 13 #include "cc/quads/surface_draw_quad.h" |
13 #include "cc/trees/layer_tree_impl.h" | 14 #include "cc/trees/layer_tree_impl.h" |
14 #include "cc/trees/occlusion.h" | 15 #include "cc/trees/occlusion.h" |
15 | 16 |
16 namespace cc { | 17 namespace cc { |
17 | 18 |
18 SurfaceLayerImpl::SurfaceLayerImpl(LayerTreeImpl* tree_impl, int id) | 19 SurfaceLayerImpl::SurfaceLayerImpl(LayerTreeImpl* tree_impl, int id) |
19 : LayerImpl(tree_impl, id) { | 20 : LayerImpl(tree_impl, id) { |
20 layer_tree_impl()->AddSurfaceLayer(this); | 21 layer_tree_impl()->AddSurfaceLayer(this); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); | 59 SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); |
59 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_); | 60 layer_impl->SetPrimarySurfaceInfo(primary_surface_info_); |
60 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_); | 61 layer_impl->SetFallbackSurfaceInfo(fallback_surface_info_); |
61 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_); | 62 layer_impl->SetStretchContentToFillBounds(stretch_content_to_fill_bounds_); |
62 } | 63 } |
63 | 64 |
64 void SurfaceLayerImpl::AppendQuads(RenderPass* render_pass, | 65 void SurfaceLayerImpl::AppendQuads(RenderPass* render_pass, |
65 AppendQuadsData* append_quads_data) { | 66 AppendQuadsData* append_quads_data) { |
66 AppendRainbowDebugBorder(render_pass); | 67 AppendRainbowDebugBorder(render_pass); |
67 auto* primary = CreateSurfaceDrawQuad( | 68 auto* primary = CreateSurfaceDrawQuad( |
68 render_pass, SurfaceDrawQuadType::PRIMARY, primary_surface_info_); | 69 render_pass, SurfaceDrawQuadType::PRIMARY, primary_surface_info_, |
| 70 &append_quads_data->embedded_surfaces); |
69 // Emitting a fallback SurfaceDrawQuad is unnecessary if the primary and | 71 // Emitting a fallback SurfaceDrawQuad is unnecessary if the primary and |
70 // fallback surface Ids match. | 72 // fallback surface Ids match. |
71 if (primary && fallback_surface_info_.id() != primary_surface_info_.id()) { | 73 if (primary && fallback_surface_info_.id() != primary_surface_info_.id()) { |
72 primary->fallback_quad = CreateSurfaceDrawQuad( | 74 primary->fallback_quad = CreateSurfaceDrawQuad( |
73 render_pass, SurfaceDrawQuadType::FALLBACK, fallback_surface_info_); | 75 render_pass, SurfaceDrawQuadType::FALLBACK, fallback_surface_info_, |
| 76 &append_quads_data->embedded_surfaces); |
74 } | 77 } |
75 } | 78 } |
76 | 79 |
77 SurfaceDrawQuad* SurfaceLayerImpl::CreateSurfaceDrawQuad( | 80 SurfaceDrawQuad* SurfaceLayerImpl::CreateSurfaceDrawQuad( |
78 RenderPass* render_pass, | 81 RenderPass* render_pass, |
79 SurfaceDrawQuadType surface_draw_quad_type, | 82 SurfaceDrawQuadType surface_draw_quad_type, |
80 const SurfaceInfo& surface_info) { | 83 const SurfaceInfo& surface_info, |
| 84 std::vector<SurfaceId>* embedded_surfaces) { |
81 if (!surface_info.is_valid()) | 85 if (!surface_info.is_valid()) |
82 return nullptr; | 86 return nullptr; |
83 | 87 |
84 gfx::Rect quad_rect(surface_info.size_in_pixels()); | 88 gfx::Rect quad_rect(surface_info.size_in_pixels()); |
85 gfx::Rect visible_quad_rect = | 89 gfx::Rect visible_quad_rect = |
86 draw_properties().occlusion_in_content_space.GetUnoccludedContentRect( | 90 draw_properties().occlusion_in_content_space.GetUnoccludedContentRect( |
87 gfx::Rect(bounds())); | 91 gfx::Rect(bounds())); |
88 | 92 |
89 float layer_to_content_scale_x, layer_to_content_scale_y; | 93 float layer_to_content_scale_x, layer_to_content_scale_y; |
90 if (stretch_content_to_fill_bounds_) { | 94 if (stretch_content_to_fill_bounds_) { |
(...skipping 19 matching lines...) Expand all Loading... |
110 | 114 |
111 SharedQuadState* shared_quad_state = | 115 SharedQuadState* shared_quad_state = |
112 render_pass->CreateAndAppendSharedQuadState(); | 116 render_pass->CreateAndAppendSharedQuadState(); |
113 PopulateScaledSharedQuadState(shared_quad_state, layer_to_content_scale_x, | 117 PopulateScaledSharedQuadState(shared_quad_state, layer_to_content_scale_x, |
114 layer_to_content_scale_y); | 118 layer_to_content_scale_y); |
115 | 119 |
116 SurfaceDrawQuad* surface_draw_quad = | 120 SurfaceDrawQuad* surface_draw_quad = |
117 render_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 121 render_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
118 surface_draw_quad->SetNew(shared_quad_state, quad_rect, visible_quad_rect, | 122 surface_draw_quad->SetNew(shared_quad_state, quad_rect, visible_quad_rect, |
119 surface_info.id(), surface_draw_quad_type, nullptr); | 123 surface_info.id(), surface_draw_quad_type, nullptr); |
| 124 embedded_surfaces->push_back(surface_info.id()); |
| 125 |
120 return surface_draw_quad; | 126 return surface_draw_quad; |
121 } | 127 } |
122 | 128 |
123 void SurfaceLayerImpl::GetDebugBorderProperties(SkColor* color, | 129 void SurfaceLayerImpl::GetDebugBorderProperties(SkColor* color, |
124 float* width) const { | 130 float* width) const { |
125 *color = DebugColors::SurfaceLayerBorderColor(); | 131 *color = DebugColors::SurfaceLayerBorderColor(); |
126 *width = DebugColors::SurfaceLayerBorderWidth( | 132 *width = DebugColors::SurfaceLayerBorderWidth( |
127 layer_tree_impl() ? layer_tree_impl()->device_scale_factor() : 1); | 133 layer_tree_impl() ? layer_tree_impl()->device_scale_factor() : 1); |
128 } | 134 } |
129 | 135 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 dict->SetString("surface_id", primary_surface_info_.id().ToString()); | 225 dict->SetString("surface_id", primary_surface_info_.id().ToString()); |
220 dict->SetString("fallback_surface_id", | 226 dict->SetString("fallback_surface_id", |
221 fallback_surface_info_.id().ToString()); | 227 fallback_surface_info_.id().ToString()); |
222 } | 228 } |
223 | 229 |
224 const char* SurfaceLayerImpl::LayerTypeAsString() const { | 230 const char* SurfaceLayerImpl::LayerTypeAsString() const { |
225 return "cc::SurfaceLayerImpl"; | 231 return "cc::SurfaceLayerImpl"; |
226 } | 232 } |
227 | 233 |
228 } // namespace cc | 234 } // namespace cc |
OLD | NEW |