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_LAYER_TREE_HOST_COMMON_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_TREES_LAYER_TREE_HOST_COMMON_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include <limits>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/bind.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/vector2d.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerImpl;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer;
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SwapPromise;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT LayerTreeHostCommon {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static gfx::Rect CalculateVisibleRect(const gfx::Rect& target_surface_rect,
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                        const gfx::Rect& layer_bound_rect,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        const gfx::Transform& transform);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  template <typename LayerType, typename RenderSurfaceLayerListType>
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  struct CalcDrawPropsInputs {
34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch   public:
35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CalcDrawPropsInputs(LayerType* root_layer,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const gfx::Size& device_viewport_size,
37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        const gfx::Transform& device_transform,
38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        float device_scale_factor,
39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        float page_scale_factor,
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                        const LayerType* page_scale_application_layer,
41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        int max_texture_size,
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        bool can_use_lcd_text,
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        bool can_render_to_separate_surface,
44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                        bool can_adjust_raster_scales,
450de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)                        RenderSurfaceLayerListType* render_surface_layer_list,
460de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)                        int current_render_surface_layer_list_id)
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        : root_layer(root_layer),
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_viewport_size(device_viewport_size),
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_transform(device_transform),
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_scale_factor(device_scale_factor),
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          page_scale_factor(page_scale_factor),
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          page_scale_application_layer(page_scale_application_layer),
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          max_texture_size(max_texture_size),
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          can_use_lcd_text(can_use_lcd_text),
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          can_render_to_separate_surface(can_render_to_separate_surface),
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          can_adjust_raster_scales(can_adjust_raster_scales),
570de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          render_surface_layer_list(render_surface_layer_list),
580de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          current_render_surface_layer_list_id(
590de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)              current_render_surface_layer_list_id) {}
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    LayerType* root_layer;
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    gfx::Size device_viewport_size;
63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    const gfx::Transform& device_transform;
64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    float device_scale_factor;
65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    float page_scale_factor;
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const LayerType* page_scale_application_layer;
67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    int max_texture_size;
68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    bool can_use_lcd_text;
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    bool can_render_to_separate_surface;
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    bool can_adjust_raster_scales;
71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    RenderSurfaceLayerListType* render_surface_layer_list;
720de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)    int current_render_surface_layer_list_id;
73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  };
74558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  template <typename LayerType, typename RenderSurfaceLayerListType>
76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  struct CalcDrawPropsInputsForTesting
77558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      : public CalcDrawPropsInputs<LayerType, RenderSurfaceLayerListType> {
78558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CalcDrawPropsInputsForTesting(
79558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        LayerType* root_layer,
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const gfx::Size& device_viewport_size,
81558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        const gfx::Transform& device_transform,
82558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        RenderSurfaceLayerListType* render_surface_layer_list);
83558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CalcDrawPropsInputsForTesting(
84558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        LayerType* root_layer,
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const gfx::Size& device_viewport_size,
86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        RenderSurfaceLayerListType* render_surface_layer_list);
87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
88558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch   private:
89558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    const gfx::Transform identity_transform_;
90558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  };
91558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
92558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  typedef CalcDrawPropsInputs<Layer, RenderSurfaceLayerList>
93558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      CalcDrawPropsMainInputs;
94558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  typedef CalcDrawPropsInputsForTesting<Layer, RenderSurfaceLayerList>
95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      CalcDrawPropsMainInputsForTesting;
96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  static void CalculateDrawProperties(CalcDrawPropsMainInputs* inputs);
97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
98558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  typedef CalcDrawPropsInputs<LayerImpl, LayerImplList> CalcDrawPropsImplInputs;
99558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  typedef CalcDrawPropsInputsForTesting<LayerImpl, LayerImplList>
100558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      CalcDrawPropsImplInputsForTesting;
101558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  static void CalculateDrawProperties(CalcDrawPropsImplInputs* inputs);
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  template <typename LayerType>
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static bool RenderSurfaceContributesToTarget(LayerType*,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                               int target_surface_layer_id);
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  template <typename LayerType>
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  static void CallFunctionForSubtree(
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      LayerType* root_layer,
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const base::Callback<void(LayerType* layer)>& function);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns a layer with the given id if one exists in the subtree starting
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // from the given root layer (including mask and replica layers).
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  template <typename LayerType>
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static LayerType* FindLayerInSubtree(LayerType* root_layer, int layer_id);
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  static Layer* get_layer_as_raw_ptr(const LayerList& layers, size_t index) {
1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return layers[index].get();
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  static LayerImpl* get_layer_as_raw_ptr(const OwnedLayerImplList& layers,
1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                         size_t index) {
1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return layers[index];
1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  static LayerImpl* get_layer_as_raw_ptr(const LayerImplList& layers,
1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                         size_t index) {
1285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return layers[index];
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct ScrollUpdateInfo {
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int layer_id;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Vector2d scroll_delta;
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct CC_EXPORT ScrollAndScaleSet {
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScrollAndScaleSet();
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~ScrollAndScaleSet();
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<LayerTreeHostCommon::ScrollUpdateInfo> scrolls;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float page_scale_delta;
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float top_controls_delta;
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ScopedPtrVector<SwapPromise> swap_promises;
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <typename LayerType>
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LayerTreeHostCommon::RenderSurfaceContributesToTarget(
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerType* layer,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int target_surface_layer_id) {
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // A layer will either contribute its own content, or its render surface's
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // content, to the target surface. The layer contributes its surface's content
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // when both the following are true:
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //  (1) The layer actually has a render surface, and
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //  (2) The layer's render surface is not the same as the target surface.
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Otherwise, the layer just contributes itself to the target surface.
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return layer->render_surface() && layer->id() != target_surface_layer_id;
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <typename LayerType>
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LayerType* LayerTreeHostCommon::FindLayerInSubtree(LayerType* root_layer,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   int layer_id) {
165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (!root_layer)
166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return NULL;
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (root_layer->id() == layer_id)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return root_layer;
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (root_layer->mask_layer() && root_layer->mask_layer()->id() == layer_id)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return root_layer->mask_layer();
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (root_layer->replica_layer() &&
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      root_layer->replica_layer()->id() == layer_id)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return root_layer->replica_layer();
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < root_layer->children().size(); ++i) {
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (LayerType* found = FindLayerInSubtree(
1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            get_layer_as_raw_ptr(root_layer->children(), i), layer_id))
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return found;
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtemplate <typename LayerType>
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid LayerTreeHostCommon::CallFunctionForSubtree(
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    LayerType* root_layer,
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const base::Callback<void(LayerType* layer)>& function) {
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  function.Run(root_layer);
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (LayerType* mask_layer = root_layer->mask_layer())
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    function.Run(mask_layer);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (LayerType* replica_layer = root_layer->replica_layer()) {
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    function.Run(replica_layer);
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (LayerType* mask_layer = replica_layer->mask_layer())
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      function.Run(mask_layer);
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < root_layer->children().size(); ++i) {
2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    CallFunctionForSubtree(get_layer_as_raw_ptr(root_layer->children(), i),
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           function);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
206558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochtemplate <typename LayerType, typename RenderSurfaceLayerListType>
207558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochLayerTreeHostCommon::CalcDrawPropsInputsForTesting<LayerType,
208558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                                   RenderSurfaceLayerListType>::
209558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CalcDrawPropsInputsForTesting(
210558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        LayerType* root_layer,
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const gfx::Size& device_viewport_size,
212558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        const gfx::Transform& device_transform,
213558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        RenderSurfaceLayerListType* render_surface_layer_list)
214558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    : CalcDrawPropsInputs<LayerType, RenderSurfaceLayerListType>(
215558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          root_layer,
216558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_viewport_size,
217558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_transform,
218558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          1.f,
219558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          1.f,
220558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          NULL,
221558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          std::numeric_limits<int>::max() / 2,
222558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          false,
2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          true,
224558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          false,
2250de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          render_surface_layer_list,
2260de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          0) {
227558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(root_layer);
228558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(render_surface_layer_list);
229558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
230558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
231558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochtemplate <typename LayerType, typename RenderSurfaceLayerListType>
232558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochLayerTreeHostCommon::CalcDrawPropsInputsForTesting<LayerType,
233558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                                   RenderSurfaceLayerListType>::
234558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    CalcDrawPropsInputsForTesting(
235558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        LayerType* root_layer,
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const gfx::Size& device_viewport_size,
237558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        RenderSurfaceLayerListType* render_surface_layer_list)
238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    : CalcDrawPropsInputs<LayerType, RenderSurfaceLayerListType>(
239558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          root_layer,
240558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          device_viewport_size,
241558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          identity_transform_,
242558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          1.f,
243558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          1.f,
244558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          NULL,
245558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          std::numeric_limits<int>::max() / 2,
246558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          false,
2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)          true,
248558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch          false,
2490de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          render_surface_layer_list,
2500de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)          0) {
251558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(root_layer);
252558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DCHECK(render_surface_layer_list);
253558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
254558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_TREES_LAYER_TREE_HOST_COMMON_H_
258