| 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 |