1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/test/layer_tree_host_common_test.h"
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/layers/layer.h"
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/layers/layer_impl.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/test/fake_layer_tree_host.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/trees/layer_tree_host_common.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace cc {
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)LayerTreeHostCommonTestBase::LayerTreeHostCommonTestBase()
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : client_(FakeLayerTreeHostClient::DIRECT_3D),
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      render_surface_layer_list_count_(0) {
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)LayerTreeHostCommonTestBase::~LayerTreeHostCommonTestBase() {
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting(
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Layer* layer,
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::Transform& transform,
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const gfx::Point3F& transform_origin,
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::PointF& position,
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::Size& bounds,
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool flatten_transform,
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool is_3d_sorted) {
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SetLayerPropertiesForTestingInternal<Layer>(layer,
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                              transform,
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                              transform_origin,
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                              position,
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                              bounds,
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                              flatten_transform,
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                              is_3d_sorted);
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting(
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    LayerImpl* layer,
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::Transform& transform,
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const gfx::Point3F& transform_origin,
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::PointF& position,
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const gfx::Size& bounds,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool flatten_transform,
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool is_3d_sorted) {
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SetLayerPropertiesForTestingInternal<LayerImpl>(layer,
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                  transform,
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                                  transform_origin,
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                  position,
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                  bounds,
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                  flatten_transform,
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                  is_3d_sorted);
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layer->SetContentBounds(bounds);
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties(
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Layer* root_layer,
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    float device_scale_factor,
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    float page_scale_factor,
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Layer* page_scale_application_layer,
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool can_use_lcd_text) {
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(page_scale_application_layer || (page_scale_factor == 1.f));
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Transform identity_matrix;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Size device_viewport_size =
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      gfx::Size(root_layer->bounds().width() * device_scale_factor,
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                root_layer->bounds().height() * device_scale_factor);
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  render_surface_layer_list_.reset(new RenderSurfaceLayerList);
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // We are probably not testing what is intended if the root_layer bounds are
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // empty.
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DCHECK(!root_layer->bounds().IsEmpty());
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      root_layer, device_viewport_size, render_surface_layer_list_.get());
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.device_scale_factor = device_scale_factor;
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.page_scale_factor = page_scale_factor;
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.page_scale_application_layer = page_scale_application_layer;
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.can_use_lcd_text = can_use_lcd_text;
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.can_adjust_raster_scales = true;
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LayerTreeHostCommon::CalculateDrawProperties(&inputs);
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties(
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    LayerImpl* root_layer,
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    float device_scale_factor,
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    float page_scale_factor,
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    LayerImpl* page_scale_application_layer,
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    bool can_use_lcd_text) {
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Transform identity_matrix;
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Size device_viewport_size =
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      gfx::Size(root_layer->bounds().width() * device_scale_factor,
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                root_layer->bounds().height() * device_scale_factor);
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  render_surface_layer_list_impl_.reset(new LayerImplList);
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // We are probably not testing what is intended if the root_layer bounds are
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // empty.
99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DCHECK(!root_layer->bounds().IsEmpty());
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      root_layer, device_viewport_size, render_surface_layer_list_impl_.get());
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.device_scale_factor = device_scale_factor;
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.page_scale_factor = page_scale_factor;
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.page_scale_application_layer = page_scale_application_layer;
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.can_use_lcd_text = can_use_lcd_text;
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.can_adjust_raster_scales = true;
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ++render_surface_layer_list_count_;
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  inputs.current_render_surface_layer_list_id =
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      render_surface_layer_list_count_;
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LayerTreeHostCommon::CalculateDrawProperties(&inputs);
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<FakeLayerTreeHost>
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciLayerTreeHostCommonTestBase::CreateFakeLayerTreeHost() {
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return FakeLayerTreeHost::Create(&client_);
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace cc
121