1 // Copyright 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_TREES_TREE_SYNCHRONIZER_H_ 6 #define CC_TREES_TREE_SYNCHRONIZER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "cc/base/cc_export.h" 11 12 namespace cc { 13 14 class LayerImpl; 15 class LayerTreeImpl; 16 class Layer; 17 18 class CC_EXPORT TreeSynchronizer { 19 public: 20 // Accepts a Layer tree and returns a reference to a LayerImpl tree that 21 // duplicates the structure of the Layer tree, reusing the LayerImpls in the 22 // tree provided by old_layer_impl_root if possible. 23 static scoped_ptr<LayerImpl> SynchronizeTrees( 24 Layer* layer_root, 25 scoped_ptr<LayerImpl> old_layer_impl_root, 26 LayerTreeImpl* tree_impl); 27 static scoped_ptr<LayerImpl> SynchronizeTrees( 28 LayerImpl* layer_root, 29 scoped_ptr<LayerImpl> old_layer_impl_root, 30 LayerTreeImpl* tree_impl); 31 32 // Pushes properties from a Layer or LayerImpl tree to a structurally 33 // equivalent LayerImpl tree. 34 static void PushProperties(Layer* layer_root, 35 LayerImpl* layer_impl_root); 36 static void PushProperties(LayerImpl* layer_root, LayerImpl* layer_impl_root); 37 38 private: 39 TreeSynchronizer(); // Not instantiable. 40 41 static void SetNumDependentsNeedPushProperties(Layer* layer, size_t num); 42 static void SetNumDependentsNeedPushProperties(LayerImpl* layer, size_t num); 43 44 template <typename LayerType> 45 static void PushPropertiesInternal( 46 LayerType* layer, 47 LayerImpl* layer_impl, 48 size_t* num_dependents_need_push_properties_for_parent); 49 50 DISALLOW_COPY_AND_ASSIGN(TreeSynchronizer); 51 }; 52 53 } // namespace cc 54 55 #endif // CC_TREES_TREE_SYNCHRONIZER_H_ 56