OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 if (requests->empty()) | 297 if (requests->empty()) |
298 return; | 298 return; |
299 | 299 |
300 bool was_empty = copy_requests_.empty(); | 300 bool was_empty = copy_requests_.empty(); |
301 for (auto& request : *requests) | 301 for (auto& request : *requests) |
302 copy_requests_.push_back(std::move(request)); | 302 copy_requests_.push_back(std::move(request)); |
303 requests->clear(); | 303 requests->clear(); |
304 | 304 |
305 if (was_empty && layer_tree_impl()->IsActiveTree()) | 305 if (was_empty && layer_tree_impl()->IsActiveTree()) |
306 layer_tree_impl()->AddLayerWithCopyOutputRequest(this); | 306 layer_tree_impl()->AddLayerWithCopyOutputRequest(this); |
307 NoteLayerPropertyChangedForSubtree(); | |
308 } | 307 } |
309 | 308 |
310 void LayerImpl::TakeCopyRequestsAndTransformToTarget( | 309 void LayerImpl::TakeCopyRequestsAndTransformToTarget( |
311 std::vector<scoped_ptr<CopyOutputRequest>>* requests) { | 310 std::vector<scoped_ptr<CopyOutputRequest>>* requests) { |
312 DCHECK(!copy_requests_.empty()); | 311 DCHECK(!copy_requests_.empty()); |
313 DCHECK(layer_tree_impl()->IsActiveTree()); | 312 DCHECK(layer_tree_impl()->IsActiveTree()); |
314 DCHECK_EQ(render_target(), this); | 313 DCHECK_EQ(render_target(), this); |
315 | 314 |
316 size_t first_inserted_request = requests->size(); | 315 size_t first_inserted_request = requests->size(); |
317 for (auto& request : copy_requests_) | 316 for (auto& request : copy_requests_) |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 layer->SetPositionConstraint(position_constraint_); | 632 layer->SetPositionConstraint(position_constraint_); |
634 layer->SetShouldFlattenTransform(should_flatten_transform_); | 633 layer->SetShouldFlattenTransform(should_flatten_transform_); |
635 layer->set_should_flatten_transform_from_property_tree( | 634 layer->set_should_flatten_transform_from_property_tree( |
636 should_flatten_transform_from_property_tree_); | 635 should_flatten_transform_from_property_tree_); |
637 layer->set_draw_blend_mode(draw_blend_mode_); | 636 layer->set_draw_blend_mode(draw_blend_mode_); |
638 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); | 637 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); |
639 layer->SetUseLocalTransformForBackfaceVisibility( | 638 layer->SetUseLocalTransformForBackfaceVisibility( |
640 use_local_transform_for_backface_visibility_); | 639 use_local_transform_for_backface_visibility_); |
641 layer->SetShouldCheckBackfaceVisibility(should_check_backface_visibility_); | 640 layer->SetShouldCheckBackfaceVisibility(should_check_backface_visibility_); |
642 layer->SetTransformAndInvertibility(transform_, transform_is_invertible_); | 641 layer->SetTransformAndInvertibility(transform_, transform_is_invertible_); |
| 642 if (layer_property_changed_) |
| 643 layer->NoteLayerPropertyChanged(); |
643 | 644 |
644 layer->SetScrollClipLayer(scroll_clip_layer_id_); | 645 layer->SetScrollClipLayer(scroll_clip_layer_id_); |
645 layer->SetElementId(element_id_); | 646 layer->SetElementId(element_id_); |
646 layer->SetMutableProperties(mutable_properties_); | 647 layer->SetMutableProperties(mutable_properties_); |
647 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); | 648 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); |
648 layer->set_user_scrollable_vertical(user_scrollable_vertical_); | 649 layer->set_user_scrollable_vertical(user_scrollable_vertical_); |
649 | 650 |
650 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_); | 651 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_); |
651 | 652 |
652 layer->PushScrollOffset(nullptr); | 653 layer->PushScrollOffset(nullptr); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 layer->SetStackingOrderChanged(stacking_order_changed_); | 714 layer->SetStackingOrderChanged(stacking_order_changed_); |
714 layer->SetDebugInfo(debug_info_); | 715 layer->SetDebugInfo(debug_info_); |
715 | 716 |
716 if (frame_timing_requests_dirty_) { | 717 if (frame_timing_requests_dirty_) { |
717 layer->SetFrameTimingRequests(frame_timing_requests_); | 718 layer->SetFrameTimingRequests(frame_timing_requests_); |
718 frame_timing_requests_dirty_ = false; | 719 frame_timing_requests_dirty_ = false; |
719 } | 720 } |
720 | 721 |
721 // Reset any state that should be cleared for the next update. | 722 // Reset any state that should be cleared for the next update. |
722 stacking_order_changed_ = false; | 723 stacking_order_changed_ = false; |
| 724 layer_property_changed_ = false; |
723 update_rect_ = gfx::Rect(); | 725 update_rect_ = gfx::Rect(); |
724 needs_push_properties_ = false; | 726 needs_push_properties_ = false; |
725 num_dependents_need_push_properties_ = 0; | 727 num_dependents_need_push_properties_ = 0; |
726 } | 728 } |
727 | 729 |
728 bool LayerImpl::IsAffectedByPageScale() const { | 730 bool LayerImpl::IsAffectedByPageScale() const { |
729 TransformTree& transform_tree = | 731 TransformTree& transform_tree = |
730 layer_tree_impl()->property_trees()->transform_tree; | 732 layer_tree_impl()->property_trees()->transform_tree; |
731 return transform_tree.Node(transform_tree_index()) | 733 return transform_tree.Node(transform_tree_index()) |
732 ->data.in_subtree_of_page_scale_layer; | 734 ->data.in_subtree_of_page_scale_layer; |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 DCHECK_EQ(layer_tree_impl(), mask_layer->layer_tree_impl()); | 1076 DCHECK_EQ(layer_tree_impl(), mask_layer->layer_tree_impl()); |
1075 DCHECK_NE(new_layer_id, mask_layer_id_); | 1077 DCHECK_NE(new_layer_id, mask_layer_id_); |
1076 } else if (new_layer_id == mask_layer_id_) { | 1078 } else if (new_layer_id == mask_layer_id_) { |
1077 return; | 1079 return; |
1078 } | 1080 } |
1079 | 1081 |
1080 mask_layer_ = std::move(mask_layer); | 1082 mask_layer_ = std::move(mask_layer); |
1081 mask_layer_id_ = new_layer_id; | 1083 mask_layer_id_ = new_layer_id; |
1082 if (mask_layer_) | 1084 if (mask_layer_) |
1083 mask_layer_->SetParent(this); | 1085 mask_layer_->SetParent(this); |
1084 NoteLayerPropertyChangedForSubtree(); | |
1085 } | 1086 } |
1086 | 1087 |
1087 scoped_ptr<LayerImpl> LayerImpl::TakeMaskLayer() { | 1088 scoped_ptr<LayerImpl> LayerImpl::TakeMaskLayer() { |
1088 mask_layer_id_ = -1; | 1089 mask_layer_id_ = -1; |
1089 return std::move(mask_layer_); | 1090 return std::move(mask_layer_); |
1090 } | 1091 } |
1091 | 1092 |
1092 void LayerImpl::SetReplicaLayer(scoped_ptr<LayerImpl> replica_layer) { | 1093 void LayerImpl::SetReplicaLayer(scoped_ptr<LayerImpl> replica_layer) { |
1093 int new_layer_id = replica_layer ? replica_layer->id() : -1; | 1094 int new_layer_id = replica_layer ? replica_layer->id() : -1; |
1094 | 1095 |
1095 if (replica_layer) { | 1096 if (replica_layer) { |
1096 DCHECK_EQ(layer_tree_impl(), replica_layer->layer_tree_impl()); | 1097 DCHECK_EQ(layer_tree_impl(), replica_layer->layer_tree_impl()); |
1097 DCHECK_NE(new_layer_id, replica_layer_id_); | 1098 DCHECK_NE(new_layer_id, replica_layer_id_); |
1098 } else if (new_layer_id == replica_layer_id_) { | 1099 } else if (new_layer_id == replica_layer_id_) { |
1099 return; | 1100 return; |
1100 } | 1101 } |
1101 | 1102 |
1102 replica_layer_ = std::move(replica_layer); | 1103 replica_layer_ = std::move(replica_layer); |
1103 replica_layer_id_ = new_layer_id; | 1104 replica_layer_id_ = new_layer_id; |
1104 if (replica_layer_) | 1105 if (replica_layer_) |
1105 replica_layer_->SetParent(this); | 1106 replica_layer_->SetParent(this); |
1106 NoteLayerPropertyChangedForSubtree(); | |
1107 } | 1107 } |
1108 | 1108 |
1109 scoped_ptr<LayerImpl> LayerImpl::TakeReplicaLayer() { | 1109 scoped_ptr<LayerImpl> LayerImpl::TakeReplicaLayer() { |
1110 replica_layer_id_ = -1; | 1110 replica_layer_id_ = -1; |
1111 return std::move(replica_layer_); | 1111 return std::move(replica_layer_); |
1112 } | 1112 } |
1113 | 1113 |
1114 ScrollbarLayerImplBase* LayerImpl::ToScrollbarLayer() { | 1114 ScrollbarLayerImplBase* LayerImpl::ToScrollbarLayer() { |
1115 return nullptr; | 1115 return nullptr; |
1116 } | 1116 } |
1117 | 1117 |
1118 void LayerImpl::SetDrawsContent(bool draws_content) { | 1118 void LayerImpl::SetDrawsContent(bool draws_content) { |
1119 if (draws_content_ == draws_content) | 1119 if (draws_content_ == draws_content) |
1120 return; | 1120 return; |
1121 | 1121 |
1122 draws_content_ = draws_content; | 1122 draws_content_ = draws_content; |
1123 NoteLayerPropertyChanged(); | 1123 NoteLayerPropertyChanged(); |
1124 } | 1124 } |
1125 | 1125 |
1126 void LayerImpl::SetHideLayerAndSubtree(bool hide) { | 1126 void LayerImpl::SetHideLayerAndSubtree(bool hide) { |
1127 if (hide_layer_and_subtree_ == hide) | 1127 if (hide_layer_and_subtree_ == hide) |
1128 return; | 1128 return; |
1129 | 1129 |
1130 hide_layer_and_subtree_ = hide; | 1130 hide_layer_and_subtree_ = hide; |
1131 NoteLayerPropertyChangedForSubtree(); | |
1132 } | 1131 } |
1133 | 1132 |
1134 void LayerImpl::SetTransformOrigin(const gfx::Point3F& transform_origin) { | 1133 void LayerImpl::SetTransformOrigin(const gfx::Point3F& transform_origin) { |
1135 if (transform_origin_ == transform_origin) | 1134 if (transform_origin_ == transform_origin) |
1136 return; | 1135 return; |
1137 transform_origin_ = transform_origin; | 1136 transform_origin_ = transform_origin; |
1138 NoteLayerPropertyChangedForSubtree(); | 1137 NoteLayerPropertyChangedForSubtree(); |
1139 } | 1138 } |
1140 | 1139 |
1141 void LayerImpl::SetBackgroundColor(SkColor background_color) { | 1140 void LayerImpl::SetBackgroundColor(SkColor background_color) { |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 | 1208 |
1210 background_filters_ = filters; | 1209 background_filters_ = filters; |
1211 NoteLayerPropertyChanged(); | 1210 NoteLayerPropertyChanged(); |
1212 } | 1211 } |
1213 | 1212 |
1214 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { | 1213 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { |
1215 if (masks_to_bounds_ == masks_to_bounds) | 1214 if (masks_to_bounds_ == masks_to_bounds) |
1216 return; | 1215 return; |
1217 | 1216 |
1218 masks_to_bounds_ = masks_to_bounds; | 1217 masks_to_bounds_ = masks_to_bounds; |
1219 NoteLayerPropertyChangedForSubtree(); | |
1220 } | 1218 } |
1221 | 1219 |
1222 void LayerImpl::SetContentsOpaque(bool opaque) { | 1220 void LayerImpl::SetContentsOpaque(bool opaque) { |
1223 if (contents_opaque_ == opaque) | 1221 if (contents_opaque_ == opaque) |
1224 return; | 1222 return; |
1225 | 1223 |
1226 contents_opaque_ = opaque; | 1224 contents_opaque_ = opaque; |
1227 NoteLayerPropertyChangedForSubtree(); | |
1228 } | 1225 } |
1229 | 1226 |
1230 void LayerImpl::SetOpacity(float opacity) { | 1227 void LayerImpl::SetOpacity(float opacity) { |
1231 if (opacity_ == opacity) | 1228 if (opacity_ == opacity) |
1232 return; | 1229 return; |
1233 | 1230 |
1234 opacity_ = opacity; | 1231 opacity_ = opacity; |
1235 NoteLayerPropertyChangedForSubtree(); | 1232 NoteLayerPropertyChangedForSubtree(); |
1236 } | 1233 } |
1237 | 1234 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1292 // If this layer is already in the element map, update its properties. | 1289 // If this layer is already in the element map, update its properties. |
1293 layer_tree_impl_->AddToElementMap(this); | 1290 layer_tree_impl_->AddToElementMap(this); |
1294 SetNeedsPushProperties(); | 1291 SetNeedsPushProperties(); |
1295 } | 1292 } |
1296 | 1293 |
1297 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) { | 1294 void LayerImpl::SetBlendMode(SkXfermode::Mode blend_mode) { |
1298 if (blend_mode_ == blend_mode) | 1295 if (blend_mode_ == blend_mode) |
1299 return; | 1296 return; |
1300 | 1297 |
1301 blend_mode_ = blend_mode; | 1298 blend_mode_ = blend_mode; |
1302 NoteLayerPropertyChangedForSubtree(); | |
1303 } | 1299 } |
1304 | 1300 |
1305 void LayerImpl::SetIsRootForIsolatedGroup(bool root) { | 1301 void LayerImpl::SetIsRootForIsolatedGroup(bool root) { |
1306 if (is_root_for_isolated_group_ == root) | 1302 if (is_root_for_isolated_group_ == root) |
1307 return; | 1303 return; |
1308 | 1304 |
1309 is_root_for_isolated_group_ = root; | 1305 is_root_for_isolated_group_ = root; |
1310 SetNeedsPushProperties(); | 1306 SetNeedsPushProperties(); |
1311 } | 1307 } |
1312 | 1308 |
1313 void LayerImpl::SetPosition(const gfx::PointF& position) { | 1309 void LayerImpl::SetPosition(const gfx::PointF& position) { |
1314 if (position_ == position) | 1310 if (position_ == position) |
1315 return; | 1311 return; |
1316 | 1312 |
1317 position_ = position; | 1313 position_ = position; |
1318 NoteLayerPropertyChangedForSubtree(); | 1314 NoteLayerPropertyChangedForSubtree(); |
1319 } | 1315 } |
1320 | 1316 |
1321 void LayerImpl::SetShouldFlattenTransform(bool flatten) { | 1317 void LayerImpl::SetShouldFlattenTransform(bool flatten) { |
1322 if (should_flatten_transform_ == flatten) | 1318 if (should_flatten_transform_ == flatten) |
1323 return; | 1319 return; |
1324 | 1320 |
1325 should_flatten_transform_ = flatten; | 1321 should_flatten_transform_ = flatten; |
1326 NoteLayerPropertyChangedForSubtree(); | |
1327 } | 1322 } |
1328 | 1323 |
1329 void LayerImpl::Set3dSortingContextId(int id) { | 1324 void LayerImpl::Set3dSortingContextId(int id) { |
1330 if (id == sorting_context_id_) | 1325 if (id == sorting_context_id_) |
1331 return; | 1326 return; |
1332 sorting_context_id_ = id; | 1327 sorting_context_id_ = id; |
1333 NoteLayerPropertyChangedForSubtree(); | |
1334 } | 1328 } |
1335 | 1329 |
1336 void LayerImpl::SetFrameTimingRequests( | 1330 void LayerImpl::SetFrameTimingRequests( |
1337 const std::vector<FrameTimingRequest>& requests) { | 1331 const std::vector<FrameTimingRequest>& requests) { |
1338 frame_timing_requests_ = requests; | 1332 frame_timing_requests_ = requests; |
1339 frame_timing_requests_dirty_ = true; | 1333 frame_timing_requests_dirty_ = true; |
1340 SetNeedsPushProperties(); | 1334 SetNeedsPushProperties(); |
1341 } | 1335 } |
1342 | 1336 |
1343 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) { | 1337 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) { |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1595 if (pending_twin) | 1589 if (pending_twin) |
1596 pending_twin->DidUpdateScrollOffset(); | 1590 pending_twin->DidUpdateScrollOffset(); |
1597 } | 1591 } |
1598 } | 1592 } |
1599 | 1593 |
1600 void LayerImpl::SetDoubleSided(bool double_sided) { | 1594 void LayerImpl::SetDoubleSided(bool double_sided) { |
1601 if (double_sided_ == double_sided) | 1595 if (double_sided_ == double_sided) |
1602 return; | 1596 return; |
1603 | 1597 |
1604 double_sided_ = double_sided; | 1598 double_sided_ = double_sided; |
1605 NoteLayerPropertyChangedForSubtree(); | |
1606 } | 1599 } |
1607 | 1600 |
1608 SimpleEnclosedRegion LayerImpl::VisibleOpaqueRegion() const { | 1601 SimpleEnclosedRegion LayerImpl::VisibleOpaqueRegion() const { |
1609 if (contents_opaque()) | 1602 if (contents_opaque()) |
1610 return SimpleEnclosedRegion(visible_layer_rect()); | 1603 return SimpleEnclosedRegion(visible_layer_rect()); |
1611 return SimpleEnclosedRegion(); | 1604 return SimpleEnclosedRegion(); |
1612 } | 1605 } |
1613 | 1606 |
1614 void LayerImpl::DidBeginTracing() {} | 1607 void LayerImpl::DidBeginTracing() {} |
1615 | 1608 |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1918 .layer_transforms_should_scale_layer_contents) { | 1911 .layer_transforms_should_scale_layer_contents) { |
1919 return default_scale; | 1912 return default_scale; |
1920 } | 1913 } |
1921 | 1914 |
1922 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1915 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1923 DrawTransform(), default_scale); | 1916 DrawTransform(), default_scale); |
1924 return std::max(transform_scales.x(), transform_scales.y()); | 1917 return std::max(transform_scales.x(), transform_scales.y()); |
1925 } | 1918 } |
1926 | 1919 |
1927 } // namespace cc | 1920 } // namespace cc |
OLD | NEW |