// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_TREES_PROPERTY_TREE_BUILDER_H_
#define CC_TREES_PROPERTY_TREE_BUILDER_H_

#include <vector>

#include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/property_tree.h"

namespace cc {

class PropertyTreeBuilder {
 public:
  static Layer* FindFirstScrollableLayer(Layer* root_layer);

  static void CC_EXPORT PreCalculateMetaInformation(Layer* root_layer);
  static void CC_EXPORT
  PreCalculateMetaInformationForTesting(LayerImpl* root_layer);

  static void CC_EXPORT
  BuildPropertyTrees(Layer* root_layer,
                     const Layer* page_scale_layer,
                     const Layer* inner_viewport_scroll_layer,
                     const Layer* outer_viewport_scroll_layer,
                     const Layer* overscroll_elasticity_layer,
                     const gfx::Vector2dF& elastic_overscroll,
                     float page_scale_factor,
                     float device_scale_factor,
                     const gfx::Rect& viewport,
                     const gfx::Transform& device_transform,
                     PropertyTrees* property_trees);
  static void BuildPropertyTrees(LayerImpl* root_layer,
                                 const LayerImpl* page_scale_layer,
                                 const LayerImpl* inner_viewport_scroll_layer,
                                 const LayerImpl* outer_viewport_scroll_layer,
                                 const LayerImpl* overscroll_elasticity_layer,
                                 const gfx::Vector2dF& elastic_overscroll,
                                 float page_scale_factor,
                                 float device_scale_factor,
                                 const gfx::Rect& viewport,
                                 const gfx::Transform& device_transform,
                                 PropertyTrees* property_trees);
};

}  // namespace cc

#endif  // CC_TREES_PROPERTY_TREE_BUILDER_H_
