OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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/layer.h" | 5 #include "cc/layers/layer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
11 | 11 |
12 #include "base/atomic_sequence_num.h" | 12 #include "base/atomic_sequence_num.h" |
13 #include "base/location.h" | 13 #include "base/location.h" |
14 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
15 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" |
16 #include "base/time/time.h" | 16 #include "base/time/time.h" |
17 #include "base/trace_event/trace_event.h" | 17 #include "base/trace_event/trace_event.h" |
18 #include "cc/base/simple_enclosed_region.h" | 18 #include "cc/base/simple_enclosed_region.h" |
19 #include "cc/debug/frame_viewer_instrumentation.h" | 19 #include "cc/debug/frame_viewer_instrumentation.h" |
20 #include "cc/input/main_thread_scrolling_reason.h" | 20 #include "cc/input/main_thread_scrolling_reason.h" |
21 #include "cc/layers/layer_client.h" | 21 #include "cc/layers/layer_client.h" |
22 #include "cc/layers/layer_impl.h" | 22 #include "cc/layers/layer_impl.h" |
23 #include "cc/layers/scrollbar_layer_interface.h" | 23 #include "cc/layers/scrollbar_layer_interface.h" |
24 #include "cc/output/copy_output_request.h" | 24 #include "cc/output/copy_output_request.h" |
25 #include "cc/output/copy_output_result.h" | 25 #include "cc/output/copy_output_result.h" |
26 #include "cc/proto/cc_conversions.h" | |
27 #include "cc/proto/gfx_conversions.h" | |
28 #include "cc/proto/layer.pb.h" | |
29 #include "cc/proto/skia_conversions.h" | |
30 #include "cc/trees/draw_property_utils.h" | 26 #include "cc/trees/draw_property_utils.h" |
31 #include "cc/trees/effect_node.h" | 27 #include "cc/trees/effect_node.h" |
32 #include "cc/trees/layer_tree_host.h" | 28 #include "cc/trees/layer_tree_host.h" |
33 #include "cc/trees/layer_tree_impl.h" | 29 #include "cc/trees/layer_tree_impl.h" |
34 #include "cc/trees/mutable_properties.h" | 30 #include "cc/trees/mutable_properties.h" |
35 #include "cc/trees/mutator_host.h" | 31 #include "cc/trees/mutator_host.h" |
36 #include "cc/trees/transform_node.h" | 32 #include "cc/trees/transform_node.h" |
37 #include "third_party/skia/include/core/SkImageFilter.h" | 33 #include "third_party/skia/include/core/SkImageFilter.h" |
38 #include "ui/gfx/geometry/rect_conversions.h" | 34 #include "ui/gfx/geometry/rect_conversions.h" |
39 #include "ui/gfx/geometry/vector2d_conversions.h" | 35 #include "ui/gfx/geometry/vector2d_conversions.h" |
(...skipping 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1219 if (main_thread_request->has_area()) { | 1215 if (main_thread_request->has_area()) { |
1220 main_thread_request->set_area(gfx::IntersectRects( | 1216 main_thread_request->set_area(gfx::IntersectRects( |
1221 main_thread_request->area(), gfx::Rect(bounds()))); | 1217 main_thread_request->area(), gfx::Rect(bounds()))); |
1222 } | 1218 } |
1223 requests->push_back(std::move(main_thread_request)); | 1219 requests->push_back(std::move(main_thread_request)); |
1224 } | 1220 } |
1225 | 1221 |
1226 inputs_.copy_requests.clear(); | 1222 inputs_.copy_requests.clear(); |
1227 } | 1223 } |
1228 | 1224 |
1229 void Layer::SetTypeForProtoSerialization(proto::LayerNode* proto) const { | |
1230 proto->set_type(proto::LayerNode::LAYER); | |
1231 } | |
1232 | |
1233 void Layer::ToLayerNodeProto(proto::LayerNode* proto) const { | |
1234 proto->set_id(inputs_.layer_id); | |
1235 SetTypeForProtoSerialization(proto); | |
1236 | |
1237 if (parent_) | |
1238 proto->set_parent_id(parent_->id()); | |
1239 | |
1240 DCHECK_EQ(0, proto->children_size()); | |
1241 for (const auto& child : inputs_.children) { | |
1242 child->ToLayerNodeProto(proto->add_children()); | |
1243 } | |
1244 | |
1245 if (inputs_.mask_layer) | |
1246 inputs_.mask_layer->ToLayerNodeProto(proto->mutable_mask_layer()); | |
1247 } | |
1248 | |
1249 void Layer::ToLayerPropertiesProto(proto::LayerProperties* proto) { | |
1250 proto->set_id(inputs_.layer_id); | |
1251 | |
1252 proto::BaseLayerProperties* base = proto->mutable_base(); | |
1253 RectToProto(inputs_.update_rect, base->mutable_update_rect()); | |
1254 inputs_.update_rect = gfx::Rect(); | |
1255 | |
1256 bool use_paint_properties = layer_tree_host_ && | |
1257 paint_properties_.source_frame_number == | |
1258 layer_tree_host_->SourceFrameNumber(); | |
1259 SizeToProto(use_paint_properties ? paint_properties_.bounds : inputs_.bounds, | |
1260 base->mutable_bounds()); | |
1261 | |
1262 base->set_masks_to_bounds(inputs_.masks_to_bounds); | |
1263 base->set_opacity(inputs_.opacity); | |
1264 base->set_blend_mode(SkXfermodeModeToProto(inputs_.blend_mode)); | |
1265 base->set_is_root_for_isolated_group(inputs_.is_root_for_isolated_group); | |
1266 base->set_contents_opaque(inputs_.contents_opaque); | |
1267 PointFToProto(inputs_.position, base->mutable_position()); | |
1268 TransformToProto(inputs_.transform, base->mutable_transform()); | |
1269 Point3FToProto(inputs_.transform_origin, base->mutable_transform_origin()); | |
1270 base->set_is_drawable(inputs_.is_drawable); | |
1271 base->set_double_sided(inputs_.double_sided); | |
1272 base->set_should_flatten_transform(inputs_.should_flatten_transform); | |
1273 base->set_sorting_context_id(inputs_.sorting_context_id); | |
1274 base->set_use_parent_backface_visibility( | |
1275 inputs_.use_parent_backface_visibility); | |
1276 base->set_background_color(inputs_.background_color); | |
1277 ScrollOffsetToProto(inputs_.scroll_offset, base->mutable_scroll_offset()); | |
1278 base->set_scroll_clip_layer_id(inputs_.scroll_clip_layer_id); | |
1279 base->set_user_scrollable_horizontal(inputs_.user_scrollable_horizontal); | |
1280 base->set_user_scrollable_vertical(inputs_.user_scrollable_vertical); | |
1281 base->set_main_thread_scrolling_reasons( | |
1282 inputs_.main_thread_scrolling_reasons); | |
1283 RegionToProto(inputs_.non_fast_scrollable_region, | |
1284 base->mutable_non_fast_scrollable_region()); | |
1285 RegionToProto(inputs_.touch_event_handler_region, | |
1286 base->mutable_touch_event_handler_region()); | |
1287 base->set_is_container_for_fixed_position_layers( | |
1288 inputs_.is_container_for_fixed_position_layers); | |
1289 inputs_.position_constraint.ToProtobuf(base->mutable_position_constraint()); | |
1290 inputs_.sticky_position_constraint.ToProtobuf( | |
1291 base->mutable_sticky_position_constraint()); | |
1292 | |
1293 int scroll_parent_id = | |
1294 inputs_.scroll_parent ? inputs_.scroll_parent->id() : INVALID_ID; | |
1295 base->set_scroll_parent_id(scroll_parent_id); | |
1296 | |
1297 int clip_parent_id = | |
1298 inputs_.clip_parent ? inputs_.clip_parent->id() : INVALID_ID; | |
1299 base->set_clip_parent_id(clip_parent_id); | |
1300 | |
1301 base->set_has_will_change_transform_hint( | |
1302 inputs_.has_will_change_transform_hint); | |
1303 base->set_hide_layer_and_subtree(inputs_.hide_layer_and_subtree); | |
1304 | |
1305 // TODO(nyquist): Add support for serializing FilterOperations for | |
1306 // |filters_| and |background_filters_|. See crbug.com/541321. | |
1307 } | |
1308 | |
1309 std::unique_ptr<LayerImpl> Layer::CreateLayerImpl(LayerTreeImpl* tree_impl) { | 1225 std::unique_ptr<LayerImpl> Layer::CreateLayerImpl(LayerTreeImpl* tree_impl) { |
1310 return LayerImpl::Create(tree_impl, inputs_.layer_id); | 1226 return LayerImpl::Create(tree_impl, inputs_.layer_id); |
1311 } | 1227 } |
1312 | 1228 |
1313 bool Layer::DrawsContent() const { | 1229 bool Layer::DrawsContent() const { |
1314 return draws_content_; | 1230 return draws_content_; |
1315 } | 1231 } |
1316 | 1232 |
1317 bool Layer::HasDrawableContent() const { | 1233 bool Layer::HasDrawableContent() const { |
1318 return inputs_.is_drawable; | 1234 return inputs_.is_drawable; |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1661 gfx::Transform Layer::screen_space_transform() const { | 1577 gfx::Transform Layer::screen_space_transform() const { |
1662 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); | 1578 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); |
1663 return draw_property_utils::ScreenSpaceTransform( | 1579 return draw_property_utils::ScreenSpaceTransform( |
1664 this, layer_tree_->property_trees()->transform_tree); | 1580 this, layer_tree_->property_trees()->transform_tree); |
1665 } | 1581 } |
1666 | 1582 |
1667 LayerTree* Layer::GetLayerTree() const { | 1583 LayerTree* Layer::GetLayerTree() const { |
1668 return layer_tree_; | 1584 return layer_tree_; |
1669 } | 1585 } |
1670 | 1586 |
1671 void Layer::SetLayerIdForTesting(int id) { | |
1672 inputs_.layer_id = id; | |
1673 } | |
1674 | |
1675 } // namespace cc | 1587 } // namespace cc |
OLD | NEW |