- add sources.
[platform/framework/web/crosswalk.git] / src / cc / trees / tree_synchronizer.h
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_