• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   template <typename LayerType>
42   static void PushPropertiesInternal(
43       LayerType* layer,
44       LayerImpl* layer_impl,
45       size_t* num_dependents_need_push_properties_for_parent);
46 
47   DISALLOW_COPY_AND_ASSIGN(TreeSynchronizer);
48 };
49 
50 }  // namespace cc
51 
52 #endif  // CC_TREES_TREE_SYNCHRONIZER_H_
53