12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_TREES_TREE_SYNCHRONIZER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_TREES_TREE_SYNCHRONIZER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerImpl; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TreeSynchronizer { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accepts a Layer tree and returns a reference to a LayerImpl tree that 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // duplicates the structure of the Layer tree, reusing the LayerImpls in the 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tree provided by old_layer_impl_root if possible. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerImpl> SynchronizeTrees( 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* layer_root, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> old_layer_impl_root, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeImpl* tree_impl); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerImpl> SynchronizeTrees( 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* layer_root, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> old_layer_impl_root, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeImpl* tree_impl); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Pushes properties from a Layer or LayerImpl tree to a structurally 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // equivalent LayerImpl tree. 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void PushProperties(Layer* layer_root, 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LayerImpl* layer_impl_root); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void PushProperties(LayerImpl* layer_root, LayerImpl* layer_impl_root); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TreeSynchronizer(); // Not instantiable. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch template <typename LayerType> 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void PushPropertiesInternal( 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LayerType* layer, 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LayerImpl* layer_impl, 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t* num_dependents_need_push_properties_for_parent); 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TreeSynchronizer); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_TREES_TREE_SYNCHRONIZER_H_ 53