| 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> |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 | 124 |
| 125 void Layer::SetLayerTreeHost(LayerTreeHost* host) { | 125 void Layer::SetLayerTreeHost(LayerTreeHost* host) { |
| 126 if (layer_tree_host_ == host) | 126 if (layer_tree_host_ == host) |
| 127 return; | 127 return; |
| 128 | 128 |
| 129 if (layer_tree_host_) { | 129 if (layer_tree_host_) { |
| 130 layer_tree_host_->property_trees()->RemoveIdFromIdToIndexMaps(id()); | 130 layer_tree_host_->property_trees()->RemoveIdFromIdToIndexMaps(id()); |
| 131 layer_tree_host_->property_trees()->needs_rebuild = true; | 131 layer_tree_host_->property_trees()->needs_rebuild = true; |
| 132 layer_tree_host_->UnregisterLayer(this); | 132 GetLayerTree()->UnregisterLayer(this); |
| 133 if (inputs_.element_id) { | 133 if (inputs_.element_id) { |
| 134 layer_tree_host_->animation_host()->UnregisterElement( | 134 layer_tree_host_->animation_host()->UnregisterElement( |
| 135 inputs_.element_id, ElementListType::ACTIVE); | 135 inputs_.element_id, ElementListType::ACTIVE); |
| 136 layer_tree_host_->RemoveFromElementMap(this); | 136 layer_tree_host_->RemoveFromElementMap(this); |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 if (host) { | 139 if (host) { |
| 140 host->property_trees()->needs_rebuild = true; | 140 host->property_trees()->needs_rebuild = true; |
| 141 host->RegisterLayer(this); | 141 host->GetLayerTree()->RegisterLayer(this); |
| 142 if (inputs_.element_id) { | 142 if (inputs_.element_id) { |
| 143 host->AddToElementMap(this); | 143 host->AddToElementMap(this); |
| 144 host->animation_host()->RegisterElement(inputs_.element_id, | 144 host->animation_host()->RegisterElement(inputs_.element_id, |
| 145 ElementListType::ACTIVE); | 145 ElementListType::ACTIVE); |
| 146 } | 146 } |
| 147 } | 147 } |
| 148 | 148 |
| 149 layer_tree_host_ = host; | 149 layer_tree_host_ = host; |
| 150 InvalidatePropertyTreesIndices(); | 150 InvalidatePropertyTreesIndices(); |
| 151 | 151 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 | 208 |
| 209 void Layer::SetNextCommitWaitsForActivation() { | 209 void Layer::SetNextCommitWaitsForActivation() { |
| 210 if (!layer_tree_host_) | 210 if (!layer_tree_host_) |
| 211 return; | 211 return; |
| 212 | 212 |
| 213 layer_tree_host_->SetNextCommitWaitsForActivation(); | 213 layer_tree_host_->SetNextCommitWaitsForActivation(); |
| 214 } | 214 } |
| 215 | 215 |
| 216 void Layer::SetNeedsPushProperties() { | 216 void Layer::SetNeedsPushProperties() { |
| 217 if (layer_tree_host_) | 217 if (layer_tree_host_) |
| 218 layer_tree_host_->AddLayerShouldPushProperties(this); | 218 GetLayerTree()->AddLayerShouldPushProperties(this); |
| 219 } | 219 } |
| 220 | 220 |
| 221 void Layer::ResetNeedsPushPropertiesForTesting() { | 221 void Layer::ResetNeedsPushPropertiesForTesting() { |
| 222 layer_tree_host_->RemoveLayerShouldPushProperties(this); | 222 GetLayerTree()->RemoveLayerShouldPushProperties(this); |
| 223 } | 223 } |
| 224 | 224 |
| 225 bool Layer::IsPropertyChangeAllowed() const { | 225 bool Layer::IsPropertyChangeAllowed() const { |
| 226 if (!layer_tree_host_) | 226 if (!layer_tree_host_) |
| 227 return true; | 227 return true; |
| 228 | 228 |
| 229 return !layer_tree_host_->in_paint_layer_contents(); | 229 return !GetLayerTree()->in_paint_layer_contents(); |
| 230 } | 230 } |
| 231 | 231 |
| 232 sk_sp<SkPicture> Layer::GetPicture() const { | 232 sk_sp<SkPicture> Layer::GetPicture() const { |
| 233 return nullptr; | 233 return nullptr; |
| 234 } | 234 } |
| 235 | 235 |
| 236 void Layer::SetParent(Layer* layer) { | 236 void Layer::SetParent(Layer* layer) { |
| 237 DCHECK(!layer || !layer->HasAncestor(this)); | 237 DCHECK(!layer || !layer->HasAncestor(this)); |
| 238 | 238 |
| 239 parent_ = layer; | 239 parent_ = layer; |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 layer->SetUpdateRect(inputs_.update_rect); | 1188 layer->SetUpdateRect(inputs_.update_rect); |
| 1189 | 1189 |
| 1190 layer->SetHasWillChangeTransformHint(has_will_change_transform_hint()); | 1190 layer->SetHasWillChangeTransformHint(has_will_change_transform_hint()); |
| 1191 layer->SetNeedsPushProperties(); | 1191 layer->SetNeedsPushProperties(); |
| 1192 | 1192 |
| 1193 // Reset any state that should be cleared for the next update. | 1193 // Reset any state that should be cleared for the next update. |
| 1194 subtree_property_changed_ = false; | 1194 subtree_property_changed_ = false; |
| 1195 layer_property_changed_ = false; | 1195 layer_property_changed_ = false; |
| 1196 inputs_.update_rect = gfx::Rect(); | 1196 inputs_.update_rect = gfx::Rect(); |
| 1197 | 1197 |
| 1198 layer_tree_host()->RemoveLayerShouldPushProperties(this); | 1198 GetLayerTree()->RemoveLayerShouldPushProperties(this); |
| 1199 } | 1199 } |
| 1200 | 1200 |
| 1201 void Layer::TakeCopyRequests( | 1201 void Layer::TakeCopyRequests( |
| 1202 std::vector<std::unique_ptr<CopyOutputRequest>>* requests) { | 1202 std::vector<std::unique_ptr<CopyOutputRequest>>* requests) { |
| 1203 for (auto& it : inputs_.copy_requests) { | 1203 for (auto& it : inputs_.copy_requests) { |
| 1204 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = | 1204 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = |
| 1205 layer_tree_host()->task_runner_provider()->MainThreadTaskRunner(); | 1205 layer_tree_host()->task_runner_provider()->MainThreadTaskRunner(); |
| 1206 std::unique_ptr<CopyOutputRequest> original_request = std::move(it); | 1206 std::unique_ptr<CopyOutputRequest> original_request = std::move(it); |
| 1207 const CopyOutputRequest& original_request_ref = *original_request; | 1207 const CopyOutputRequest& original_request_ref = *original_request; |
| 1208 std::unique_ptr<CopyOutputRequest> main_thread_request = | 1208 std::unique_ptr<CopyOutputRequest> main_thread_request = |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1240 inputs_.mask_layer->ToLayerNodeProto(proto->mutable_mask_layer()); | 1240 inputs_.mask_layer->ToLayerNodeProto(proto->mutable_mask_layer()); |
| 1241 if (inputs_.replica_layer) | 1241 if (inputs_.replica_layer) |
| 1242 inputs_.replica_layer->ToLayerNodeProto(proto->mutable_replica_layer()); | 1242 inputs_.replica_layer->ToLayerNodeProto(proto->mutable_replica_layer()); |
| 1243 } | 1243 } |
| 1244 | 1244 |
| 1245 void Layer::ClearLayerTreePropertiesForDeserializationAndAddToMap( | 1245 void Layer::ClearLayerTreePropertiesForDeserializationAndAddToMap( |
| 1246 LayerIdMap* layer_map) { | 1246 LayerIdMap* layer_map) { |
| 1247 (*layer_map)[inputs_.layer_id] = this; | 1247 (*layer_map)[inputs_.layer_id] = this; |
| 1248 | 1248 |
| 1249 if (layer_tree_host_) | 1249 if (layer_tree_host_) |
| 1250 layer_tree_host_->UnregisterLayer(this); | 1250 GetLayerTree()->UnregisterLayer(this); |
| 1251 | 1251 |
| 1252 layer_tree_host_ = nullptr; | 1252 layer_tree_host_ = nullptr; |
| 1253 parent_ = nullptr; | 1253 parent_ = nullptr; |
| 1254 | 1254 |
| 1255 // Clear these properties for all the children and add them to the map. | 1255 // Clear these properties for all the children and add them to the map. |
| 1256 for (auto& child : inputs_.children) { | 1256 for (auto& child : inputs_.children) { |
| 1257 child->ClearLayerTreePropertiesForDeserializationAndAddToMap(layer_map); | 1257 child->ClearLayerTreePropertiesForDeserializationAndAddToMap(layer_map); |
| 1258 } | 1258 } |
| 1259 | 1259 |
| 1260 inputs_.children.clear(); | 1260 inputs_.children.clear(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1278 DCHECK(!layer_tree_host_); | 1278 DCHECK(!layer_tree_host_); |
| 1279 DCHECK(inputs_.children.empty()); | 1279 DCHECK(inputs_.children.empty()); |
| 1280 DCHECK(!inputs_.mask_layer); | 1280 DCHECK(!inputs_.mask_layer); |
| 1281 DCHECK(!inputs_.replica_layer); | 1281 DCHECK(!inputs_.replica_layer); |
| 1282 DCHECK(layer_tree_host); | 1282 DCHECK(layer_tree_host); |
| 1283 DCHECK(proto.has_id()); | 1283 DCHECK(proto.has_id()); |
| 1284 | 1284 |
| 1285 inputs_.layer_id = proto.id(); | 1285 inputs_.layer_id = proto.id(); |
| 1286 | 1286 |
| 1287 layer_tree_host_ = layer_tree_host; | 1287 layer_tree_host_ = layer_tree_host; |
| 1288 layer_tree_host_->RegisterLayer(this); | 1288 GetLayerTree()->RegisterLayer(this); |
| 1289 | 1289 |
| 1290 for (int i = 0; i < proto.children_size(); ++i) { | 1290 for (int i = 0; i < proto.children_size(); ++i) { |
| 1291 const proto::LayerNode& child_proto = proto.children(i); | 1291 const proto::LayerNode& child_proto = proto.children(i); |
| 1292 DCHECK(child_proto.has_type()); | 1292 DCHECK(child_proto.has_type()); |
| 1293 scoped_refptr<Layer> child = | 1293 scoped_refptr<Layer> child = |
| 1294 LayerProtoConverter::FindOrAllocateAndConstruct(child_proto, layer_map); | 1294 LayerProtoConverter::FindOrAllocateAndConstruct(child_proto, layer_map); |
| 1295 // The child must now refer to this layer as its parent, and must also have | 1295 // The child must now refer to this layer as its parent, and must also have |
| 1296 // the same LayerTreeHost. This must be done before deserializing children. | 1296 // the same LayerTreeHost. This must be done before deserializing children. |
| 1297 DCHECK(!child->parent_); | 1297 DCHECK(!child->parent_); |
| 1298 child->parent_ = this; | 1298 child->parent_ = this; |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1740 } | 1740 } |
| 1741 | 1741 |
| 1742 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1742 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
| 1743 if (inputs_.has_will_change_transform_hint == has_will_change) | 1743 if (inputs_.has_will_change_transform_hint == has_will_change) |
| 1744 return; | 1744 return; |
| 1745 inputs_.has_will_change_transform_hint = has_will_change; | 1745 inputs_.has_will_change_transform_hint = has_will_change; |
| 1746 SetNeedsCommit(); | 1746 SetNeedsCommit(); |
| 1747 } | 1747 } |
| 1748 | 1748 |
| 1749 AnimationHost* Layer::GetAnimationHost() const { | 1749 AnimationHost* Layer::GetAnimationHost() const { |
| 1750 return layer_tree_host_ ? layer_tree_host_->animation_host() : nullptr; | 1750 LayerTree* layer_tree = GetLayerTree(); |
| 1751 return layer_tree ? layer_tree->animation_host() : nullptr; |
| 1751 } | 1752 } |
| 1752 | 1753 |
| 1753 ElementListType Layer::GetElementTypeForAnimation() const { | 1754 ElementListType Layer::GetElementTypeForAnimation() const { |
| 1754 return ElementListType::ACTIVE; | 1755 return ElementListType::ACTIVE; |
| 1755 } | 1756 } |
| 1756 | 1757 |
| 1757 ScrollbarLayerInterface* Layer::ToScrollbarLayer() { | 1758 ScrollbarLayerInterface* Layer::ToScrollbarLayer() { |
| 1758 return nullptr; | 1759 return nullptr; |
| 1759 } | 1760 } |
| 1760 | 1761 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1842 ->effect_tree.Node(effect_tree_index()) | 1843 ->effect_tree.Node(effect_tree_index()) |
| 1843 ->num_copy_requests_in_subtree; | 1844 ->num_copy_requests_in_subtree; |
| 1844 } | 1845 } |
| 1845 | 1846 |
| 1846 gfx::Transform Layer::screen_space_transform() const { | 1847 gfx::Transform Layer::screen_space_transform() const { |
| 1847 DCHECK_NE(transform_tree_index_, -1); | 1848 DCHECK_NE(transform_tree_index_, -1); |
| 1848 return draw_property_utils::ScreenSpaceTransform( | 1849 return draw_property_utils::ScreenSpaceTransform( |
| 1849 this, layer_tree_host_->property_trees()->transform_tree); | 1850 this, layer_tree_host_->property_trees()->transform_tree); |
| 1850 } | 1851 } |
| 1851 | 1852 |
| 1853 LayerTree* Layer::GetLayerTree() const { |
| 1854 return layer_tree_host_ ? layer_tree_host_->GetLayerTree() : nullptr; |
| 1855 } |
| 1856 |
| 1852 } // namespace cc | 1857 } // namespace cc |
| OLD | NEW |