Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 574343003: cc: Change LTHCommon tests to use impl painting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pixel_test
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "cc/animation/layer_animation_controller.h" 9 #include "cc/animation/layer_animation_controller.h"
10 #include "cc/animation/transform_operations.h" 10 #include "cc/animation/transform_operations.h"
11 #include "cc/base/math_util.h" 11 #include "cc/base/math_util.h"
12 #include "cc/layers/content_layer.h" 12 #include "cc/layers/content_layer.h"
13 #include "cc/layers/content_layer_client.h" 13 #include "cc/layers/content_layer_client.h"
14 #include "cc/layers/layer.h" 14 #include "cc/layers/layer.h"
15 #include "cc/layers/layer_client.h" 15 #include "cc/layers/layer_client.h"
16 #include "cc/layers/layer_impl.h" 16 #include "cc/layers/layer_impl.h"
17 #include "cc/layers/layer_iterator.h" 17 #include "cc/layers/layer_iterator.h"
18 #include "cc/layers/render_surface.h" 18 #include "cc/layers/render_surface.h"
19 #include "cc/layers/render_surface_impl.h" 19 #include "cc/layers/render_surface_impl.h"
20 #include "cc/output/copy_output_request.h" 20 #include "cc/output/copy_output_request.h"
21 #include "cc/output/copy_output_result.h" 21 #include "cc/output/copy_output_result.h"
22 #include "cc/test/animation_test_common.h" 22 #include "cc/test/animation_test_common.h"
23 #include "cc/test/fake_impl_proxy.h" 23 #include "cc/test/fake_impl_proxy.h"
24 #include "cc/test/fake_layer_tree_host.h" 24 #include "cc/test/fake_layer_tree_host.h"
25 #include "cc/test/fake_layer_tree_host_impl.h" 25 #include "cc/test/fake_layer_tree_host_impl.h"
26 #include "cc/test/fake_picture_layer.h"
27 #include "cc/test/fake_picture_layer_impl.h"
26 #include "cc/test/geometry_test_utils.h" 28 #include "cc/test/geometry_test_utils.h"
27 #include "cc/test/layer_tree_host_common_test.h" 29 #include "cc/test/layer_tree_host_common_test.h"
28 #include "cc/trees/layer_tree_impl.h" 30 #include "cc/trees/layer_tree_impl.h"
29 #include "cc/trees/proxy.h" 31 #include "cc/trees/proxy.h"
30 #include "cc/trees/single_thread_proxy.h" 32 #include "cc/trees/single_thread_proxy.h"
31 #include "testing/gmock/include/gmock/gmock.h" 33 #include "testing/gmock/include/gmock/gmock.h"
32 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
33 #include "ui/gfx/quad_f.h" 35 #include "ui/gfx/quad_f.h"
34 #include "ui/gfx/transform.h" 36 #include "ui/gfx/transform.h"
35 37
(...skipping 17 matching lines...) Expand all
53 MockContentLayerClient() {} 55 MockContentLayerClient() {}
54 virtual ~MockContentLayerClient() {} 56 virtual ~MockContentLayerClient() {}
55 virtual void PaintContents( 57 virtual void PaintContents(
56 SkCanvas* canvas, 58 SkCanvas* canvas,
57 const gfx::Rect& clip, 59 const gfx::Rect& clip,
58 ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {} 60 ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE {}
59 virtual void DidChangeLayerCanUseLCDText() OVERRIDE {} 61 virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
60 virtual bool FillsBoundsCompletely() const OVERRIDE { return false; } 62 virtual bool FillsBoundsCompletely() const OVERRIDE { return false; }
61 }; 63 };
62 64
63 scoped_refptr<ContentLayer> CreateDrawableContentLayer( 65 scoped_refptr<FakePictureLayer> CreateDrawablePictureLayer(
64 ContentLayerClient* delegate) { 66 ContentLayerClient* delegate) {
65 scoped_refptr<ContentLayer> to_return = ContentLayer::Create(delegate); 67 scoped_refptr<FakePictureLayer> to_return =
68 FakePictureLayer::Create(delegate);
66 to_return->SetIsDrawable(true); 69 to_return->SetIsDrawable(true);
67 return to_return; 70 return to_return;
68 } 71 }
69 72
70 #define EXPECT_CONTENTS_SCALE_EQ(expected, layer) \ 73 #define EXPECT_CONTENTS_SCALE_EQ(expected, layer) \
71 do { \ 74 do { \
72 EXPECT_FLOAT_EQ(expected, layer->contents_scale_x()); \ 75 EXPECT_FLOAT_EQ(expected, layer->contents_scale_x()); \
73 EXPECT_FLOAT_EQ(expected, layer->contents_scale_y()); \ 76 EXPECT_FLOAT_EQ(expected, layer->contents_scale_y()); \
74 } while (false) 77 } while (false)
75 78
(...skipping 3178 matching lines...) Expand 10 before | Expand all | Expand 10 after
3254 EXPECT_RECT_EQ(gfx::Rect(0, 0, 26, 50), child1->visible_content_rect()); 3257 EXPECT_RECT_EQ(gfx::Rect(0, 0, 26, 50), child1->visible_content_rect());
3255 3258
3256 // The child's DrawableContentRect is unclipped. 3259 // The child's DrawableContentRect is unclipped.
3257 EXPECT_RECT_EQ(unclipped_surface_content, child1->drawable_content_rect()); 3260 EXPECT_RECT_EQ(unclipped_surface_content, child1->drawable_content_rect());
3258 } 3261 }
3259 3262
3260 TEST_F(LayerTreeHostCommonTest, DrawableAndVisibleContentRectsInHighDPI) { 3263 TEST_F(LayerTreeHostCommonTest, DrawableAndVisibleContentRectsInHighDPI) {
3261 MockContentLayerClient client; 3264 MockContentLayerClient client;
3262 3265
3263 scoped_refptr<Layer> root = Layer::Create(); 3266 scoped_refptr<Layer> root = Layer::Create();
3264 scoped_refptr<ContentLayer> render_surface1 = 3267 scoped_refptr<FakePictureLayer> render_surface1 =
3265 CreateDrawableContentLayer(&client); 3268 CreateDrawablePictureLayer(&client);
3266 scoped_refptr<ContentLayer> render_surface2 = 3269 scoped_refptr<FakePictureLayer> render_surface2 =
3267 CreateDrawableContentLayer(&client); 3270 CreateDrawablePictureLayer(&client);
3268 scoped_refptr<ContentLayer> child1 = CreateDrawableContentLayer(&client); 3271 scoped_refptr<FakePictureLayer> child1 = CreateDrawablePictureLayer(&client);
3269 scoped_refptr<ContentLayer> child2 = CreateDrawableContentLayer(&client); 3272 scoped_refptr<FakePictureLayer> child2 = CreateDrawablePictureLayer(&client);
3270 scoped_refptr<ContentLayer> child3 = CreateDrawableContentLayer(&client); 3273 scoped_refptr<FakePictureLayer> child3 = CreateDrawablePictureLayer(&client);
3271 root->AddChild(render_surface1); 3274 root->AddChild(render_surface1);
3272 render_surface1->AddChild(render_surface2); 3275 render_surface1->AddChild(render_surface2);
3273 render_surface2->AddChild(child1); 3276 render_surface2->AddChild(child1);
3274 render_surface2->AddChild(child2); 3277 render_surface2->AddChild(child2);
3275 render_surface2->AddChild(child3); 3278 render_surface2->AddChild(child3);
3276 3279
3277 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 3280 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
3278 host->SetRootLayer(root); 3281 host->SetRootLayer(root);
3279 3282
3280 gfx::Transform identity_matrix; 3283 gfx::Transform identity_matrix;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
3346 3349
3347 EXPECT_RECT_EQ(gfx::Rect(10, 10, 100, 100), child1->drawable_content_rect()); 3350 EXPECT_RECT_EQ(gfx::Rect(10, 10, 100, 100), child1->drawable_content_rect());
3348 EXPECT_RECT_EQ(gfx::Rect(150, 150, 100, 100), 3351 EXPECT_RECT_EQ(gfx::Rect(150, 150, 100, 100),
3349 child2->drawable_content_rect()); 3352 child2->drawable_content_rect());
3350 EXPECT_RECT_EQ(gfx::Rect(250, 250, 100, 100), 3353 EXPECT_RECT_EQ(gfx::Rect(250, 250, 100, 100),
3351 child3->drawable_content_rect()); 3354 child3->drawable_content_rect());
3352 3355
3353 // The root layer does not actually draw content of its own. 3356 // The root layer does not actually draw content of its own.
3354 EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0), root->visible_content_rect()); 3357 EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0), root->visible_content_rect());
3355 3358
3356 // All layer visible content rects are expressed in content space of each 3359 // All layer visible content rects are not expressed in content space of each
3357 // layer, so they are also scaled by the device_scale_factor. 3360 // layer, so they are also not scaled by the device_scale_factor.
3358 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 8), 3361 EXPECT_RECT_EQ(gfx::Rect(0, 0, 3, 4),
3359 render_surface1->visible_content_rect()); 3362 render_surface1->visible_content_rect());
3360 EXPECT_RECT_EQ(gfx::Rect(0, 0, 14, 26), 3363 EXPECT_RECT_EQ(gfx::Rect(0, 0, 7, 13),
3361 render_surface2->visible_content_rect()); 3364 render_surface2->visible_content_rect());
3362 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child1->visible_content_rect()); 3365 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child1->visible_content_rect());
3363 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child2->visible_content_rect()); 3366 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child2->visible_content_rect());
3364 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), child3->visible_content_rect()); 3367 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child3->visible_content_rect());
3365 } 3368 }
3366 3369
3367 TEST_F(LayerTreeHostCommonTest, BackFaceCullingWithoutPreserves3d) { 3370 TEST_F(LayerTreeHostCommonTest, BackFaceCullingWithoutPreserves3d) {
3368 // Verify the behavior of back-face culling when there are no preserve-3d 3371 // Verify the behavior of back-face culling when there are no preserve-3d
3369 // layers. Note that 3d transforms still apply in this case, but they are 3372 // layers. Note that 3d transforms still apply in this case, but they are
3370 // "flattened" to each parent layer according to current W3C spec. 3373 // "flattened" to each parent layer according to current W3C spec.
3371 3374
3372 const gfx::Transform identity_matrix; 3375 const gfx::Transform identity_matrix;
3373 scoped_refptr<Layer> parent = Layer::Create(); 3376 scoped_refptr<Layer> parent = Layer::Create();
3374 scoped_refptr<LayerWithForcedDrawsContent> front_facing_child = 3377 scoped_refptr<LayerWithForcedDrawsContent> front_facing_child =
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
4002 2u, 4005 2u,
4003 render_surface_layer_list.at(1)->render_surface()->layer_list().size()); 4006 render_surface_layer_list.at(1)->render_surface()->layer_list().size());
4004 EXPECT_EQ(front_facing_surface->id(), 4007 EXPECT_EQ(front_facing_surface->id(),
4005 render_surface_layer_list.at(1) 4008 render_surface_layer_list.at(1)
4006 ->render_surface()->layer_list().at(0)->id()); 4009 ->render_surface()->layer_list().at(0)->id());
4007 EXPECT_EQ(child1->id(), 4010 EXPECT_EQ(child1->id(),
4008 render_surface_layer_list.at(1) 4011 render_surface_layer_list.at(1)
4009 ->render_surface()->layer_list().at(1)->id()); 4012 ->render_surface()->layer_list().at(1)->id());
4010 } 4013 }
4011 4014
4015 class NoScalePictureLayer : public PictureLayer {
4016 public:
4017 static scoped_refptr<NoScalePictureLayer> Create(ContentLayerClient* client) {
4018 return make_scoped_refptr(new NoScalePictureLayer(client));
4019 }
4020
4021 virtual void CalculateContentsScale(float ideal_contents_scale,
4022 float* contents_scale_x,
4023 float* contents_scale_y,
4024 gfx::Size* contentBounds) OVERRIDE {
4025 // Skip over the ContentLayer's method to the base Layer class.
4026 Layer::CalculateContentsScale(ideal_contents_scale,
4027 contents_scale_x,
4028 contents_scale_y,
4029 contentBounds);
4030 }
4031
4032 private:
4033 explicit NoScalePictureLayer(ContentLayerClient* client)
4034 : PictureLayer(client) {}
4035 virtual ~NoScalePictureLayer() {}
4036 };
4037
4038 scoped_refptr<NoScalePictureLayer> CreateNoScaleDrawablePictureLayer(
4039 ContentLayerClient* delegate) {
4040 scoped_refptr<NoScalePictureLayer> to_return =
4041 NoScalePictureLayer::Create(delegate);
4042 to_return->SetIsDrawable(true);
4043 return to_return;
4044 }
4045
4012 class NoScaleContentLayer : public ContentLayer { 4046 class NoScaleContentLayer : public ContentLayer {
4013 public: 4047 public:
4014 static scoped_refptr<NoScaleContentLayer> Create(ContentLayerClient* client) { 4048 static scoped_refptr<NoScaleContentLayer> Create(ContentLayerClient* client) {
4015 return make_scoped_refptr(new NoScaleContentLayer(client)); 4049 return make_scoped_refptr(new NoScaleContentLayer(client));
4016 } 4050 }
4017 4051
4018 virtual void CalculateContentsScale(float ideal_contents_scale, 4052 virtual void CalculateContentsScale(float ideal_contents_scale,
4019 float* contents_scale_x, 4053 float* contents_scale_x,
4020 float* contents_scale_y, 4054 float* contents_scale_y,
4021 gfx::Size* content_bounds) OVERRIDE { 4055 gfx::Size* content_bounds) OVERRIDE {
(...skipping 16 matching lines...) Expand all
4038 NoScaleContentLayer::Create(delegate); 4072 NoScaleContentLayer::Create(delegate);
4039 to_return->SetIsDrawable(true); 4073 to_return->SetIsDrawable(true);
4040 return to_return; 4074 return to_return;
4041 } 4075 }
4042 4076
4043 TEST_F(LayerTreeHostCommonTest, LayerTransformsInHighDPI) { 4077 TEST_F(LayerTreeHostCommonTest, LayerTransformsInHighDPI) {
4044 // Verify draw and screen space transforms of layers not in a surface. 4078 // Verify draw and screen space transforms of layers not in a surface.
4045 MockContentLayerClient delegate; 4079 MockContentLayerClient delegate;
4046 gfx::Transform identity_matrix; 4080 gfx::Transform identity_matrix;
4047 4081
4048 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4082 scoped_refptr<FakePictureLayer> parent =
4083 CreateDrawablePictureLayer(&delegate);
4049 SetLayerPropertiesForTesting(parent.get(), 4084 SetLayerPropertiesForTesting(parent.get(),
4050 identity_matrix, 4085 identity_matrix,
4051 gfx::Point3F(), 4086 gfx::Point3F(),
4052 gfx::PointF(), 4087 gfx::PointF(),
4053 gfx::Size(100, 100), 4088 gfx::Size(100, 100),
4054 false, 4089 false,
4055 true); 4090 true);
4056 4091
4057 scoped_refptr<ContentLayer> child = CreateDrawableContentLayer(&delegate); 4092 scoped_refptr<FakePictureLayer> child = CreateDrawablePictureLayer(&delegate);
4058 SetLayerPropertiesForTesting(child.get(), 4093 SetLayerPropertiesForTesting(child.get(),
4059 identity_matrix, 4094 identity_matrix,
4060 gfx::Point3F(), 4095 gfx::Point3F(),
4061 gfx::PointF(2.f, 2.f), 4096 gfx::PointF(2.f, 2.f),
4062 gfx::Size(10, 10), 4097 gfx::Size(10, 10),
4063 false, 4098 false,
4064 true); 4099 true);
4065 4100
4066 scoped_refptr<ContentLayer> child_empty = 4101 scoped_refptr<FakePictureLayer> child_empty =
4067 CreateDrawableContentLayer(&delegate); 4102 CreateDrawablePictureLayer(&delegate);
4068 SetLayerPropertiesForTesting(child_empty.get(), 4103 SetLayerPropertiesForTesting(child_empty.get(),
4069 identity_matrix, 4104 identity_matrix,
4070 gfx::Point3F(), 4105 gfx::Point3F(),
4071 gfx::PointF(2.f, 2.f), 4106 gfx::PointF(2.f, 2.f),
4072 gfx::Size(), 4107 gfx::Size(),
4073 false, 4108 false,
4074 true); 4109 true);
4075 4110
4076 scoped_refptr<NoScaleContentLayer> child_no_scale = 4111 scoped_refptr<NoScalePictureLayer> child_no_scale =
4077 CreateNoScaleDrawableContentLayer(&delegate); 4112 CreateNoScaleDrawablePictureLayer(&delegate);
4078 SetLayerPropertiesForTesting(child_no_scale.get(), 4113 SetLayerPropertiesForTesting(child_no_scale.get(),
4079 identity_matrix, 4114 identity_matrix,
4080 gfx::Point3F(), 4115 gfx::Point3F(),
4081 gfx::PointF(2.f, 2.f), 4116 gfx::PointF(2.f, 2.f),
4082 gfx::Size(10, 10), 4117 gfx::Size(10, 10),
4083 false, 4118 false,
4084 true); 4119 true);
4085 4120
4086 parent->AddChild(child); 4121 parent->AddChild(child);
4087 parent->AddChild(child_empty); 4122 parent->AddChild(child_empty);
4088 parent->AddChild(child_no_scale); 4123 parent->AddChild(child_no_scale);
4089 4124
4090 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 4125 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
4091 host->SetRootLayer(parent); 4126 host->SetRootLayer(parent);
4092 4127
4093 float device_scale_factor = 2.5f; 4128 float device_scale_factor = 2.5f;
4094 float page_scale_factor = 1.f; 4129 float page_scale_factor = 1.f;
4095 4130
4096 RenderSurfaceLayerList render_surface_layer_list; 4131 RenderSurfaceLayerList render_surface_layer_list;
4097 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4132 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4098 parent.get(), parent->bounds(), &render_surface_layer_list); 4133 parent.get(), parent->bounds(), &render_surface_layer_list);
4099 inputs.device_scale_factor = device_scale_factor; 4134 inputs.device_scale_factor = device_scale_factor;
4100 inputs.page_scale_factor = page_scale_factor; 4135 inputs.page_scale_factor = page_scale_factor;
4101 inputs.can_adjust_raster_scales = true; 4136 inputs.can_adjust_raster_scales = true;
4102 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4137 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4103 4138
4104 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, parent); 4139 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4105 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, child); 4140 EXPECT_CONTENTS_SCALE_EQ(1, child);
4106 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 4141 EXPECT_CONTENTS_SCALE_EQ(1, child_empty);
4107 child_empty);
4108 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); 4142 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4109 4143
4110 EXPECT_EQ(1u, render_surface_layer_list.size()); 4144 EXPECT_EQ(1u, render_surface_layer_list.size());
4111 4145
4112 // Verify parent transforms 4146 // Verify parent transforms
4113 gfx::Transform expected_parent_transform; 4147 gfx::Transform expected_parent_transform;
4148 expected_parent_transform.Scale(device_scale_factor * page_scale_factor,
4149 device_scale_factor * page_scale_factor);
4114 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 4150 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
4115 parent->screen_space_transform()); 4151 parent->screen_space_transform());
4116 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 4152 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
4117 parent->draw_transform()); 4153 parent->draw_transform());
4118 4154
4119 // Verify results of transformed parent rects 4155 // Verify results of transformed parent rects
4120 gfx::RectF parent_content_bounds(parent->content_bounds()); 4156 gfx::RectF parent_content_bounds(parent->content_bounds());
4121 4157
4122 gfx::RectF parent_draw_rect = 4158 gfx::RectF parent_draw_rect =
4123 MathUtil::MapClippedRect(parent->draw_transform(), parent_content_bounds); 4159 MathUtil::MapClippedRect(parent->draw_transform(), parent_content_bounds);
4124 gfx::RectF parent_screen_space_rect = MathUtil::MapClippedRect( 4160 gfx::RectF parent_screen_space_rect = MathUtil::MapClippedRect(
4125 parent->screen_space_transform(), parent_content_bounds); 4161 parent->screen_space_transform(), parent_content_bounds);
4126 4162
4127 gfx::RectF expected_parent_draw_rect(parent->bounds()); 4163 gfx::RectF expected_parent_draw_rect(parent->bounds());
4128 expected_parent_draw_rect.Scale(device_scale_factor); 4164 expected_parent_draw_rect.Scale(device_scale_factor);
4129 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_draw_rect); 4165 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_draw_rect);
4130 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_screen_space_rect); 4166 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_screen_space_rect);
4131 4167
4132 // Verify child and child_empty transforms. They should match. 4168 // Verify child and child_empty transforms. They should match.
4133 gfx::Transform expected_child_transform; 4169 gfx::Transform expected_child_transform;
4134 expected_child_transform.Translate( 4170 expected_child_transform.Translate(
4135 device_scale_factor * child->position().x(), 4171 device_scale_factor * child->position().x(),
4136 device_scale_factor * child->position().y()); 4172 device_scale_factor * child->position().y());
4173 expected_child_transform.Scale(device_scale_factor, device_scale_factor);
4137 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4174 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4138 child->draw_transform()); 4175 child->draw_transform());
4139 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4176 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4140 child->screen_space_transform()); 4177 child->screen_space_transform());
4141 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4178 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4142 child_empty->draw_transform()); 4179 child_empty->draw_transform());
4143 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4180 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4144 child_empty->screen_space_transform()); 4181 child_empty->screen_space_transform());
4145 4182
4146 // Verify results of transformed child and child_empty rects. They should 4183 // Verify results of transformed child and child_empty rects. They should
(...skipping 13 matching lines...) Expand all
4160 gfx::RectF expected_child_draw_rect(child->position(), child->bounds()); 4197 gfx::RectF expected_child_draw_rect(child->position(), child->bounds());
4161 expected_child_draw_rect.Scale(device_scale_factor); 4198 expected_child_draw_rect.Scale(device_scale_factor);
4162 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_draw_rect); 4199 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_draw_rect);
4163 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_screen_space_rect); 4200 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_screen_space_rect);
4164 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_empty_draw_rect); 4201 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_empty_draw_rect);
4165 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_empty_screen_space_rect); 4202 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_empty_screen_space_rect);
4166 4203
4167 // Verify child_no_scale transforms 4204 // Verify child_no_scale transforms
4168 gfx::Transform expected_child_no_scale_transform = child->draw_transform(); 4205 gfx::Transform expected_child_no_scale_transform = child->draw_transform();
4169 // All transforms operate on content rects. The child's content rect 4206 // All transforms operate on content rects. The child's content rect
4170 // incorporates device scale, but the child_no_scale does not; add it here. 4207 // incorporates device scale, the child_no_scale also does.
4171 expected_child_no_scale_transform.Scale(device_scale_factor, 4208
4172 device_scale_factor);
4173 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform, 4209 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform,
4174 child_no_scale->draw_transform()); 4210 child_no_scale->draw_transform());
4175 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform, 4211 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform,
4176 child_no_scale->screen_space_transform()); 4212 child_no_scale->screen_space_transform());
4177 } 4213 }
4178 4214
4179 TEST_F(LayerTreeHostCommonTest, SurfaceLayerTransformsInHighDPI) { 4215 TEST_F(LayerTreeHostCommonTest, SurfaceLayerTransformsInHighDPI) {
4180 // Verify draw and screen space transforms of layers in a surface. 4216 // Verify draw and screen space transforms of layers in a surface.
4181 MockContentLayerClient delegate; 4217 MockContentLayerClient delegate;
4182 gfx::Transform identity_matrix; 4218 gfx::Transform identity_matrix;
4183 4219
4184 gfx::Transform perspective_matrix; 4220 gfx::Transform perspective_matrix;
4185 perspective_matrix.ApplyPerspectiveDepth(2.0); 4221 perspective_matrix.ApplyPerspectiveDepth(2.0);
4186 4222
4187 gfx::Transform scale_small_matrix; 4223 gfx::Transform scale_small_matrix;
4188 scale_small_matrix.Scale(SK_MScalar1 / 10.f, SK_MScalar1 / 12.f); 4224 scale_small_matrix.Scale(SK_MScalar1 / 10.f, SK_MScalar1 / 12.f);
4189 4225
4190 scoped_refptr<Layer> root = Layer::Create(); 4226 scoped_refptr<Layer> root = Layer::Create();
4191 4227
4192 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4228 scoped_refptr<FakePictureLayer> parent =
4229 CreateDrawablePictureLayer(&delegate);
4193 SetLayerPropertiesForTesting(parent.get(), 4230 SetLayerPropertiesForTesting(parent.get(),
4194 identity_matrix, 4231 identity_matrix,
4195 gfx::Point3F(), 4232 gfx::Point3F(),
4196 gfx::PointF(), 4233 gfx::PointF(),
4197 gfx::Size(100, 100), 4234 gfx::Size(100, 100),
4198 false, 4235 false,
4199 true); 4236 true);
4200 4237
4201 scoped_refptr<ContentLayer> perspective_surface = 4238 scoped_refptr<FakePictureLayer> perspective_surface =
4202 CreateDrawableContentLayer(&delegate); 4239 CreateDrawablePictureLayer(&delegate);
4203 SetLayerPropertiesForTesting(perspective_surface.get(), 4240 SetLayerPropertiesForTesting(perspective_surface.get(),
4204 perspective_matrix * scale_small_matrix, 4241 perspective_matrix * scale_small_matrix,
4205 gfx::Point3F(), 4242 gfx::Point3F(),
4206 gfx::PointF(2.f, 2.f), 4243 gfx::PointF(2.f, 2.f),
4207 gfx::Size(10, 10), 4244 gfx::Size(10, 10),
4208 false, 4245 false,
4209 true); 4246 true);
4210 4247
4211 scoped_refptr<ContentLayer> scale_surface = 4248 scoped_refptr<FakePictureLayer> scale_surface =
4212 CreateDrawableContentLayer(&delegate); 4249 CreateDrawablePictureLayer(&delegate);
4213 SetLayerPropertiesForTesting(scale_surface.get(), 4250 SetLayerPropertiesForTesting(scale_surface.get(),
4214 scale_small_matrix, 4251 scale_small_matrix,
4215 gfx::Point3F(), 4252 gfx::Point3F(),
4216 gfx::PointF(2.f, 2.f), 4253 gfx::PointF(2.f, 2.f),
4217 gfx::Size(10, 10), 4254 gfx::Size(10, 10),
4218 false, 4255 false,
4219 true); 4256 true);
4220 4257
4221 perspective_surface->SetForceRenderSurface(true); 4258 perspective_surface->SetForceRenderSurface(true);
4222 scale_surface->SetForceRenderSurface(true); 4259 scale_surface->SetForceRenderSurface(true);
(...skipping 10 matching lines...) Expand all
4233 4270
4234 RenderSurfaceLayerList render_surface_layer_list; 4271 RenderSurfaceLayerList render_surface_layer_list;
4235 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4272 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4236 root.get(), parent->bounds(), &render_surface_layer_list); 4273 root.get(), parent->bounds(), &render_surface_layer_list);
4237 inputs.device_scale_factor = device_scale_factor; 4274 inputs.device_scale_factor = device_scale_factor;
4238 inputs.page_scale_factor = page_scale_factor; 4275 inputs.page_scale_factor = page_scale_factor;
4239 inputs.page_scale_application_layer = root.get(); 4276 inputs.page_scale_application_layer = root.get();
4240 inputs.can_adjust_raster_scales = true; 4277 inputs.can_adjust_raster_scales = true;
4241 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4278 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4242 4279
4243 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, parent); 4280 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4244 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 4281 EXPECT_CONTENTS_SCALE_EQ(1, perspective_surface);
4245 perspective_surface); 4282 EXPECT_CONTENTS_SCALE_EQ(1, scale_surface);
4246 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4247 scale_surface);
4248 4283
4249 EXPECT_EQ(3u, render_surface_layer_list.size()); 4284 EXPECT_EQ(3u, render_surface_layer_list.size());
4250 4285
4251 gfx::Transform expected_parent_draw_transform; 4286 gfx::Transform expected_parent_draw_transform;
4287 expected_parent_draw_transform.Scale(device_scale_factor * page_scale_factor,
4288 device_scale_factor * page_scale_factor);
4252 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_draw_transform, 4289 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_draw_transform,
4253 parent->draw_transform()); 4290 parent->draw_transform());
4254 4291
4255 // The scaled surface is rendered at its appropriate scale, and drawn 1:1 4292 // The scaled surface is rendered at its appropriate scale, and drawn 1:1
4256 // into its target. 4293 // into its target.
4257 gfx::Transform expected_scale_surface_draw_transform; 4294 gfx::Transform expected_scale_surface_draw_transform;
4258 expected_scale_surface_draw_transform.Translate( 4295 expected_scale_surface_draw_transform.Translate(
4259 device_scale_factor * page_scale_factor * scale_surface->position().x(), 4296 device_scale_factor * page_scale_factor * scale_surface->position().x(),
4260 device_scale_factor * page_scale_factor * scale_surface->position().y()); 4297 device_scale_factor * page_scale_factor * scale_surface->position().y());
4261 EXPECT_TRANSFORMATION_MATRIX_EQ( 4298 EXPECT_TRANSFORMATION_MATRIX_EQ(
4262 expected_scale_surface_draw_transform, 4299 expected_scale_surface_draw_transform,
4263 scale_surface->render_surface()->draw_transform()); 4300 scale_surface->render_surface()->draw_transform());
4264 gfx::Transform expected_scale_surface_layer_draw_transform = 4301 gfx::Transform expected_scale_surface_layer_draw_transform =
4265 scale_small_matrix; 4302 scale_small_matrix;
4303 expected_scale_surface_layer_draw_transform.Scale(
4304 device_scale_factor * page_scale_factor,
4305 device_scale_factor * page_scale_factor);
4266 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_scale_surface_layer_draw_transform, 4306 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_scale_surface_layer_draw_transform,
4267 scale_surface->draw_transform()); 4307 scale_surface->draw_transform());
4268 4308
4269 // The scale for the perspective surface is not known, so it is rendered 1:1 4309 // The scale for the perspective surface is not known, so it is rendered 1:1
4270 // with the screen, and then scaled during drawing. 4310 // with the screen, and then scaled during drawing.
4271 gfx::Transform expected_perspective_surface_draw_transform; 4311 gfx::Transform expected_perspective_surface_draw_transform;
4272 expected_perspective_surface_draw_transform.Translate( 4312 expected_perspective_surface_draw_transform.Translate(
4273 device_scale_factor * page_scale_factor * 4313 device_scale_factor * page_scale_factor *
4274 perspective_surface->position().x(), 4314 perspective_surface->position().x(),
4275 device_scale_factor * page_scale_factor * 4315 device_scale_factor * page_scale_factor *
4276 perspective_surface->position().y()); 4316 perspective_surface->position().y());
4277 expected_perspective_surface_draw_transform.PreconcatTransform( 4317 expected_perspective_surface_draw_transform.PreconcatTransform(
4278 perspective_matrix); 4318 perspective_matrix);
4279 expected_perspective_surface_draw_transform.PreconcatTransform( 4319 expected_perspective_surface_draw_transform.PreconcatTransform(
4280 scale_small_matrix); 4320 scale_small_matrix);
4281 gfx::Transform expected_perspective_surface_layer_draw_transform; 4321 gfx::Transform expected_perspective_surface_layer_draw_transform;
4322 expected_perspective_surface_layer_draw_transform.Scale(
4323 device_scale_factor * page_scale_factor,
4324 device_scale_factor * page_scale_factor);
4282 EXPECT_TRANSFORMATION_MATRIX_EQ( 4325 EXPECT_TRANSFORMATION_MATRIX_EQ(
4283 expected_perspective_surface_draw_transform, 4326 expected_perspective_surface_draw_transform,
4284 perspective_surface->render_surface()->draw_transform()); 4327 perspective_surface->render_surface()->draw_transform());
4285 EXPECT_TRANSFORMATION_MATRIX_EQ( 4328 EXPECT_TRANSFORMATION_MATRIX_EQ(
4286 expected_perspective_surface_layer_draw_transform, 4329 expected_perspective_surface_layer_draw_transform,
4287 perspective_surface->draw_transform()); 4330 perspective_surface->draw_transform());
4288 } 4331 }
4289 4332
4290 TEST_F(LayerTreeHostCommonTest, 4333 TEST_F(LayerTreeHostCommonTest,
4291 LayerTransformsInHighDPIAccurateScaleZeroChildPosition) { 4334 LayerTransformsInHighDPIAccurateScaleZeroChildPosition) {
4292 // Verify draw and screen space transforms of layers not in a surface. 4335 // Verify draw and screen space transforms of layers not in a surface.
4293 MockContentLayerClient delegate; 4336 MockContentLayerClient delegate;
4294 gfx::Transform identity_matrix; 4337 gfx::Transform identity_matrix;
4295 4338
4296 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4339 scoped_refptr<FakePictureLayer> parent =
4340 CreateDrawablePictureLayer(&delegate);
4297 SetLayerPropertiesForTesting(parent.get(), 4341 SetLayerPropertiesForTesting(parent.get(),
4298 identity_matrix, 4342 identity_matrix,
4299 gfx::Point3F(), 4343 gfx::Point3F(),
4300 gfx::PointF(), 4344 gfx::PointF(),
4301 gfx::Size(133, 133), 4345 gfx::Size(133, 133),
4302 false, 4346 false,
4303 true); 4347 true);
4304 4348
4305 scoped_refptr<ContentLayer> child = CreateDrawableContentLayer(&delegate); 4349 scoped_refptr<FakePictureLayer> child = CreateDrawablePictureLayer(&delegate);
4306 SetLayerPropertiesForTesting(child.get(), 4350 SetLayerPropertiesForTesting(child.get(),
4307 identity_matrix, 4351 identity_matrix,
4308 gfx::Point3F(), 4352 gfx::Point3F(),
4309 gfx::PointF(), 4353 gfx::PointF(),
4310 gfx::Size(13, 13), 4354 gfx::Size(13, 13),
4311 false, 4355 false,
4312 true); 4356 true);
4313 4357
4314 scoped_refptr<NoScaleContentLayer> child_no_scale = 4358 scoped_refptr<NoScalePictureLayer> child_no_scale =
4315 CreateNoScaleDrawableContentLayer(&delegate); 4359 CreateNoScaleDrawablePictureLayer(&delegate);
4316 SetLayerPropertiesForTesting(child_no_scale.get(), 4360 SetLayerPropertiesForTesting(child_no_scale.get(),
4317 identity_matrix, 4361 identity_matrix,
4318 gfx::Point3F(), 4362 gfx::Point3F(),
4319 gfx::PointF(), 4363 gfx::PointF(),
4320 gfx::Size(13, 13), 4364 gfx::Size(13, 13),
4321 false, 4365 false,
4322 true); 4366 true);
4323 4367
4324 parent->AddChild(child); 4368 parent->AddChild(child);
4325 parent->AddChild(child_no_scale); 4369 parent->AddChild(child_no_scale);
4326 4370
4327 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 4371 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
4328 host->SetRootLayer(parent); 4372 host->SetRootLayer(parent);
4329 4373
4330 float device_scale_factor = 1.7f; 4374 float device_scale_factor = 1.7f;
4331 float page_scale_factor = 1.f; 4375 float page_scale_factor = 1.f;
4332 4376
4333 RenderSurfaceLayerList render_surface_layer_list; 4377 RenderSurfaceLayerList render_surface_layer_list;
4334 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4378 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4335 parent.get(), parent->bounds(), &render_surface_layer_list); 4379 parent.get(), parent->bounds(), &render_surface_layer_list);
4336 inputs.device_scale_factor = device_scale_factor; 4380 inputs.device_scale_factor = device_scale_factor;
4337 inputs.page_scale_factor = page_scale_factor; 4381 inputs.page_scale_factor = page_scale_factor;
4338 inputs.page_scale_application_layer = parent.get(); 4382 inputs.page_scale_application_layer = parent.get();
4339 inputs.can_adjust_raster_scales = true; 4383 inputs.can_adjust_raster_scales = true;
4340 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4384 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4341 4385
4342 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, parent); 4386 EXPECT_CONTENTS_SCALE_EQ(1, parent);
danakj 2014/09/17 14:55:58 we should check the layer's ideal_contents_scale i
4343 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, child); 4387 EXPECT_CONTENTS_SCALE_EQ(1, child);
4344 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); 4388 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4345 4389
4346 EXPECT_EQ(1u, render_surface_layer_list.size()); 4390 EXPECT_EQ(1u, render_surface_layer_list.size());
4347 4391
4348 // Verify parent transforms 4392 // Verify parent transforms
4349 gfx::Transform expected_parent_transform; 4393 gfx::Transform expected_parent_transform;
4394 expected_parent_transform.Scale(device_scale_factor * page_scale_factor,
4395 device_scale_factor * page_scale_factor);
4350 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 4396 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
4351 parent->screen_space_transform()); 4397 parent->screen_space_transform());
4352 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 4398 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
4353 parent->draw_transform()); 4399 parent->draw_transform());
4354 4400
4355 // Verify results of transformed parent rects 4401 // Verify results of transformed parent rects
4356 gfx::RectF parent_content_bounds(parent->content_bounds()); 4402 gfx::RectF parent_content_bounds(parent->content_bounds());
4357 4403
4358 gfx::RectF parent_draw_rect = 4404 gfx::RectF parent_draw_rect =
4359 MathUtil::MapClippedRect(parent->draw_transform(), parent_content_bounds); 4405 MathUtil::MapClippedRect(parent->draw_transform(), parent_content_bounds);
4360 gfx::RectF parent_screen_space_rect = MathUtil::MapClippedRect( 4406 gfx::RectF parent_screen_space_rect = MathUtil::MapClippedRect(
4361 parent->screen_space_transform(), parent_content_bounds); 4407 parent->screen_space_transform(), parent_content_bounds);
4362 4408
4363 gfx::RectF expected_parent_draw_rect(parent->bounds()); 4409 gfx::RectF expected_parent_draw_rect(parent->bounds());
4364 expected_parent_draw_rect.Scale(device_scale_factor); 4410 expected_parent_draw_rect.Scale(device_scale_factor);
4365 expected_parent_draw_rect.set_width(ceil(expected_parent_draw_rect.width())); 4411 expected_parent_draw_rect.set_width((expected_parent_draw_rect.width()));
4366 expected_parent_draw_rect.set_height( 4412 expected_parent_draw_rect.set_height((expected_parent_draw_rect.height()));
4367 ceil(expected_parent_draw_rect.height()));
4368 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_draw_rect); 4413 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_draw_rect);
4369 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_screen_space_rect); 4414 EXPECT_FLOAT_RECT_EQ(expected_parent_draw_rect, parent_screen_space_rect);
4370 4415
4371 // Verify child transforms 4416 // Verify child transforms
4372 gfx::Transform expected_child_transform; 4417 gfx::Transform expected_child_transform;
4418 expected_child_transform.Scale(device_scale_factor * page_scale_factor,
4419 device_scale_factor * page_scale_factor);
4373 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4420 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4374 child->draw_transform()); 4421 child->draw_transform());
4375 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform, 4422 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_transform,
4376 child->screen_space_transform()); 4423 child->screen_space_transform());
4377 4424
4378 // Verify results of transformed child rects 4425 // Verify results of transformed child rects
4379 gfx::RectF child_content_bounds(child->content_bounds()); 4426 gfx::RectF child_content_bounds(child->content_bounds());
4380 4427
4381 gfx::RectF child_draw_rect = 4428 gfx::RectF child_draw_rect =
4382 MathUtil::MapClippedRect(child->draw_transform(), child_content_bounds); 4429 MathUtil::MapClippedRect(child->draw_transform(), child_content_bounds);
4383 gfx::RectF child_screen_space_rect = MathUtil::MapClippedRect( 4430 gfx::RectF child_screen_space_rect = MathUtil::MapClippedRect(
4384 child->screen_space_transform(), child_content_bounds); 4431 child->screen_space_transform(), child_content_bounds);
4385 4432
4386 gfx::RectF expected_child_draw_rect(child->bounds()); 4433 gfx::RectF expected_child_draw_rect(child->bounds());
4387 expected_child_draw_rect.Scale(device_scale_factor); 4434 expected_child_draw_rect.Scale(device_scale_factor);
4388 expected_child_draw_rect.set_width(ceil(expected_child_draw_rect.width())); 4435 expected_child_draw_rect.set_width((expected_child_draw_rect.width()));
4389 expected_child_draw_rect.set_height(ceil(expected_child_draw_rect.height())); 4436 expected_child_draw_rect.set_height((expected_child_draw_rect.height()));
4390 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_draw_rect); 4437 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_draw_rect);
4391 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_screen_space_rect); 4438 EXPECT_FLOAT_RECT_EQ(expected_child_draw_rect, child_screen_space_rect);
4392 4439
4393 // Verify child_no_scale transforms 4440 // Verify child_no_scale transforms
4394 gfx::Transform expected_child_no_scale_transform = child->draw_transform(); 4441 gfx::Transform expected_child_no_scale_transform = child->draw_transform();
4395 // All transforms operate on content rects. The child's content rect 4442 // All transforms operate on content rects. The child's content rect
4396 // incorporates device scale, but the child_no_scale does not; add it here. 4443 // incorporates device scale, the child_no_scale also does.
4397 expected_child_no_scale_transform.Scale(device_scale_factor,
4398 device_scale_factor);
4399 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform, 4444 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform,
4400 child_no_scale->draw_transform()); 4445 child_no_scale->draw_transform());
4401 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform, 4446 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_child_no_scale_transform,
4402 child_no_scale->screen_space_transform()); 4447 child_no_scale->screen_space_transform());
4403 } 4448 }
4404 4449
4405 TEST_F(LayerTreeHostCommonTest, ContentsScale) { 4450 TEST_F(LayerTreeHostCommonTest, ContentsScale) {
4406 MockContentLayerClient delegate; 4451 MockContentLayerClient delegate;
4407 gfx::Transform identity_matrix; 4452 gfx::Transform identity_matrix;
4408 4453
4409 gfx::Transform parent_scale_matrix; 4454 gfx::Transform parent_scale_matrix;
4410 SkMScalar initial_parent_scale = 1.75; 4455 SkMScalar initial_parent_scale = 1.75;
4411 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 4456 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
4412 4457
4413 gfx::Transform child_scale_matrix; 4458 gfx::Transform child_scale_matrix;
4414 SkMScalar initial_child_scale = 1.25; 4459 SkMScalar initial_child_scale = 1.25;
4415 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 4460 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
4416 4461
4417 scoped_refptr<Layer> root = Layer::Create(); 4462 scoped_refptr<Layer> root = Layer::Create();
4418 root->SetBounds(gfx::Size(100, 100)); 4463 root->SetBounds(gfx::Size(100, 100));
4419 4464
4420 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4465 scoped_refptr<FakePictureLayer> parent =
4466 CreateDrawablePictureLayer(&delegate);
4421 SetLayerPropertiesForTesting(parent.get(), 4467 SetLayerPropertiesForTesting(parent.get(),
4422 parent_scale_matrix, 4468 parent_scale_matrix,
4423 gfx::Point3F(), 4469 gfx::Point3F(),
4424 gfx::PointF(), 4470 gfx::PointF(),
4425 gfx::Size(100, 100), 4471 gfx::Size(100, 100),
4426 false, 4472 false,
4427 true); 4473 true);
4428 4474
4429 scoped_refptr<ContentLayer> child_scale = 4475 scoped_refptr<FakePictureLayer> child_scale =
4430 CreateDrawableContentLayer(&delegate); 4476 CreateDrawablePictureLayer(&delegate);
4431 SetLayerPropertiesForTesting(child_scale.get(), 4477 SetLayerPropertiesForTesting(child_scale.get(),
4432 child_scale_matrix, 4478 child_scale_matrix,
4433 gfx::Point3F(), 4479 gfx::Point3F(),
4434 gfx::PointF(2.f, 2.f), 4480 gfx::PointF(2.f, 2.f),
4435 gfx::Size(10, 10), 4481 gfx::Size(10, 10),
4436 false, 4482 false,
4437 true); 4483 true);
4438 4484
4439 scoped_refptr<ContentLayer> child_empty = 4485 scoped_refptr<FakePictureLayer> child_empty =
4440 CreateDrawableContentLayer(&delegate); 4486 CreateDrawablePictureLayer(&delegate);
4441 SetLayerPropertiesForTesting(child_empty.get(), 4487 SetLayerPropertiesForTesting(child_empty.get(),
4442 child_scale_matrix, 4488 child_scale_matrix,
4443 gfx::Point3F(), 4489 gfx::Point3F(),
4444 gfx::PointF(2.f, 2.f), 4490 gfx::PointF(2.f, 2.f),
4445 gfx::Size(), 4491 gfx::Size(),
4446 false, 4492 false,
4447 true); 4493 true);
4448 4494
4449 scoped_refptr<NoScaleContentLayer> child_no_scale = 4495 scoped_refptr<NoScalePictureLayer> child_no_scale =
4450 CreateNoScaleDrawableContentLayer(&delegate); 4496 CreateNoScaleDrawablePictureLayer(&delegate);
4451 SetLayerPropertiesForTesting(child_no_scale.get(), 4497 SetLayerPropertiesForTesting(child_no_scale.get(),
4452 child_scale_matrix, 4498 child_scale_matrix,
4453 gfx::Point3F(), 4499 gfx::Point3F(),
4454 gfx::PointF(12.f, 12.f), 4500 gfx::PointF(12.f, 12.f),
4455 gfx::Size(10, 10), 4501 gfx::Size(10, 10),
4456 false, 4502 false,
4457 true); 4503 true);
4458 4504
4459 root->AddChild(parent); 4505 root->AddChild(parent);
4460 4506
(...skipping 10 matching lines...) Expand all
4471 { 4517 {
4472 RenderSurfaceLayerList render_surface_layer_list; 4518 RenderSurfaceLayerList render_surface_layer_list;
4473 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4519 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4474 root.get(), root->bounds(), &render_surface_layer_list); 4520 root.get(), root->bounds(), &render_surface_layer_list);
4475 inputs.device_scale_factor = device_scale_factor; 4521 inputs.device_scale_factor = device_scale_factor;
4476 inputs.page_scale_factor = page_scale_factor; 4522 inputs.page_scale_factor = page_scale_factor;
4477 inputs.page_scale_application_layer = root.get(); 4523 inputs.page_scale_application_layer = root.get();
4478 inputs.can_adjust_raster_scales = true; 4524 inputs.can_adjust_raster_scales = true;
4479 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4525 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4480 4526
4481 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * 4527 // Picturelayer's content scale is 1.f
4482 initial_parent_scale, parent); 4528 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4483 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * 4529 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
4484 initial_parent_scale * initial_child_scale, 4530 EXPECT_CONTENTS_SCALE_EQ(1, child_empty);
4485 child_scale);
4486 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4487 initial_parent_scale * initial_child_scale,
4488 child_empty);
4489 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); 4531 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4490 4532
4491 // The parent is scaled up and shouldn't need to scale during draw. The 4533 // The parent is not scaled up and we would need to scale during draw. The
4492 // child that can scale its contents should also not need to scale during 4534 // child that can scale its contents should also need to scale during
4493 // draw. This shouldn't change if the child has empty bounds. The other 4535 // draw. This shouldn't change if the child has empty bounds. The other
4494 // children should. 4536 // children should.
4495 EXPECT_FLOAT_EQ(1.0, parent->draw_transform().matrix().get(0, 0)); 4537 EXPECT_FLOAT_EQ(
4496 EXPECT_FLOAT_EQ(1.0, parent->draw_transform().matrix().get(1, 1)); 4538 device_scale_factor * page_scale_factor * initial_parent_scale,
4497 EXPECT_FLOAT_EQ(1.0, child_scale->draw_transform().matrix().get(0, 0)); 4539 parent->draw_transform().matrix().get(0, 0));
4498 EXPECT_FLOAT_EQ(1.0, child_scale->draw_transform().matrix().get(1, 1)); 4540 EXPECT_FLOAT_EQ(
4499 EXPECT_FLOAT_EQ(1.0, child_empty->draw_transform().matrix().get(0, 0)); 4541 device_scale_factor * page_scale_factor * initial_parent_scale,
4500 EXPECT_FLOAT_EQ(1.0, child_empty->draw_transform().matrix().get(1, 1)); 4542 parent->draw_transform().matrix().get(1, 1));
4543 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4544 initial_parent_scale * initial_child_scale,
4545 child_scale->draw_transform().matrix().get(0, 0));
4546 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4547 initial_parent_scale * initial_child_scale,
4548 child_scale->draw_transform().matrix().get(1, 1));
4549 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4550 initial_parent_scale * initial_child_scale,
4551 child_empty->draw_transform().matrix().get(0, 0));
4552 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4553 initial_parent_scale * initial_child_scale,
4554 child_empty->draw_transform().matrix().get(1, 1));
4501 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4555 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4502 initial_parent_scale * initial_child_scale, 4556 initial_parent_scale * initial_child_scale,
4503 child_no_scale->draw_transform().matrix().get(0, 0)); 4557 child_no_scale->draw_transform().matrix().get(0, 0));
4504 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4558 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4505 initial_parent_scale * initial_child_scale, 4559 initial_parent_scale * initial_child_scale,
4506 child_no_scale->draw_transform().matrix().get(1, 1)); 4560 child_no_scale->draw_transform().matrix().get(1, 1));
4507 } 4561 }
4508
4509 // If the device_scale_factor or page_scale_factor changes, then it should be
4510 // updated using the initial transform as the raster scale.
4511 device_scale_factor = 2.25f;
4512 page_scale_factor = 1.25f;
4513
4514 {
4515 RenderSurfaceLayerList render_surface_layer_list;
4516 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4517 root.get(), root->bounds(), &render_surface_layer_list);
4518 inputs.device_scale_factor = device_scale_factor;
4519 inputs.page_scale_factor = page_scale_factor;
4520 inputs.page_scale_application_layer = root.get();
4521 inputs.can_adjust_raster_scales = true;
4522 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4523
4524 EXPECT_CONTENTS_SCALE_EQ(
4525 device_scale_factor * page_scale_factor * initial_parent_scale, parent);
4526 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4527 initial_parent_scale * initial_child_scale,
4528 child_scale);
4529 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4530 initial_parent_scale * initial_child_scale,
4531 child_empty);
4532 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4533 }
4534
4535 // If the transform changes, we expect the raster scale to be reset to 1.0.
4536 SkMScalar second_child_scale = 1.75;
4537 child_scale_matrix.Scale(second_child_scale / initial_child_scale,
4538 second_child_scale / initial_child_scale);
4539 child_scale->SetTransform(child_scale_matrix);
4540 child_empty->SetTransform(child_scale_matrix);
4541
4542 {
4543 RenderSurfaceLayerList render_surface_layer_list;
4544 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4545 root.get(), root->bounds(), &render_surface_layer_list);
4546 inputs.device_scale_factor = device_scale_factor;
4547 inputs.page_scale_factor = page_scale_factor;
4548 inputs.page_scale_application_layer = root.get();
4549 inputs.can_adjust_raster_scales = true;
4550 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4551
4552 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4553 initial_parent_scale,
4554 parent);
4555 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4556 child_scale);
4557 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4558 child_empty);
4559 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4560 }
4561
4562 // If the device_scale_factor or page_scale_factor changes, then it should be
4563 // updated, but still using 1.0 as the raster scale.
4564 device_scale_factor = 2.75f;
4565 page_scale_factor = 1.75f;
4566
4567 {
4568 RenderSurfaceLayerList render_surface_layer_list;
4569 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4570 root.get(), root->bounds(), &render_surface_layer_list);
4571 inputs.device_scale_factor = device_scale_factor;
4572 inputs.page_scale_factor = page_scale_factor;
4573 inputs.page_scale_application_layer = root.get();
4574 inputs.can_adjust_raster_scales = true;
4575 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4576
4577 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4578 initial_parent_scale,
4579 parent);
4580 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4581 child_scale);
4582 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4583 child_empty);
4584 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4585 }
4586 } 4562 }
4587 4563
4588 TEST_F(LayerTreeHostCommonTest, 4564 TEST_F(LayerTreeHostCommonTest,
4589 ContentsScale_LayerTransformsDontAffectContentsScale) { 4565 ContentsScale_LayerTransformsDontAffectContentsScale) {
4590 MockContentLayerClient delegate; 4566 MockContentLayerClient delegate;
4591 gfx::Transform identity_matrix; 4567 gfx::Transform identity_matrix;
4592 4568
4593 gfx::Transform parent_scale_matrix; 4569 gfx::Transform parent_scale_matrix;
4594 SkMScalar initial_parent_scale = 1.75; 4570 SkMScalar initial_parent_scale = 1.75;
4595 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 4571 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
4596 4572
4597 gfx::Transform child_scale_matrix; 4573 gfx::Transform child_scale_matrix;
4598 SkMScalar initial_child_scale = 1.25; 4574 SkMScalar initial_child_scale = 1.25;
4599 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 4575 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
4600 4576
4601 scoped_refptr<Layer> root = Layer::Create(); 4577 scoped_refptr<Layer> root = Layer::Create();
4602 root->SetBounds(gfx::Size(100, 100)); 4578 root->SetBounds(gfx::Size(100, 100));
4603 4579
4604 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4580 scoped_refptr<FakePictureLayer> parent =
4581 CreateDrawablePictureLayer(&delegate);
4605 SetLayerPropertiesForTesting(parent.get(), 4582 SetLayerPropertiesForTesting(parent.get(),
4606 parent_scale_matrix, 4583 parent_scale_matrix,
4607 gfx::Point3F(), 4584 gfx::Point3F(),
4608 gfx::PointF(), 4585 gfx::PointF(),
4609 gfx::Size(100, 100), 4586 gfx::Size(100, 100),
4610 false, 4587 false,
4611 true); 4588 true);
4612 4589
4613 scoped_refptr<ContentLayer> child_scale = 4590 scoped_refptr<FakePictureLayer> child_scale =
4614 CreateDrawableContentLayer(&delegate); 4591 CreateDrawablePictureLayer(&delegate);
4615 SetLayerPropertiesForTesting(child_scale.get(), 4592 SetLayerPropertiesForTesting(child_scale.get(),
4616 child_scale_matrix, 4593 child_scale_matrix,
4617 gfx::Point3F(), 4594 gfx::Point3F(),
4618 gfx::PointF(2.f, 2.f), 4595 gfx::PointF(2.f, 2.f),
4619 gfx::Size(10, 10), 4596 gfx::Size(10, 10),
4620 false, 4597 false,
4621 true); 4598 true);
4622 4599
4623 scoped_refptr<ContentLayer> child_empty = 4600 scoped_refptr<FakePictureLayer> child_empty =
4624 CreateDrawableContentLayer(&delegate); 4601 CreateDrawablePictureLayer(&delegate);
4625 SetLayerPropertiesForTesting(child_empty.get(), 4602 SetLayerPropertiesForTesting(child_empty.get(),
4626 child_scale_matrix, 4603 child_scale_matrix,
4627 gfx::Point3F(), 4604 gfx::Point3F(),
4628 gfx::PointF(2.f, 2.f), 4605 gfx::PointF(2.f, 2.f),
4629 gfx::Size(), 4606 gfx::Size(),
4630 false, 4607 false,
4631 true); 4608 true);
4632 4609
4633 scoped_refptr<NoScaleContentLayer> child_no_scale = 4610 scoped_refptr<NoScalePictureLayer> child_no_scale =
4634 CreateNoScaleDrawableContentLayer(&delegate); 4611 CreateNoScaleDrawablePictureLayer(&delegate);
4635 SetLayerPropertiesForTesting(child_no_scale.get(), 4612 SetLayerPropertiesForTesting(child_no_scale.get(),
4636 child_scale_matrix, 4613 child_scale_matrix,
4637 gfx::Point3F(), 4614 gfx::Point3F(),
4638 gfx::PointF(12.f, 12.f), 4615 gfx::PointF(12.f, 12.f),
4639 gfx::Size(10, 10), 4616 gfx::Size(10, 10),
4640 false, 4617 false,
4641 true); 4618 true);
4642 4619
4643 root->AddChild(parent); 4620 root->AddChild(parent);
4644 4621
4645 parent->AddChild(child_scale); 4622 parent->AddChild(child_scale);
4646 parent->AddChild(child_empty); 4623 parent->AddChild(child_empty);
4647 parent->AddChild(child_no_scale); 4624 parent->AddChild(child_no_scale);
4648 4625
4649 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 4626 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
4650 host->SetRootLayer(root); 4627 host->SetRootLayer(root);
4651 4628
4652 RenderSurfaceLayerList render_surface_layer_list; 4629 RenderSurfaceLayerList render_surface_layer_list;
4653 4630
4654 float device_scale_factor = 2.5f; 4631 float device_scale_factor = 2.5f;
4655 float page_scale_factor = 1.f; 4632 float page_scale_factor = 1.f;
4656 4633
4657 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4634 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4658 root.get(), root->bounds(), &render_surface_layer_list); 4635 root.get(), root->bounds(), &render_surface_layer_list);
4659 inputs.device_scale_factor = device_scale_factor; 4636 inputs.device_scale_factor = device_scale_factor;
4660 inputs.page_scale_factor = page_scale_factor; 4637 inputs.page_scale_factor = page_scale_factor;
4661 inputs.page_scale_application_layer = root.get(), 4638 inputs.page_scale_application_layer = root.get(),
4662 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4639 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4663 4640
4664 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, parent); 4641 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4665 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 4642 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
4666 child_scale); 4643 EXPECT_CONTENTS_SCALE_EQ(1, child_empty);
4667 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
4668 child_empty);
4669 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); 4644 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale);
4670 4645
4671 // Since the transform scale does not affect contents scale, it should affect 4646 // Since the transform scale affects contents scale, it should not affect
4672 // the draw transform instead. 4647 // the draw transform.
4673 EXPECT_FLOAT_EQ(initial_parent_scale, 4648 EXPECT_FLOAT_EQ(
4674 parent->draw_transform().matrix().get(0, 0)); 4649 initial_parent_scale * device_scale_factor * page_scale_factor,
4675 EXPECT_FLOAT_EQ(initial_parent_scale, 4650 parent->draw_transform().matrix().get(0, 0));
4676 parent->draw_transform().matrix().get(1, 1)); 4651 EXPECT_FLOAT_EQ(
4677 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale, 4652 initial_parent_scale * device_scale_factor * page_scale_factor,
4653 parent->draw_transform().matrix().get(1, 1));
4654 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale *
4655 device_scale_factor * page_scale_factor,
4678 child_scale->draw_transform().matrix().get(0, 0)); 4656 child_scale->draw_transform().matrix().get(0, 0));
4679 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale, 4657 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale *
4658 device_scale_factor * page_scale_factor,
4680 child_scale->draw_transform().matrix().get(1, 1)); 4659 child_scale->draw_transform().matrix().get(1, 1));
4681 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale, 4660 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale *
4661 device_scale_factor * page_scale_factor,
4682 child_empty->draw_transform().matrix().get(0, 0)); 4662 child_empty->draw_transform().matrix().get(0, 0));
4683 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale, 4663 EXPECT_FLOAT_EQ(initial_parent_scale * initial_child_scale *
4664 device_scale_factor * page_scale_factor,
4684 child_empty->draw_transform().matrix().get(1, 1)); 4665 child_empty->draw_transform().matrix().get(1, 1));
4685 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4666 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4686 initial_parent_scale * initial_child_scale, 4667 initial_parent_scale * initial_child_scale,
4687 child_no_scale->draw_transform().matrix().get(0, 0)); 4668 child_no_scale->draw_transform().matrix().get(0, 0));
4688 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4669 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4689 initial_parent_scale * initial_child_scale, 4670 initial_parent_scale * initial_child_scale,
4690 child_no_scale->draw_transform().matrix().get(1, 1)); 4671 child_no_scale->draw_transform().matrix().get(1, 1));
4691 } 4672 }
4692 4673
4693 TEST_F(LayerTreeHostCommonTest, SmallContentsScale) { 4674 TEST_F(LayerTreeHostCommonTest, SmallContentsScale) {
4694 MockContentLayerClient delegate; 4675 MockContentLayerClient delegate;
4695 gfx::Transform identity_matrix; 4676 gfx::Transform identity_matrix;
4696 4677
4697 gfx::Transform parent_scale_matrix; 4678 gfx::Transform parent_scale_matrix;
4698 SkMScalar initial_parent_scale = 1.75; 4679 SkMScalar initial_parent_scale = 1.75;
4699 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 4680 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
4700 4681
4701 gfx::Transform child_scale_matrix; 4682 gfx::Transform child_scale_matrix;
4702 SkMScalar initial_child_scale = 0.25; 4683 SkMScalar initial_child_scale = 0.25;
4703 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 4684 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
4704 4685
4705 scoped_refptr<Layer> root = Layer::Create(); 4686 scoped_refptr<Layer> root = Layer::Create();
4706 root->SetBounds(gfx::Size(100, 100)); 4687 root->SetBounds(gfx::Size(100, 100));
4707 4688
4708 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4689 scoped_refptr<FakePictureLayer> parent =
4690 CreateDrawablePictureLayer(&delegate);
4709 SetLayerPropertiesForTesting(parent.get(), 4691 SetLayerPropertiesForTesting(parent.get(),
4710 parent_scale_matrix, 4692 parent_scale_matrix,
4711 gfx::Point3F(), 4693 gfx::Point3F(),
4712 gfx::PointF(), 4694 gfx::PointF(),
4713 gfx::Size(100, 100), 4695 gfx::Size(100, 100),
4714 false, 4696 false,
4715 true); 4697 true);
4716 4698
4717 scoped_refptr<ContentLayer> child_scale = 4699 scoped_refptr<FakePictureLayer> child_scale =
4718 CreateDrawableContentLayer(&delegate); 4700 CreateDrawablePictureLayer(&delegate);
4719 SetLayerPropertiesForTesting(child_scale.get(), 4701 SetLayerPropertiesForTesting(child_scale.get(),
4720 child_scale_matrix, 4702 child_scale_matrix,
4721 gfx::Point3F(), 4703 gfx::Point3F(),
4722 gfx::PointF(2.f, 2.f), 4704 gfx::PointF(2.f, 2.f),
4723 gfx::Size(10, 10), 4705 gfx::Size(10, 10),
4724 false, 4706 false,
4725 true); 4707 true);
4726 4708
4727 root->AddChild(parent); 4709 root->AddChild(parent);
4728 4710
4729 parent->AddChild(child_scale); 4711 parent->AddChild(child_scale);
4730 4712
4731 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 4713 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
4732 host->SetRootLayer(root); 4714 host->SetRootLayer(root);
4733 4715
4734 float device_scale_factor = 2.5f; 4716 float device_scale_factor = 2.5f;
4735 float page_scale_factor = 0.01f; 4717 float page_scale_factor = 0.01f;
4736 4718
4737 { 4719 {
4738 RenderSurfaceLayerList render_surface_layer_list; 4720 RenderSurfaceLayerList render_surface_layer_list;
4739 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4721 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4740 root.get(), root->bounds(), &render_surface_layer_list); 4722 root.get(), root->bounds(), &render_surface_layer_list);
4741 inputs.device_scale_factor = device_scale_factor; 4723 inputs.device_scale_factor = device_scale_factor;
4742 inputs.page_scale_factor = page_scale_factor; 4724 inputs.page_scale_factor = page_scale_factor;
4743 inputs.page_scale_application_layer = root.get(); 4725 inputs.page_scale_application_layer = root.get();
4744 inputs.can_adjust_raster_scales = true; 4726 inputs.can_adjust_raster_scales = true;
4745 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4727 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4746 4728
4747 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * 4729 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4748 initial_parent_scale, 4730 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
4749 parent);
4750 // The child's scale is < 1, so we should not save and use that scale
4751 // factor.
4752 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * 1,
4753 child_scale);
4754 } 4731 }
4755 4732
4756 // When chilld's total scale becomes >= 1, we should save and use that scale 4733 // When chilld's total scale becomes >= 1, we should save and use that scale
4757 // factor. 4734 // factor.
4758 child_scale_matrix.MakeIdentity(); 4735 child_scale_matrix.MakeIdentity();
4759 SkMScalar final_child_scale = 0.75; 4736 SkMScalar final_child_scale = 0.75;
4760 child_scale_matrix.Scale(final_child_scale, final_child_scale); 4737 child_scale_matrix.Scale(final_child_scale, final_child_scale);
4761 child_scale->SetTransform(child_scale_matrix); 4738 child_scale->SetTransform(child_scale_matrix);
4762 4739
4763 { 4740 {
4764 RenderSurfaceLayerList render_surface_layer_list; 4741 RenderSurfaceLayerList render_surface_layer_list;
4765 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4742 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4766 root.get(), root->bounds(), &render_surface_layer_list); 4743 root.get(), root->bounds(), &render_surface_layer_list);
4767 inputs.device_scale_factor = device_scale_factor; 4744 inputs.device_scale_factor = device_scale_factor;
4768 inputs.page_scale_factor = page_scale_factor; 4745 inputs.page_scale_factor = page_scale_factor;
4769 inputs.page_scale_application_layer = root.get(); 4746 inputs.page_scale_application_layer = root.get();
4770 inputs.can_adjust_raster_scales = true; 4747 inputs.can_adjust_raster_scales = true;
4771 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4748 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4772 4749
4773 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * 4750 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4774 initial_parent_scale, 4751 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
4775 parent);
4776 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4777 initial_parent_scale * final_child_scale,
4778 child_scale);
4779 } 4752 }
4780 } 4753 }
4781 4754
4782 TEST_F(LayerTreeHostCommonTest, ContentsScaleForSurfaces) { 4755 TEST_F(LayerTreeHostCommonTest, ContentsScaleForSurfaces) {
4783 MockContentLayerClient delegate; 4756 MockContentLayerClient delegate;
4784 gfx::Transform identity_matrix; 4757 gfx::Transform identity_matrix;
4785 4758
4786 gfx::Transform parent_scale_matrix; 4759 gfx::Transform parent_scale_matrix;
4787 SkMScalar initial_parent_scale = 2.0; 4760 SkMScalar initial_parent_scale = 2.0;
4788 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 4761 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
4789 4762
4790 gfx::Transform child_scale_matrix; 4763 gfx::Transform child_scale_matrix;
4791 SkMScalar initial_child_scale = 3.0; 4764 SkMScalar initial_child_scale = 3.0;
4792 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 4765 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
4793 4766
4794 scoped_refptr<Layer> root = Layer::Create(); 4767 scoped_refptr<Layer> root = Layer::Create();
4795 root->SetBounds(gfx::Size(100, 100)); 4768 root->SetBounds(gfx::Size(100, 100));
4796 4769
4797 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4770 scoped_refptr<FakePictureLayer> parent =
4771 CreateDrawablePictureLayer(&delegate);
4798 SetLayerPropertiesForTesting(parent.get(), 4772 SetLayerPropertiesForTesting(parent.get(),
4799 parent_scale_matrix, 4773 parent_scale_matrix,
4800 gfx::Point3F(), 4774 gfx::Point3F(),
4801 gfx::PointF(), 4775 gfx::PointF(),
4802 gfx::Size(100, 100), 4776 gfx::Size(100, 100),
4803 false, 4777 false,
4804 true); 4778 true);
4805 4779
4806 scoped_refptr<ContentLayer> surface_scale = 4780 scoped_refptr<FakePictureLayer> surface_scale =
4807 CreateDrawableContentLayer(&delegate); 4781 CreateDrawablePictureLayer(&delegate);
4808 SetLayerPropertiesForTesting(surface_scale.get(), 4782 SetLayerPropertiesForTesting(surface_scale.get(),
4809 child_scale_matrix, 4783 child_scale_matrix,
4810 gfx::Point3F(), 4784 gfx::Point3F(),
4811 gfx::PointF(2.f, 2.f), 4785 gfx::PointF(2.f, 2.f),
4812 gfx::Size(10, 10), 4786 gfx::Size(10, 10),
4813 false, 4787 false,
4814 true); 4788 true);
4815 4789
4816 scoped_refptr<ContentLayer> surface_scale_child_scale = 4790 scoped_refptr<FakePictureLayer> surface_scale_child_scale =
4817 CreateDrawableContentLayer(&delegate); 4791 CreateDrawablePictureLayer(&delegate);
4818 SetLayerPropertiesForTesting(surface_scale_child_scale.get(), 4792 SetLayerPropertiesForTesting(surface_scale_child_scale.get(),
4819 child_scale_matrix, 4793 child_scale_matrix,
4820 gfx::Point3F(), 4794 gfx::Point3F(),
4821 gfx::PointF(), 4795 gfx::PointF(),
4822 gfx::Size(10, 10), 4796 gfx::Size(10, 10),
4823 false, 4797 false,
4824 true); 4798 true);
4825 4799
4826 scoped_refptr<NoScaleContentLayer> surface_scale_child_no_scale = 4800 scoped_refptr<NoScalePictureLayer> surface_scale_child_no_scale =
4827 CreateNoScaleDrawableContentLayer(&delegate); 4801 CreateNoScaleDrawablePictureLayer(&delegate);
4828 SetLayerPropertiesForTesting(surface_scale_child_no_scale.get(), 4802 SetLayerPropertiesForTesting(surface_scale_child_no_scale.get(),
4829 child_scale_matrix, 4803 child_scale_matrix,
4830 gfx::Point3F(), 4804 gfx::Point3F(),
4831 gfx::PointF(), 4805 gfx::PointF(),
4832 gfx::Size(10, 10), 4806 gfx::Size(10, 10),
4833 false, 4807 false,
4834 true); 4808 true);
4835 4809
4836 scoped_refptr<NoScaleContentLayer> surface_no_scale = 4810 scoped_refptr<NoScaleContentLayer> surface_no_scale =
4837 CreateNoScaleDrawableContentLayer(&delegate); 4811 CreateNoScaleDrawableContentLayer(&delegate);
4838 SetLayerPropertiesForTesting(surface_no_scale.get(), 4812 SetLayerPropertiesForTesting(surface_no_scale.get(),
4839 child_scale_matrix, 4813 child_scale_matrix,
4840 gfx::Point3F(), 4814 gfx::Point3F(),
4841 gfx::PointF(12.f, 12.f), 4815 gfx::PointF(12.f, 12.f),
4842 gfx::Size(10, 10), 4816 gfx::Size(10, 10),
4843 false, 4817 false,
4844 true); 4818 true);
4845 4819
4846 scoped_refptr<ContentLayer> surface_no_scale_child_scale = 4820 scoped_refptr<FakePictureLayer> surface_no_scale_child_scale =
4847 CreateDrawableContentLayer(&delegate); 4821 CreateDrawablePictureLayer(&delegate);
4848 SetLayerPropertiesForTesting(surface_no_scale_child_scale.get(), 4822 SetLayerPropertiesForTesting(surface_no_scale_child_scale.get(),
4849 child_scale_matrix, 4823 child_scale_matrix,
4850 gfx::Point3F(), 4824 gfx::Point3F(),
4851 gfx::PointF(), 4825 gfx::PointF(),
4852 gfx::Size(10, 10), 4826 gfx::Size(10, 10),
4853 false, 4827 false,
4854 true); 4828 true);
4855 4829
4856 scoped_refptr<NoScaleContentLayer> surface_no_scale_child_no_scale = 4830 scoped_refptr<NoScaleContentLayer> surface_no_scale_child_no_scale =
4857 CreateNoScaleDrawableContentLayer(&delegate); 4831 CreateNoScaleDrawableContentLayer(&delegate);
(...skipping 26 matching lines...) Expand all
4884 4858
4885 RenderSurfaceLayerList render_surface_layer_list; 4859 RenderSurfaceLayerList render_surface_layer_list;
4886 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 4860 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
4887 root.get(), root->bounds(), &render_surface_layer_list); 4861 root.get(), root->bounds(), &render_surface_layer_list);
4888 inputs.device_scale_factor = device_scale_factor; 4862 inputs.device_scale_factor = device_scale_factor;
4889 inputs.page_scale_factor = page_scale_factor; 4863 inputs.page_scale_factor = page_scale_factor;
4890 inputs.page_scale_application_layer = root.get(); 4864 inputs.page_scale_application_layer = root.get();
4891 inputs.can_adjust_raster_scales = true; 4865 inputs.can_adjust_raster_scales = true;
4892 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 4866 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
4893 4867
4894 EXPECT_CONTENTS_SCALE_EQ( 4868 EXPECT_CONTENTS_SCALE_EQ(1, parent);
4895 device_scale_factor * page_scale_factor * initial_parent_scale, parent); 4869 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale);
4896 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor *
4897 initial_parent_scale * initial_child_scale,
4898 surface_scale);
4899 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale); 4870 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale);
4900 EXPECT_CONTENTS_SCALE_EQ( 4871 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale_child_scale);
4901 device_scale_factor * page_scale_factor * initial_parent_scale *
4902 initial_child_scale * initial_child_scale,
4903 surface_scale_child_scale);
4904 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale_child_no_scale); 4872 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale_child_no_scale);
4905 EXPECT_CONTENTS_SCALE_EQ( 4873 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale_child_scale);
4906 device_scale_factor * page_scale_factor * initial_parent_scale *
4907 initial_child_scale * initial_child_scale,
4908 surface_no_scale_child_scale);
4909 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale_child_no_scale); 4874 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale_child_no_scale);
4910 4875
4911 // The parent is scaled up and shouldn't need to scale during draw. 4876 // The parent is not scaled up and should need to scale during draw.
4912 EXPECT_FLOAT_EQ(1.0, parent->draw_transform().matrix().get(0, 0)); 4877 EXPECT_FLOAT_EQ(
4913 EXPECT_FLOAT_EQ(1.0, parent->draw_transform().matrix().get(1, 1)); 4878 device_scale_factor * page_scale_factor * initial_parent_scale,
4879 parent->draw_transform().matrix().get(0, 0));
4880 EXPECT_FLOAT_EQ(
4881 device_scale_factor * page_scale_factor * initial_parent_scale,
4882 parent->draw_transform().matrix().get(1, 1));
4914 4883
4915 // RenderSurfaces should always be 1:1 with their target. 4884 // RenderSurfaces should always be 1:1 with their target.
4916 EXPECT_FLOAT_EQ( 4885 EXPECT_FLOAT_EQ(
4917 1.0, 4886 1, surface_scale->render_surface()->draw_transform().matrix().get(0, 0));
4918 surface_scale->render_surface()->draw_transform().matrix().get(0, 0));
4919 EXPECT_FLOAT_EQ( 4887 EXPECT_FLOAT_EQ(
4920 1.0, 4888 1, surface_scale->render_surface()->draw_transform().matrix().get(1, 1));
4921 surface_scale->render_surface()->draw_transform().matrix().get(1, 1));
4922 4889
4923 // The surface_scale can apply contents scale so the layer shouldn't need to 4890 // The surface_scale cannot apply contents scale so the layer would need to
4924 // scale during draw. 4891 // scale during draw.
4925 EXPECT_FLOAT_EQ(1.0, surface_scale->draw_transform().matrix().get(0, 0)); 4892 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4926 EXPECT_FLOAT_EQ(1.0, surface_scale->draw_transform().matrix().get(1, 1)); 4893 initial_parent_scale * initial_child_scale,
4894 surface_scale->draw_transform().matrix().get(0, 0));
4895 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4896 initial_parent_scale * initial_child_scale,
4897 surface_scale->draw_transform().matrix().get(1, 1));
4927 4898
4928 // The surface_scale_child_scale can apply contents scale so it shouldn't need 4899 // The surface_scale_child_scale cannot apply contents scale so it would need
4929 // to scale during draw. 4900 // to scale during draw.
4930 EXPECT_FLOAT_EQ( 4901 EXPECT_FLOAT_EQ(
4931 1.0, surface_scale_child_scale->draw_transform().matrix().get(0, 0)); 4902 device_scale_factor * page_scale_factor * initial_parent_scale *
4903 initial_child_scale * initial_child_scale,
4904 surface_scale_child_scale->draw_transform().matrix().get(0, 0));
4932 EXPECT_FLOAT_EQ( 4905 EXPECT_FLOAT_EQ(
4933 1.0, surface_scale_child_scale->draw_transform().matrix().get(1, 1)); 4906 device_scale_factor * page_scale_factor * initial_parent_scale *
4907 initial_child_scale * initial_child_scale,
4908 surface_scale_child_scale->draw_transform().matrix().get(1, 1));
4934 4909
4935 // The surface_scale_child_no_scale can not apply contents scale, so it needs 4910 // The surface_scale_child_no_scale can not apply contents scale, so it needs
4936 // to be scaled during draw. 4911 // to be scaled during draw.
4937 EXPECT_FLOAT_EQ( 4912 EXPECT_FLOAT_EQ(
4938 device_scale_factor * page_scale_factor * initial_parent_scale * 4913 device_scale_factor * page_scale_factor * initial_parent_scale *
4939 initial_child_scale * initial_child_scale, 4914 initial_child_scale * initial_child_scale,
4940 surface_scale_child_no_scale->draw_transform().matrix().get(0, 0)); 4915 surface_scale_child_no_scale->draw_transform().matrix().get(0, 0));
4941 EXPECT_FLOAT_EQ( 4916 EXPECT_FLOAT_EQ(
4942 device_scale_factor * page_scale_factor * initial_parent_scale * 4917 device_scale_factor * page_scale_factor * initial_parent_scale *
4943 initial_child_scale * initial_child_scale, 4918 initial_child_scale * initial_child_scale,
4944 surface_scale_child_no_scale->draw_transform().matrix().get(1, 1)); 4919 surface_scale_child_no_scale->draw_transform().matrix().get(1, 1));
4945 4920
4946 // RenderSurfaces should always be 1:1 with their target. 4921 // RenderSurfaces should always be 1:1 with their target.
4947 EXPECT_FLOAT_EQ( 4922 EXPECT_FLOAT_EQ(
4948 1.0, 4923 1,
4949 surface_no_scale->render_surface()->draw_transform().matrix().get(0, 0)); 4924 surface_no_scale->render_surface()->draw_transform().matrix().get(0, 0));
4950 EXPECT_FLOAT_EQ( 4925 EXPECT_FLOAT_EQ(
4951 1.0, 4926 1,
4952 surface_no_scale->render_surface()->draw_transform().matrix().get(1, 1)); 4927 surface_no_scale->render_surface()->draw_transform().matrix().get(1, 1));
4953 4928
4954 // The surface_no_scale layer can not apply contents scale, so it needs to be 4929 // The surface_no_scale layer can not apply contents scale, so it needs to be
4955 // scaled during draw. 4930 // scaled during draw.
4956 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4931 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4957 initial_parent_scale * initial_child_scale, 4932 initial_parent_scale * initial_child_scale,
4958 surface_no_scale->draw_transform().matrix().get(0, 0)); 4933 surface_no_scale->draw_transform().matrix().get(0, 0));
4959 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor * 4934 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor *
4960 initial_parent_scale * initial_child_scale, 4935 initial_parent_scale * initial_child_scale,
4961 surface_no_scale->draw_transform().matrix().get(1, 1)); 4936 surface_no_scale->draw_transform().matrix().get(1, 1));
4962 4937
4963 // The surface_scale_child_scale can apply contents scale so it shouldn't need 4938 // The surface_scale_child_scale can not apply contents scale so it should
4939 // need
4964 // to scale during draw. 4940 // to scale during draw.
4965 EXPECT_FLOAT_EQ( 4941 EXPECT_FLOAT_EQ(
4966 1.0, surface_no_scale_child_scale->draw_transform().matrix().get(0, 0)); 4942 device_scale_factor * page_scale_factor * initial_parent_scale *
4943 initial_child_scale * initial_child_scale,
4944 surface_no_scale_child_scale->draw_transform().matrix().get(0, 0));
4967 EXPECT_FLOAT_EQ( 4945 EXPECT_FLOAT_EQ(
4968 1.0, surface_no_scale_child_scale->draw_transform().matrix().get(1, 1)); 4946 device_scale_factor * page_scale_factor * initial_parent_scale *
4947 initial_child_scale * initial_child_scale,
4948 surface_no_scale_child_scale->draw_transform().matrix().get(1, 1));
4969 4949
4970 // The surface_scale_child_no_scale can not apply contents scale, so it needs 4950 // The surface_scale_child_no_scale can not apply contents scale, so it needs
4971 // to be scaled during draw. 4951 // to be scaled during draw.
4972 EXPECT_FLOAT_EQ( 4952 EXPECT_FLOAT_EQ(
4973 device_scale_factor * page_scale_factor * initial_parent_scale * 4953 device_scale_factor * page_scale_factor * initial_parent_scale *
4974 initial_child_scale * initial_child_scale, 4954 initial_child_scale * initial_child_scale,
4975 surface_no_scale_child_no_scale->draw_transform().matrix().get(0, 0)); 4955 surface_no_scale_child_no_scale->draw_transform().matrix().get(0, 0));
4976 EXPECT_FLOAT_EQ( 4956 EXPECT_FLOAT_EQ(
4977 device_scale_factor * page_scale_factor * initial_parent_scale * 4957 device_scale_factor * page_scale_factor * initial_parent_scale *
4978 initial_child_scale * initial_child_scale, 4958 initial_child_scale * initial_child_scale,
4979 surface_no_scale_child_no_scale->draw_transform().matrix().get(1, 1)); 4959 surface_no_scale_child_no_scale->draw_transform().matrix().get(1, 1));
4980 } 4960 }
4981 4961
4982 TEST_F(LayerTreeHostCommonTest, 4962 TEST_F(LayerTreeHostCommonTest,
4983 ContentsScaleForSurfaces_LayerTransformsDontAffectContentsScale) { 4963 ContentsScaleForSurfaces_LayerTransformsDontAffectContentsScale) {
4984 MockContentLayerClient delegate; 4964 MockContentLayerClient delegate;
4985 gfx::Transform identity_matrix; 4965 gfx::Transform identity_matrix;
4986 4966
4987 gfx::Transform parent_scale_matrix; 4967 gfx::Transform parent_scale_matrix;
4988 SkMScalar initial_parent_scale = 2.0; 4968 SkMScalar initial_parent_scale = 2.0;
4989 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 4969 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
4990 4970
4991 gfx::Transform child_scale_matrix; 4971 gfx::Transform child_scale_matrix;
4992 SkMScalar initial_child_scale = 3.0; 4972 SkMScalar initial_child_scale = 3.0;
4993 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 4973 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
4994 4974
4995 scoped_refptr<Layer> root = Layer::Create(); 4975 scoped_refptr<Layer> root = Layer::Create();
4996 root->SetBounds(gfx::Size(100, 100)); 4976 root->SetBounds(gfx::Size(100, 100));
4997 4977
4998 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 4978 scoped_refptr<FakePictureLayer> parent =
4979 CreateDrawablePictureLayer(&delegate);
4999 SetLayerPropertiesForTesting(parent.get(), 4980 SetLayerPropertiesForTesting(parent.get(),
5000 parent_scale_matrix, 4981 parent_scale_matrix,
5001 gfx::Point3F(), 4982 gfx::Point3F(),
5002 gfx::PointF(), 4983 gfx::PointF(),
5003 gfx::Size(100, 100), 4984 gfx::Size(100, 100),
5004 false, 4985 false,
5005 true); 4986 true);
5006 4987
5007 scoped_refptr<ContentLayer> surface_scale = 4988 scoped_refptr<FakePictureLayer> surface_scale =
5008 CreateDrawableContentLayer(&delegate); 4989 CreateDrawablePictureLayer(&delegate);
5009 SetLayerPropertiesForTesting(surface_scale.get(), 4990 SetLayerPropertiesForTesting(surface_scale.get(),
5010 child_scale_matrix, 4991 child_scale_matrix,
5011 gfx::Point3F(), 4992 gfx::Point3F(),
5012 gfx::PointF(2.f, 2.f), 4993 gfx::PointF(2.f, 2.f),
5013 gfx::Size(10, 10), 4994 gfx::Size(10, 10),
5014 false, 4995 false,
5015 true); 4996 true);
5016 4997
5017 scoped_refptr<ContentLayer> surface_scale_child_scale = 4998 scoped_refptr<FakePictureLayer> surface_scale_child_scale =
5018 CreateDrawableContentLayer(&delegate); 4999 CreateDrawablePictureLayer(&delegate);
5019 SetLayerPropertiesForTesting(surface_scale_child_scale.get(), 5000 SetLayerPropertiesForTesting(surface_scale_child_scale.get(),
5020 child_scale_matrix, 5001 child_scale_matrix,
5021 gfx::Point3F(), 5002 gfx::Point3F(),
5022 gfx::PointF(), 5003 gfx::PointF(),
5023 gfx::Size(10, 10), 5004 gfx::Size(10, 10),
5024 false, 5005 false,
5025 true); 5006 true);
5026 5007
5027 scoped_refptr<NoScaleContentLayer> surface_scale_child_no_scale = 5008 scoped_refptr<NoScalePictureLayer> surface_scale_child_no_scale =
5028 CreateNoScaleDrawableContentLayer(&delegate); 5009 CreateNoScaleDrawablePictureLayer(&delegate);
5029 SetLayerPropertiesForTesting(surface_scale_child_no_scale.get(), 5010 SetLayerPropertiesForTesting(surface_scale_child_no_scale.get(),
5030 child_scale_matrix, 5011 child_scale_matrix,
5031 gfx::Point3F(), 5012 gfx::Point3F(),
5032 gfx::PointF(), 5013 gfx::PointF(),
5033 gfx::Size(10, 10), 5014 gfx::Size(10, 10),
5034 false, 5015 false,
5035 true); 5016 true);
5036 5017
5037 scoped_refptr<NoScaleContentLayer> surface_no_scale = 5018 scoped_refptr<NoScalePictureLayer> surface_no_scale =
5038 CreateNoScaleDrawableContentLayer(&delegate); 5019 CreateNoScaleDrawablePictureLayer(&delegate);
5039 SetLayerPropertiesForTesting(surface_no_scale.get(), 5020 SetLayerPropertiesForTesting(surface_no_scale.get(),
5040 child_scale_matrix, 5021 child_scale_matrix,
5041 gfx::Point3F(), 5022 gfx::Point3F(),
5042 gfx::PointF(12.f, 12.f), 5023 gfx::PointF(12.f, 12.f),
5043 gfx::Size(10, 10), 5024 gfx::Size(10, 10),
5044 false, 5025 false,
5045 true); 5026 true);
5046 5027
5047 scoped_refptr<ContentLayer> surface_no_scale_child_scale = 5028 scoped_refptr<FakePictureLayer> surface_no_scale_child_scale =
5048 CreateDrawableContentLayer(&delegate); 5029 CreateDrawablePictureLayer(&delegate);
5049 SetLayerPropertiesForTesting(surface_no_scale_child_scale.get(), 5030 SetLayerPropertiesForTesting(surface_no_scale_child_scale.get(),
5050 child_scale_matrix, 5031 child_scale_matrix,
5051 gfx::Point3F(), 5032 gfx::Point3F(),
5052 gfx::PointF(), 5033 gfx::PointF(),
5053 gfx::Size(10, 10), 5034 gfx::Size(10, 10),
5054 false, 5035 false,
5055 true); 5036 true);
5056 5037
5057 scoped_refptr<NoScaleContentLayer> surface_no_scale_child_no_scale = 5038 scoped_refptr<NoScaleContentLayer> surface_no_scale_child_no_scale =
5058 CreateNoScaleDrawableContentLayer(&delegate); 5039 CreateNoScaleDrawableContentLayer(&delegate);
(...skipping 25 matching lines...) Expand all
5084 5065
5085 SkMScalar device_scale_factor = 5.0; 5066 SkMScalar device_scale_factor = 5.0;
5086 SkMScalar page_scale_factor = 7.0; 5067 SkMScalar page_scale_factor = 7.0;
5087 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 5068 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
5088 root.get(), root->bounds(), &render_surface_layer_list); 5069 root.get(), root->bounds(), &render_surface_layer_list);
5089 inputs.device_scale_factor = device_scale_factor; 5070 inputs.device_scale_factor = device_scale_factor;
5090 inputs.page_scale_factor = page_scale_factor; 5071 inputs.page_scale_factor = page_scale_factor;
5091 inputs.page_scale_application_layer = root.get(); 5072 inputs.page_scale_application_layer = root.get();
5092 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 5073 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
5093 5074
5094 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 5075 EXPECT_CONTENTS_SCALE_EQ(1, parent);
5095 parent); 5076 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale);
5096 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor,
5097 surface_scale);
5098 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_no_scale); 5077 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_no_scale);
5099 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 5078 EXPECT_CONTENTS_SCALE_EQ(1, surface_scale_child_scale);
5100 surface_scale_child_scale);
5101 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_scale_child_no_scale); 5079 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_scale_child_no_scale);
5102 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, 5080 EXPECT_CONTENTS_SCALE_EQ(1, surface_no_scale_child_scale);
5103 surface_no_scale_child_scale);
5104 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_no_scale_child_no_scale); 5081 EXPECT_CONTENTS_SCALE_EQ(1.f, surface_no_scale_child_no_scale);
5105 5082
5106 // The parent is scaled up during draw, since its contents are not scaled by 5083 // The parent is not scaled up during draw, since its contents are scaled by
5107 // the transform hierarchy. 5084 // the transform hierarchy.
5108 EXPECT_FLOAT_EQ(initial_parent_scale, 5085 EXPECT_FLOAT_EQ(
5109 parent->draw_transform().matrix().get(0, 0)); 5086 device_scale_factor * page_scale_factor * initial_parent_scale,
5110 EXPECT_FLOAT_EQ(initial_parent_scale, 5087 parent->draw_transform().matrix().get(0, 0));
5111 parent->draw_transform().matrix().get(1, 1)); 5088 EXPECT_FLOAT_EQ(
5089 device_scale_factor * page_scale_factor * initial_parent_scale,
5090 parent->draw_transform().matrix().get(1, 1));
5112 5091
5113 // The child surface is scaled up during draw since its subtree is not scaled 5092 // The child surface is scaled up during draw since its subtree is not scaled
5114 // by the transform hierarchy. 5093 // by the transform hierarchy.
5115 EXPECT_FLOAT_EQ( 5094 EXPECT_FLOAT_EQ(
5116 initial_parent_scale * initial_child_scale, 5095 initial_parent_scale * initial_child_scale,
5117 surface_scale->render_surface()->draw_transform().matrix().get(0, 0)); 5096 surface_scale->render_surface()->draw_transform().matrix().get(0, 0));
5118 EXPECT_FLOAT_EQ( 5097 EXPECT_FLOAT_EQ(
5119 initial_parent_scale * initial_child_scale, 5098 initial_parent_scale * initial_child_scale,
5120 surface_scale->render_surface()->draw_transform().matrix().get(1, 1)); 5099 surface_scale->render_surface()->draw_transform().matrix().get(1, 1));
5121 5100
5122 // The surface_scale's RenderSurface is scaled during draw, so the layer does 5101 // The surface_scale's RenderSurface is not scaled during draw, so the layer
5123 // not need to be scaled when drawing into its surface. 5102 // need to be scaled when drawing into its surface.
5124 EXPECT_FLOAT_EQ(1.0, surface_scale->draw_transform().matrix().get(0, 0)); 5103 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor,
5125 EXPECT_FLOAT_EQ(1.0, surface_scale->draw_transform().matrix().get(1, 1)); 5104 surface_scale->draw_transform().matrix().get(0, 0));
5105 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor,
5106 surface_scale->draw_transform().matrix().get(1, 1));
5126 5107
5127 // The surface_scale_child_scale is scaled when drawing into its surface, 5108 // The surface_scale_child_scale is not scaled when drawing into its surface,
5128 // since its content bounds are not scaled by the transform hierarchy. 5109 // since its content bounds are scaled by the transform hierarchy.
5129 EXPECT_FLOAT_EQ( 5110 EXPECT_FLOAT_EQ(
5130 initial_child_scale, 5111 initial_child_scale * device_scale_factor * page_scale_factor,
5131 surface_scale_child_scale->draw_transform().matrix().get(0, 0)); 5112 surface_scale_child_scale->draw_transform().matrix().get(0, 0));
5132 EXPECT_FLOAT_EQ( 5113 EXPECT_FLOAT_EQ(
5133 initial_child_scale, 5114 initial_child_scale * device_scale_factor * page_scale_factor,
5134 surface_scale_child_scale->draw_transform().matrix().get(1, 1)); 5115 surface_scale_child_scale->draw_transform().matrix().get(1, 1));
5135 5116
5136 // The surface_scale_child_no_scale has a fixed contents scale of 1, so it 5117 // The surface_scale_child_no_scale has a fixed contents scale of 1, so it
5137 // needs to be scaled by the device and page scale factors, along with the 5118 // needs to be scaled by the device and page scale factors, along with the
5138 // transform hierarchy. 5119 // transform hierarchy.
5139 EXPECT_FLOAT_EQ( 5120 EXPECT_FLOAT_EQ(
5140 device_scale_factor * page_scale_factor * initial_child_scale, 5121 device_scale_factor * page_scale_factor * initial_child_scale,
5141 surface_scale_child_no_scale->draw_transform().matrix().get(0, 0)); 5122 surface_scale_child_no_scale->draw_transform().matrix().get(0, 0));
5142 EXPECT_FLOAT_EQ( 5123 EXPECT_FLOAT_EQ(
5143 device_scale_factor * page_scale_factor * initial_child_scale, 5124 device_scale_factor * page_scale_factor * initial_child_scale,
(...skipping 10 matching lines...) Expand all
5154 5135
5155 // The surface_no_scale layer has a fixed contents scale of 1, so it needs to 5136 // The surface_no_scale layer has a fixed contents scale of 1, so it needs to
5156 // be scaled by the device and page scale factors. Its surface is already 5137 // be scaled by the device and page scale factors. Its surface is already
5157 // scaled by the transform hierarchy so those don't need to scale the layer's 5138 // scaled by the transform hierarchy so those don't need to scale the layer's
5158 // drawing. 5139 // drawing.
5159 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor, 5140 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor,
5160 surface_no_scale->draw_transform().matrix().get(0, 0)); 5141 surface_no_scale->draw_transform().matrix().get(0, 0));
5161 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor, 5142 EXPECT_FLOAT_EQ(device_scale_factor * page_scale_factor,
5162 surface_no_scale->draw_transform().matrix().get(1, 1)); 5143 surface_no_scale->draw_transform().matrix().get(1, 1));
5163 5144
5164 // The surface_no_scale_child_scale has its contents scaled by the page and 5145 // The surface_no_scale_child_scale doesnt have its contents scaled
5165 // device scale factors, but needs to be scaled by the transform hierarchy 5146 // by the page and device scale factors.
5166 // when drawing.
5167 EXPECT_FLOAT_EQ( 5147 EXPECT_FLOAT_EQ(
5168 initial_child_scale, 5148 initial_child_scale * device_scale_factor * page_scale_factor,
5169 surface_no_scale_child_scale->draw_transform().matrix().get(0, 0)); 5149 surface_no_scale_child_scale->draw_transform().matrix().get(0, 0));
5170 EXPECT_FLOAT_EQ( 5150 EXPECT_FLOAT_EQ(
5171 initial_child_scale, 5151 initial_child_scale * device_scale_factor * page_scale_factor,
5172 surface_no_scale_child_scale->draw_transform().matrix().get(1, 1)); 5152 surface_no_scale_child_scale->draw_transform().matrix().get(1, 1));
5173 5153
5174 // The surface_no_scale_child_no_scale has a fixed contents scale of 1, so it 5154 // The surface_no_scale_child_no_scale has a fixed contents scale of 1, so it
5175 // needs to be scaled by the device and page scale factors. It also needs to 5155 // needs to be scaled by the device and page scale factors. It also needs to
5176 // be scaled by any transform heirarchy below its target surface. 5156 // be scaled by any transform heirarchy below its target surface.
5177 EXPECT_FLOAT_EQ( 5157 EXPECT_FLOAT_EQ(
5178 device_scale_factor * page_scale_factor * initial_child_scale, 5158 device_scale_factor * page_scale_factor * initial_child_scale,
5179 surface_no_scale_child_no_scale->draw_transform().matrix().get(0, 0)); 5159 surface_no_scale_child_no_scale->draw_transform().matrix().get(0, 0));
5180 EXPECT_FLOAT_EQ( 5160 EXPECT_FLOAT_EQ(
5181 device_scale_factor * page_scale_factor * initial_child_scale, 5161 device_scale_factor * page_scale_factor * initial_child_scale,
5182 surface_no_scale_child_no_scale->draw_transform().matrix().get(1, 1)); 5162 surface_no_scale_child_no_scale->draw_transform().matrix().get(1, 1));
5183 } 5163 }
5184 5164
5185 TEST_F(LayerTreeHostCommonTest, ContentsScaleForAnimatingLayer) { 5165 TEST_F(LayerTreeHostCommonTest, ContentsScaleForAnimatingLayer) {
5186 MockContentLayerClient delegate; 5166 MockContentLayerClient delegate;
5187 gfx::Transform identity_matrix; 5167 gfx::Transform identity_matrix;
5188 5168
5189 gfx::Transform parent_scale_matrix; 5169 gfx::Transform parent_scale_matrix;
5190 SkMScalar initial_parent_scale = 1.75; 5170 SkMScalar initial_parent_scale = 1.75;
5191 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale); 5171 parent_scale_matrix.Scale(initial_parent_scale, initial_parent_scale);
5192 5172
5193 gfx::Transform child_scale_matrix; 5173 gfx::Transform child_scale_matrix;
5194 SkMScalar initial_child_scale = 1.25; 5174 SkMScalar initial_child_scale = 1.25;
5195 child_scale_matrix.Scale(initial_child_scale, initial_child_scale); 5175 child_scale_matrix.Scale(initial_child_scale, initial_child_scale);
5196 5176
5197 scoped_refptr<Layer> root = Layer::Create(); 5177 scoped_refptr<Layer> root = Layer::Create();
5198 root->SetBounds(gfx::Size(100, 100)); 5178 root->SetBounds(gfx::Size(100, 100));
5199 5179
5200 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 5180 scoped_refptr<FakePictureLayer> parent =
5181 CreateDrawablePictureLayer(&delegate);
5201 SetLayerPropertiesForTesting(parent.get(), 5182 SetLayerPropertiesForTesting(parent.get(),
5202 parent_scale_matrix, 5183 parent_scale_matrix,
5203 gfx::Point3F(), 5184 gfx::Point3F(),
5204 gfx::PointF(), 5185 gfx::PointF(),
5205 gfx::Size(100, 100), 5186 gfx::Size(100, 100),
5206 false, 5187 false,
5207 true); 5188 true);
5208 5189
5209 scoped_refptr<ContentLayer> child_scale = 5190 scoped_refptr<FakePictureLayer> child_scale =
5210 CreateDrawableContentLayer(&delegate); 5191 CreateDrawablePictureLayer(&delegate);
5211 SetLayerPropertiesForTesting(child_scale.get(), 5192 SetLayerPropertiesForTesting(child_scale.get(),
5212 child_scale_matrix, 5193 child_scale_matrix,
5213 gfx::Point3F(), 5194 gfx::Point3F(),
5214 gfx::PointF(2.f, 2.f), 5195 gfx::PointF(2.f, 2.f),
5215 gfx::Size(10, 10), 5196 gfx::Size(10, 10),
5216 false, 5197 false,
5217 true); 5198 true);
5218 5199
5219 root->AddChild(parent); 5200 root->AddChild(parent);
5220 5201
5221 parent->AddChild(child_scale); 5202 parent->AddChild(child_scale);
5222 5203
5223 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 5204 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
5224 host->SetRootLayer(root); 5205 host->SetRootLayer(root);
5225 5206
5226 // Now put an animating transform on child. 5207 // Now put an animating transform on child.
5227 int animation_id = AddAnimatedTransformToController( 5208 int animation_id = AddAnimatedTransformToController(
5228 child_scale->layer_animation_controller(), 10.0, 30, 0); 5209 child_scale->layer_animation_controller(), 10.0, 30, 0);
5229 5210
5230 { 5211 {
5231 RenderSurfaceLayerList render_surface_layer_list; 5212 RenderSurfaceLayerList render_surface_layer_list;
5232 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 5213 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
5233 root.get(), root->bounds(), &render_surface_layer_list); 5214 root.get(), root->bounds(), &render_surface_layer_list);
5234 inputs.can_adjust_raster_scales = true; 5215 inputs.can_adjust_raster_scales = true;
5235 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 5216 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
5236 5217
5237 EXPECT_CONTENTS_SCALE_EQ(initial_parent_scale, parent); 5218 // Picturelayer's content scale is 1.f
5219 EXPECT_CONTENTS_SCALE_EQ(1, parent);
5238 // The layers with animating transforms should not compute a contents scale 5220 // The layers with animating transforms should not compute a contents scale
5239 // other than 1 until they finish animating. 5221 // other than 1 until they finish animating.
5240 EXPECT_CONTENTS_SCALE_EQ(1, child_scale); 5222 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
5241 } 5223 }
5242 5224
5243 // Remove the animation, now it can save a raster scale. 5225 // Remove the animation, now it can save a raster scale.
5244 child_scale->layer_animation_controller()->RemoveAnimation(animation_id); 5226 child_scale->layer_animation_controller()->RemoveAnimation(animation_id);
5245 5227
5246 { 5228 {
5247 RenderSurfaceLayerList render_surface_layer_list; 5229 RenderSurfaceLayerList render_surface_layer_list;
5248 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 5230 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
5249 root.get(), root->bounds(), &render_surface_layer_list); 5231 root.get(), root->bounds(), &render_surface_layer_list);
5250 inputs.can_adjust_raster_scales = true; 5232 inputs.can_adjust_raster_scales = true;
5251 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 5233 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
5252 5234
5253 EXPECT_CONTENTS_SCALE_EQ(initial_parent_scale, parent); 5235 EXPECT_CONTENTS_SCALE_EQ(1, parent);
5254 // The layers with animating transforms should not compute a contents scale 5236 // The layers with animating transforms should not compute a contents scale
5255 // other than 1 until they finish animating. 5237 // other than 1 until they finish animating.
5256 EXPECT_CONTENTS_SCALE_EQ(initial_parent_scale * initial_child_scale, 5238 EXPECT_CONTENTS_SCALE_EQ(1, child_scale);
5257 child_scale);
5258 } 5239 }
5259 } 5240 }
5260 5241
5261 TEST_F(LayerTreeHostCommonTest, 5242 TEST_F(LayerTreeHostCommonTest,
5262 ChangeInContentBoundsOrScaleTriggersPushProperties) { 5243 ChangeInContentBoundsOrScaleTriggersPushProperties) {
5263 MockContentLayerClient delegate; 5244 MockContentLayerClient delegate;
5264 scoped_refptr<Layer> root = Layer::Create(); 5245 scoped_refptr<Layer> root = Layer::Create();
5265 scoped_refptr<Layer> child = CreateDrawableContentLayer(&delegate); 5246 scoped_refptr<FakePictureLayer> child = CreateDrawablePictureLayer(&delegate);
5266 root->AddChild(child); 5247 root->AddChild(child);
5267 5248
5268 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 5249 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
5269 host->SetRootLayer(root); 5250 host->SetRootLayer(root);
5270 5251
5271 gfx::Transform identity_matrix; 5252 gfx::Transform identity_matrix;
5272 SetLayerPropertiesForTesting(root.get(), 5253 SetLayerPropertiesForTesting(root.get(),
5273 identity_matrix, 5254 identity_matrix,
5274 gfx::Point3F(), 5255 gfx::Point3F(),
5275 gfx::PointF(), 5256 gfx::PointF(),
(...skipping 12 matching lines...) Expand all
5288 child->reset_needs_push_properties_for_testing(); 5269 child->reset_needs_push_properties_for_testing();
5289 5270
5290 // This will change both layers' content bounds. 5271 // This will change both layers' content bounds.
5291 ExecuteCalculateDrawProperties(root.get()); 5272 ExecuteCalculateDrawProperties(root.get());
5292 EXPECT_TRUE(root->needs_push_properties()); 5273 EXPECT_TRUE(root->needs_push_properties());
5293 EXPECT_TRUE(child->needs_push_properties()); 5274 EXPECT_TRUE(child->needs_push_properties());
5294 5275
5295 root->reset_needs_push_properties_for_testing(); 5276 root->reset_needs_push_properties_for_testing();
5296 child->reset_needs_push_properties_for_testing(); 5277 child->reset_needs_push_properties_for_testing();
5297 5278
5298 // This will change only the child layer's contents scale and content bounds,
5299 // since the root layer is not a ContentsScalingLayer.
5300 ExecuteCalculateDrawProperties(root.get(), 2.f);
5301 EXPECT_FALSE(root->needs_push_properties());
5302 EXPECT_TRUE(child->needs_push_properties());
5303
5304 root->reset_needs_push_properties_for_testing();
5305 child->reset_needs_push_properties_for_testing();
5306
5307 // This will not change either layer's contents scale or content bounds. 5279 // This will not change either layer's contents scale or content bounds.
5308 ExecuteCalculateDrawProperties(root.get(), 2.f); 5280 ExecuteCalculateDrawProperties(root.get(), 2.f);
5309 EXPECT_FALSE(root->needs_push_properties()); 5281 EXPECT_FALSE(root->needs_push_properties());
5310 EXPECT_FALSE(child->needs_push_properties()); 5282 EXPECT_FALSE(child->needs_push_properties());
5311 } 5283 }
5312 5284
5313 TEST_F(LayerTreeHostCommonTest, RenderSurfaceTransformsInHighDPI) { 5285 TEST_F(LayerTreeHostCommonTest, RenderSurfaceTransformsInHighDPI) {
5314 MockContentLayerClient delegate; 5286 MockContentLayerClient delegate;
5315 gfx::Transform identity_matrix; 5287 gfx::Transform identity_matrix;
5316 5288
5317 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 5289 scoped_refptr<FakePictureLayer> parent =
5290 CreateDrawablePictureLayer(&delegate);
5318 SetLayerPropertiesForTesting(parent.get(), 5291 SetLayerPropertiesForTesting(parent.get(),
5319 identity_matrix, 5292 identity_matrix,
5320 gfx::Point3F(), 5293 gfx::Point3F(),
5321 gfx::PointF(), 5294 gfx::PointF(),
5322 gfx::Size(30, 30), 5295 gfx::Size(30, 30),
5323 false, 5296 false,
5324 true); 5297 true);
5325 5298
5326 scoped_refptr<ContentLayer> child = CreateDrawableContentLayer(&delegate); 5299 scoped_refptr<FakePictureLayer> child = CreateDrawablePictureLayer(&delegate);
5327 SetLayerPropertiesForTesting(child.get(), 5300 SetLayerPropertiesForTesting(child.get(),
5328 identity_matrix, 5301 identity_matrix,
5329 gfx::Point3F(), 5302 gfx::Point3F(),
5330 gfx::PointF(2.f, 2.f), 5303 gfx::PointF(2.f, 2.f),
5331 gfx::Size(10, 10), 5304 gfx::Size(10, 10),
5332 false, 5305 false,
5333 true); 5306 true);
5334 5307
5335 gfx::Transform replica_transform; 5308 gfx::Transform replica_transform;
5336 replica_transform.Scale(1.0, -1.0); 5309 replica_transform.Scale(1.0, -1.0);
5337 scoped_refptr<ContentLayer> replica = CreateDrawableContentLayer(&delegate); 5310 scoped_refptr<FakePictureLayer> replica =
5311 CreateDrawablePictureLayer(&delegate);
5338 SetLayerPropertiesForTesting(replica.get(), 5312 SetLayerPropertiesForTesting(replica.get(),
5339 replica_transform, 5313 replica_transform,
5340 gfx::Point3F(), 5314 gfx::Point3F(),
5341 gfx::PointF(2.f, 2.f), 5315 gfx::PointF(2.f, 2.f),
5342 gfx::Size(10, 10), 5316 gfx::Size(10, 10),
5343 false, 5317 false,
5344 true); 5318 true);
5345 5319
5346 // This layer should end up in the same surface as child, with the same draw 5320 // This layer should end up in the same surface as child, with the same draw
5347 // and screen space transforms. 5321 // and screen space transforms.
5348 scoped_refptr<ContentLayer> duplicate_child_non_owner = 5322 scoped_refptr<FakePictureLayer> duplicate_child_non_owner =
5349 CreateDrawableContentLayer(&delegate); 5323 CreateDrawablePictureLayer(&delegate);
5350 SetLayerPropertiesForTesting(duplicate_child_non_owner.get(), 5324 SetLayerPropertiesForTesting(duplicate_child_non_owner.get(),
5351 identity_matrix, 5325 identity_matrix,
5352 gfx::Point3F(), 5326 gfx::Point3F(),
5353 gfx::PointF(), 5327 gfx::PointF(),
5354 gfx::Size(10, 10), 5328 gfx::Size(10, 10),
5355 false, 5329 false,
5356 true); 5330 true);
5357 5331
5358 parent->AddChild(child); 5332 parent->AddChild(child);
5359 child->AddChild(duplicate_child_non_owner); 5333 child->AddChild(duplicate_child_non_owner);
5360 child->SetReplicaLayer(replica.get()); 5334 child->SetReplicaLayer(replica.get());
5361 5335
5362 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 5336 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
5363 host->SetRootLayer(parent); 5337 host->SetRootLayer(parent);
5364 5338
5365 RenderSurfaceLayerList render_surface_layer_list; 5339 RenderSurfaceLayerList render_surface_layer_list;
5366 5340
5367 float device_scale_factor = 1.5f; 5341 float device_scale_factor = 1.5f;
5368 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 5342 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
5369 parent.get(), parent->bounds(), &render_surface_layer_list); 5343 parent.get(), parent->bounds(), &render_surface_layer_list);
5370 inputs.device_scale_factor = device_scale_factor; 5344 inputs.device_scale_factor = device_scale_factor;
5371 inputs.can_adjust_raster_scales = true; 5345 inputs.can_adjust_raster_scales = true;
5372 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 5346 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
5373 5347
5374 // We should have two render surfaces. The root's render surface and child's 5348 // We should have two render surfaces. The root's render surface and child's
5375 // render surface (it needs one because it has a replica layer). 5349 // render surface (it needs one because it has a replica layer).
5376 EXPECT_EQ(2u, render_surface_layer_list.size()); 5350 EXPECT_EQ(2u, render_surface_layer_list.size());
5377 5351
5378 gfx::Transform expected_parent_transform; 5352 gfx::Transform expected_parent_transform;
5353 expected_parent_transform.Scale(device_scale_factor, device_scale_factor);
5379 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 5354 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
5380 parent->screen_space_transform()); 5355 parent->screen_space_transform());
5381 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform, 5356 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_parent_transform,
5382 parent->draw_transform()); 5357 parent->draw_transform());
5383 5358
5384 gfx::Transform expected_draw_transform; 5359 gfx::Transform expected_draw_transform;
5360 expected_draw_transform.Scale(device_scale_factor, device_scale_factor);
5385 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_draw_transform, 5361 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_draw_transform,
5386 child->draw_transform()); 5362 child->draw_transform());
5387 5363
5388 gfx::Transform expected_screen_space_transform; 5364 gfx::Transform expected_screen_space_transform;
5389 expected_screen_space_transform.Translate( 5365 expected_screen_space_transform.Translate(
5390 device_scale_factor * child->position().x(), 5366 device_scale_factor * child->position().x(),
5391 device_scale_factor * child->position().y()); 5367 device_scale_factor * child->position().y());
5368 expected_screen_space_transform.Scale(device_scale_factor,
5369 device_scale_factor);
5392 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_screen_space_transform, 5370 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_screen_space_transform,
5393 child->screen_space_transform()); 5371 child->screen_space_transform());
5394 5372
5395 gfx::Transform expected_duplicate_child_draw_transform = 5373 gfx::Transform expected_duplicate_child_draw_transform =
5396 child->draw_transform(); 5374 child->draw_transform();
5397 EXPECT_TRANSFORMATION_MATRIX_EQ(child->draw_transform(), 5375 EXPECT_TRANSFORMATION_MATRIX_EQ(child->draw_transform(),
5398 duplicate_child_non_owner->draw_transform()); 5376 duplicate_child_non_owner->draw_transform());
5399 EXPECT_TRANSFORMATION_MATRIX_EQ( 5377 EXPECT_TRANSFORMATION_MATRIX_EQ(
5400 child->screen_space_transform(), 5378 child->screen_space_transform(),
5401 duplicate_child_non_owner->screen_space_transform()); 5379 duplicate_child_non_owner->screen_space_transform());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
5442 EXPECT_TRANSFORMATION_MATRIX_EQ( 5420 EXPECT_TRANSFORMATION_MATRIX_EQ(
5443 expected_replica_screen_space_transform, 5421 expected_replica_screen_space_transform,
5444 child->render_surface()->replica_screen_space_transform()); 5422 child->render_surface()->replica_screen_space_transform());
5445 } 5423 }
5446 5424
5447 TEST_F(LayerTreeHostCommonTest, 5425 TEST_F(LayerTreeHostCommonTest,
5448 RenderSurfaceTransformsInHighDPIAccurateScaleZeroPosition) { 5426 RenderSurfaceTransformsInHighDPIAccurateScaleZeroPosition) {
5449 MockContentLayerClient delegate; 5427 MockContentLayerClient delegate;
5450 gfx::Transform identity_matrix; 5428 gfx::Transform identity_matrix;
5451 5429
5452 scoped_refptr<ContentLayer> parent = CreateDrawableContentLayer(&delegate); 5430 scoped_refptr<FakePictureLayer> parent =
5431 CreateDrawablePictureLayer(&delegate);
5453 SetLayerPropertiesForTesting(parent.get(), 5432 SetLayerPropertiesForTesting(parent.get(),
5454 identity_matrix, 5433 identity_matrix,
5455 gfx::Point3F(), 5434 gfx::Point3F(),
5456 gfx::PointF(), 5435 gfx::PointF(),
5457 gfx::Size(33, 31), 5436 gfx::Size(33, 31),
5458 false, 5437 false,
5459 true); 5438 true);
5460 5439
5461 scoped_refptr<ContentLayer> child = CreateDrawableContentLayer(&delegate); 5440 scoped_refptr<FakePictureLayer> child = CreateDrawablePictureLayer(&delegate);
5462 SetLayerPropertiesForTesting(child.get(), 5441 SetLayerPropertiesForTesting(child.get(),
5463 identity_matrix, 5442 identity_matrix,
5464 gfx::Point3F(), 5443 gfx::Point3F(),
5465 gfx::PointF(), 5444 gfx::PointF(),
5466 gfx::Size(13, 11), 5445 gfx::Size(13, 11),
5467 false, 5446 false,
5468 true); 5447 true);
5469 5448
5470 gfx::Transform replica_transform; 5449 gfx::Transform replica_transform;
5471 replica_transform.Scale(1.0, -1.0); 5450 replica_transform.Scale(1.0, -1.0);
5472 scoped_refptr<ContentLayer> replica = CreateDrawableContentLayer(&delegate); 5451 scoped_refptr<FakePictureLayer> replica =
5452 CreateDrawablePictureLayer(&delegate);
5473 SetLayerPropertiesForTesting(replica.get(), 5453 SetLayerPropertiesForTesting(replica.get(),
5474 replica_transform, 5454 replica_transform,
5475 gfx::Point3F(), 5455 gfx::Point3F(),
5476 gfx::PointF(), 5456 gfx::PointF(),
5477 gfx::Size(13, 11), 5457 gfx::Size(13, 11),
5478 false, 5458 false,
5479 true); 5459 true);
5480 5460
5481 // This layer should end up in the same surface as child, with the same draw 5461 // This layer should end up in the same surface as child, with the same draw
5482 // and screen space transforms. 5462 // and screen space transforms.
5483 scoped_refptr<ContentLayer> duplicate_child_non_owner = 5463 scoped_refptr<FakePictureLayer> duplicate_child_non_owner =
5484 CreateDrawableContentLayer(&delegate); 5464 CreateDrawablePictureLayer(&delegate);
5485 SetLayerPropertiesForTesting(duplicate_child_non_owner.get(), 5465 SetLayerPropertiesForTesting(duplicate_child_non_owner.get(),
5486 identity_matrix, 5466 identity_matrix,
5487 gfx::Point3F(), 5467 gfx::Point3F(),
5488 gfx::PointF(), 5468 gfx::PointF(),
5489 gfx::Size(13, 11), 5469 gfx::Size(13, 11),
5490 false, 5470 false,
5491 true); 5471 true);
5492 5472
5493 parent->AddChild(child); 5473 parent->AddChild(child);
5494 child->AddChild(duplicate_child_non_owner); 5474 child->AddChild(duplicate_child_non_owner);
5495 child->SetReplicaLayer(replica.get()); 5475 child->SetReplicaLayer(replica.get());
5496 5476
5497 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 5477 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
5498 host->SetRootLayer(parent); 5478 host->SetRootLayer(parent);
5499 5479
5500 float device_scale_factor = 1.7f; 5480 float device_scale_factor = 1.7f;
5501 5481
5502 RenderSurfaceLayerList render_surface_layer_list; 5482 RenderSurfaceLayerList render_surface_layer_list;
5503 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 5483 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
5504 parent.get(), parent->bounds(), &render_surface_layer_list); 5484 parent.get(), parent->bounds(), &render_surface_layer_list);
5505 inputs.device_scale_factor = device_scale_factor; 5485 inputs.device_scale_factor = device_scale_factor;
5506 inputs.can_adjust_raster_scales = true; 5486 inputs.can_adjust_raster_scales = true;
5507 LayerTreeHostCommon::CalculateDrawProperties(&inputs); 5487 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
5508 5488
5509 // We should have two render surfaces. The root's render surface and child's 5489 // We should have two render surfaces. The root's render surface and child's
5510 // render surface (it needs one because it has a replica layer). 5490 // render surface (it needs one because it has a replica layer).
5511 EXPECT_EQ(2u, render_surface_layer_list.size()); 5491 EXPECT_EQ(2u, render_surface_layer_list.size());
5512 5492
5513 gfx::Transform identity_transform; 5493 gfx::Transform transform;
5514 5494 transform.Scale(device_scale_factor, device_scale_factor);
5515 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, 5495 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, parent->screen_space_transform());
5516 parent->screen_space_transform()); 5496 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, parent->draw_transform());
5517 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, parent->draw_transform()); 5497 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, child->draw_transform());
5518 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, child->draw_transform()); 5498 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, child->screen_space_transform());
5519 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, 5499 EXPECT_TRANSFORMATION_MATRIX_EQ(transform,
5520 child->screen_space_transform());
5521 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform,
5522 duplicate_child_non_owner->draw_transform()); 5500 duplicate_child_non_owner->draw_transform());
5523 EXPECT_TRANSFORMATION_MATRIX_EQ( 5501 EXPECT_TRANSFORMATION_MATRIX_EQ(
5524 identity_transform, duplicate_child_non_owner->screen_space_transform()); 5502 transform, duplicate_child_non_owner->screen_space_transform());
5525 EXPECT_RECT_EQ(child->drawable_content_rect(), 5503 EXPECT_RECT_EQ(child->drawable_content_rect(),
5526 duplicate_child_non_owner->drawable_content_rect()); 5504 duplicate_child_non_owner->drawable_content_rect());
5527 EXPECT_EQ(child->content_bounds(), 5505 EXPECT_EQ(child->content_bounds(),
5528 duplicate_child_non_owner->content_bounds()); 5506 duplicate_child_non_owner->content_bounds());
5529 5507
5508 gfx::Transform identity_transform;
5530 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, 5509 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform,
5531 child->render_surface()->draw_transform()); 5510 child->render_surface()->draw_transform());
5532 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform, 5511 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_transform,
5533 child->render_surface()->draw_transform()); 5512 child->render_surface()->draw_transform());
5534 EXPECT_TRANSFORMATION_MATRIX_EQ( 5513 EXPECT_TRANSFORMATION_MATRIX_EQ(
5535 identity_transform, child->render_surface()->screen_space_transform()); 5514 identity_transform, child->render_surface()->screen_space_transform());
5536 5515
5537 gfx::Transform expected_replica_draw_transform; 5516 gfx::Transform expected_replica_draw_transform;
5538 expected_replica_draw_transform.matrix().set(1, 1, -1.0); 5517 expected_replica_draw_transform.matrix().set(1, 1, -1.0);
5539 EXPECT_TRANSFORMATION_MATRIX_EQ( 5518 EXPECT_TRANSFORMATION_MATRIX_EQ(
(...skipping 3069 matching lines...) Expand 10 before | Expand all | Expand 10 after
8609 // by the viewport. 8588 // by the viewport.
8610 EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), root->visible_content_rect()); 8589 EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), root->visible_content_rect());
8611 8590
8612 // Layers drawing to a child render surface should still have their visible 8591 // Layers drawing to a child render surface should still have their visible
8613 // content rect clipped by the viewport. 8592 // content rect clipped by the viewport.
8614 EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), content->visible_content_rect()); 8593 EXPECT_EQ(gfx::Rect(768 / 2, 582 / 2), content->visible_content_rect());
8615 } 8594 }
8616 8595
8617 } // namespace 8596 } // namespace
8618 } // namespace cc 8597 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698