Home | History | Annotate | Download | only in trees
      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