OLD | NEW |
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 <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "cc/animation/layer_animation_controller.h" | 10 #include "cc/animation/layer_animation_controller.h" |
(...skipping 1165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1176 true, | 1176 true, |
1177 false); | 1177 false); |
1178 | 1178 |
1179 gfx::Transform translate; | 1179 gfx::Transform translate; |
1180 translate.Translate(50, 50); | 1180 translate.Translate(50, 50); |
1181 { | 1181 { |
1182 RenderSurfaceLayerList render_surface_layer_list; | 1182 RenderSurfaceLayerList render_surface_layer_list; |
1183 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1183 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1184 root.get(), root->bounds(), translate, &render_surface_layer_list); | 1184 root.get(), root->bounds(), translate, &render_surface_layer_list); |
1185 inputs.can_adjust_raster_scales = true; | 1185 inputs.can_adjust_raster_scales = true; |
| 1186 inputs.property_trees->needs_rebuild = true; |
1186 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1187 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1187 EXPECT_EQ(translate, root->draw_properties().target_space_transform); | 1188 EXPECT_EQ(translate, root->draw_properties().target_space_transform); |
1188 EXPECT_EQ(translate, child->draw_properties().target_space_transform); | 1189 EXPECT_EQ(translate, child->draw_properties().target_space_transform); |
1189 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1190 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1190 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); | 1191 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); |
1191 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); | 1192 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); |
1192 } | 1193 } |
1193 | 1194 |
1194 gfx::Transform scale; | 1195 gfx::Transform scale; |
1195 scale.Scale(2, 2); | 1196 scale.Scale(2, 2); |
1196 { | 1197 { |
1197 RenderSurfaceLayerList render_surface_layer_list; | 1198 RenderSurfaceLayerList render_surface_layer_list; |
1198 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1199 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1199 root.get(), root->bounds(), scale, &render_surface_layer_list); | 1200 root.get(), root->bounds(), scale, &render_surface_layer_list); |
1200 inputs.can_adjust_raster_scales = true; | 1201 inputs.can_adjust_raster_scales = true; |
| 1202 inputs.property_trees->needs_rebuild = true; |
1201 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1203 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1202 EXPECT_EQ(scale, root->draw_properties().target_space_transform); | 1204 EXPECT_EQ(scale, root->draw_properties().target_space_transform); |
1203 EXPECT_EQ(scale, child->draw_properties().target_space_transform); | 1205 EXPECT_EQ(scale, child->draw_properties().target_space_transform); |
1204 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1206 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1205 EXPECT_EQ(2.f, root->draw_properties().device_scale_factor); | 1207 EXPECT_EQ(2.f, root->draw_properties().device_scale_factor); |
1206 EXPECT_EQ(2.f, child->draw_properties().device_scale_factor); | 1208 EXPECT_EQ(2.f, child->draw_properties().device_scale_factor); |
1207 } | 1209 } |
1208 | 1210 |
1209 gfx::Transform rotate; | 1211 gfx::Transform rotate; |
1210 rotate.Rotate(2); | 1212 rotate.Rotate(2); |
1211 { | 1213 { |
1212 RenderSurfaceLayerList render_surface_layer_list; | 1214 RenderSurfaceLayerList render_surface_layer_list; |
1213 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1215 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1214 root.get(), root->bounds(), rotate, &render_surface_layer_list); | 1216 root.get(), root->bounds(), rotate, &render_surface_layer_list); |
1215 inputs.can_adjust_raster_scales = true; | 1217 inputs.can_adjust_raster_scales = true; |
| 1218 inputs.property_trees->needs_rebuild = true; |
1216 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1219 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1217 EXPECT_EQ(rotate, root->draw_properties().target_space_transform); | 1220 EXPECT_EQ(rotate, root->draw_properties().target_space_transform); |
1218 EXPECT_EQ(rotate, child->draw_properties().target_space_transform); | 1221 EXPECT_EQ(rotate, child->draw_properties().target_space_transform); |
1219 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1222 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1220 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); | 1223 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); |
1221 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); | 1224 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); |
1222 } | 1225 } |
1223 | 1226 |
1224 gfx::Transform composite; | 1227 gfx::Transform composite; |
1225 composite.ConcatTransform(translate); | 1228 composite.ConcatTransform(translate); |
1226 composite.ConcatTransform(scale); | 1229 composite.ConcatTransform(scale); |
1227 composite.ConcatTransform(rotate); | 1230 composite.ConcatTransform(rotate); |
1228 { | 1231 { |
1229 RenderSurfaceLayerList render_surface_layer_list; | 1232 RenderSurfaceLayerList render_surface_layer_list; |
1230 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1233 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1231 root.get(), root->bounds(), composite, &render_surface_layer_list); | 1234 root.get(), root->bounds(), composite, &render_surface_layer_list); |
1232 inputs.can_adjust_raster_scales = true; | 1235 inputs.can_adjust_raster_scales = true; |
| 1236 inputs.property_trees->needs_rebuild = true; |
1233 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1237 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1234 EXPECT_EQ(composite, root->draw_properties().target_space_transform); | 1238 EXPECT_EQ(composite, root->draw_properties().target_space_transform); |
1235 EXPECT_EQ(composite, child->draw_properties().target_space_transform); | 1239 EXPECT_EQ(composite, child->draw_properties().target_space_transform); |
1236 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1240 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1237 } | 1241 } |
1238 | 1242 |
1239 // Verify it composes correctly with device scale. | 1243 // Verify it composes correctly with device scale. |
1240 float device_scale_factor = 1.5f; | 1244 float device_scale_factor = 1.5f; |
1241 | 1245 |
1242 { | 1246 { |
1243 RenderSurfaceLayerList render_surface_layer_list; | 1247 RenderSurfaceLayerList render_surface_layer_list; |
1244 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1248 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1245 root.get(), root->bounds(), translate, &render_surface_layer_list); | 1249 root.get(), root->bounds(), translate, &render_surface_layer_list); |
1246 inputs.device_scale_factor = device_scale_factor; | 1250 inputs.device_scale_factor = device_scale_factor; |
1247 inputs.can_adjust_raster_scales = true; | 1251 inputs.can_adjust_raster_scales = true; |
| 1252 inputs.property_trees->needs_rebuild = true; |
1248 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1253 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1249 gfx::Transform device_scaled_translate = translate; | 1254 gfx::Transform device_scaled_translate = translate; |
1250 device_scaled_translate.Scale(device_scale_factor, device_scale_factor); | 1255 device_scaled_translate.Scale(device_scale_factor, device_scale_factor); |
1251 EXPECT_EQ(device_scaled_translate, | 1256 EXPECT_EQ(device_scaled_translate, |
1252 root->draw_properties().target_space_transform); | 1257 root->draw_properties().target_space_transform); |
1253 EXPECT_EQ(device_scaled_translate, | 1258 EXPECT_EQ(device_scaled_translate, |
1254 child->draw_properties().target_space_transform); | 1259 child->draw_properties().target_space_transform); |
1255 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1260 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1256 EXPECT_EQ(device_scale_factor, root->draw_properties().device_scale_factor); | 1261 EXPECT_EQ(device_scale_factor, root->draw_properties().device_scale_factor); |
1257 EXPECT_EQ(device_scale_factor, | 1262 EXPECT_EQ(device_scale_factor, |
1258 child->draw_properties().device_scale_factor); | 1263 child->draw_properties().device_scale_factor); |
1259 } | 1264 } |
1260 | 1265 |
1261 // Verify it composes correctly with page scale. | 1266 // Verify it composes correctly with page scale. |
1262 float page_scale_factor = 2.f; | 1267 float page_scale_factor = 2.f; |
1263 | 1268 |
1264 { | 1269 { |
1265 RenderSurfaceLayerList render_surface_layer_list; | 1270 RenderSurfaceLayerList render_surface_layer_list; |
1266 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 1271 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
1267 root.get(), root->bounds(), translate, &render_surface_layer_list); | 1272 root.get(), root->bounds(), translate, &render_surface_layer_list); |
1268 inputs.page_scale_factor = page_scale_factor; | 1273 inputs.page_scale_factor = page_scale_factor; |
1269 inputs.page_scale_application_layer = root.get(); | 1274 inputs.page_scale_application_layer = root.get(); |
1270 inputs.can_adjust_raster_scales = true; | 1275 inputs.can_adjust_raster_scales = true; |
| 1276 inputs.property_trees->needs_rebuild = true; |
1271 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 1277 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
1272 gfx::Transform page_scaled_translate = translate; | 1278 gfx::Transform page_scaled_translate = translate; |
1273 page_scaled_translate.Scale(page_scale_factor, page_scale_factor); | 1279 page_scaled_translate.Scale(page_scale_factor, page_scale_factor); |
1274 EXPECT_EQ(translate, root->draw_properties().target_space_transform); | 1280 EXPECT_EQ(translate, root->draw_properties().target_space_transform); |
1275 EXPECT_EQ(page_scaled_translate, | 1281 EXPECT_EQ(page_scaled_translate, |
1276 child->draw_properties().target_space_transform); | 1282 child->draw_properties().target_space_transform); |
1277 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); | 1283 EXPECT_EQ(identity_matrix, root->render_surface()->draw_transform()); |
1278 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); | 1284 EXPECT_EQ(1.f, root->draw_properties().device_scale_factor); |
1279 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); | 1285 EXPECT_EQ(1.f, child->draw_properties().device_scale_factor); |
1280 } | 1286 } |
(...skipping 3415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4696 page_scale_factor = 1.25f; | 4702 page_scale_factor = 1.25f; |
4697 | 4703 |
4698 { | 4704 { |
4699 RenderSurfaceLayerList render_surface_layer_list; | 4705 RenderSurfaceLayerList render_surface_layer_list; |
4700 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 4706 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
4701 root.get(), root->bounds(), &render_surface_layer_list); | 4707 root.get(), root->bounds(), &render_surface_layer_list); |
4702 inputs.device_scale_factor = device_scale_factor; | 4708 inputs.device_scale_factor = device_scale_factor; |
4703 inputs.page_scale_factor = page_scale_factor; | 4709 inputs.page_scale_factor = page_scale_factor; |
4704 inputs.page_scale_application_layer = root.get(); | 4710 inputs.page_scale_application_layer = root.get(); |
4705 inputs.can_adjust_raster_scales = true; | 4711 inputs.can_adjust_raster_scales = true; |
| 4712 inputs.property_trees->needs_rebuild = true; |
4706 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 4713 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
4707 | 4714 |
4708 EXPECT_CONTENTS_SCALE_EQ( | 4715 EXPECT_CONTENTS_SCALE_EQ( |
4709 device_scale_factor * page_scale_factor * initial_parent_scale, parent); | 4716 device_scale_factor * page_scale_factor * initial_parent_scale, parent); |
4710 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * | 4717 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * |
4711 initial_parent_scale * initial_child_scale, | 4718 initial_parent_scale * initial_child_scale, |
4712 child_scale); | 4719 child_scale); |
4713 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * | 4720 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * |
4714 initial_parent_scale * initial_child_scale, | 4721 initial_parent_scale * initial_child_scale, |
4715 child_empty); | 4722 child_empty); |
4716 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); | 4723 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); |
4717 } | 4724 } |
4718 | 4725 |
4719 // If the transform changes, we expect the raster scale to be reset to 1.0. | 4726 // If the transform changes, we expect the raster scale to be reset to 1.0. |
4720 SkMScalar second_child_scale = 1.75; | 4727 SkMScalar second_child_scale = 1.75; |
4721 child_scale_matrix.Scale(second_child_scale / initial_child_scale, | 4728 child_scale_matrix.Scale(second_child_scale / initial_child_scale, |
4722 second_child_scale / initial_child_scale); | 4729 second_child_scale / initial_child_scale); |
4723 child_scale->SetTransform(child_scale_matrix); | 4730 child_scale->SetTransform(child_scale_matrix); |
4724 child_empty->SetTransform(child_scale_matrix); | 4731 child_empty->SetTransform(child_scale_matrix); |
4725 | 4732 |
4726 { | 4733 { |
4727 RenderSurfaceLayerList render_surface_layer_list; | 4734 RenderSurfaceLayerList render_surface_layer_list; |
4728 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 4735 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
4729 root.get(), root->bounds(), &render_surface_layer_list); | 4736 root.get(), root->bounds(), &render_surface_layer_list); |
4730 inputs.device_scale_factor = device_scale_factor; | 4737 inputs.device_scale_factor = device_scale_factor; |
4731 inputs.page_scale_factor = page_scale_factor; | 4738 inputs.page_scale_factor = page_scale_factor; |
4732 inputs.page_scale_application_layer = root.get(); | 4739 inputs.page_scale_application_layer = root.get(); |
4733 inputs.can_adjust_raster_scales = true; | 4740 inputs.can_adjust_raster_scales = true; |
| 4741 inputs.property_trees->needs_rebuild = true; |
4734 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 4742 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
4735 | 4743 |
4736 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * | 4744 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * |
4737 initial_parent_scale, | 4745 initial_parent_scale, |
4738 parent); | 4746 parent); |
4739 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, | 4747 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, |
4740 child_scale); | 4748 child_scale); |
4741 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, | 4749 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, |
4742 child_empty); | 4750 child_empty); |
4743 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); | 4751 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); |
4744 } | 4752 } |
4745 | 4753 |
4746 // If the device_scale_factor or page_scale_factor changes, then it should be | 4754 // If the device_scale_factor or page_scale_factor changes, then it should be |
4747 // updated, but still using 1.0 as the raster scale. | 4755 // updated, but still using 1.0 as the raster scale. |
4748 device_scale_factor = 2.75f; | 4756 device_scale_factor = 2.75f; |
4749 page_scale_factor = 1.75f; | 4757 page_scale_factor = 1.75f; |
4750 | 4758 |
4751 { | 4759 { |
4752 RenderSurfaceLayerList render_surface_layer_list; | 4760 RenderSurfaceLayerList render_surface_layer_list; |
4753 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 4761 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
4754 root.get(), root->bounds(), &render_surface_layer_list); | 4762 root.get(), root->bounds(), &render_surface_layer_list); |
4755 inputs.device_scale_factor = device_scale_factor; | 4763 inputs.device_scale_factor = device_scale_factor; |
4756 inputs.page_scale_factor = page_scale_factor; | 4764 inputs.page_scale_factor = page_scale_factor; |
4757 inputs.page_scale_application_layer = root.get(); | 4765 inputs.page_scale_application_layer = root.get(); |
4758 inputs.can_adjust_raster_scales = true; | 4766 inputs.can_adjust_raster_scales = true; |
| 4767 inputs.property_trees->needs_rebuild = true; |
4759 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 4768 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
4760 | 4769 |
4761 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * | 4770 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor * |
4762 initial_parent_scale, | 4771 initial_parent_scale, |
4763 parent); | 4772 parent); |
4764 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, | 4773 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, |
4765 child_scale); | 4774 child_scale); |
4766 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, | 4775 EXPECT_CONTENTS_SCALE_EQ(device_scale_factor * page_scale_factor, |
4767 child_empty); | 4776 child_empty); |
4768 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); | 4777 EXPECT_CONTENTS_SCALE_EQ(1, child_no_scale); |
(...skipping 4385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9154 | 9163 |
9155 scoped_ptr<FakeLayerTreeHost> host(CreateFakeLayerTreeHost()); | 9164 scoped_ptr<FakeLayerTreeHost> host(CreateFakeLayerTreeHost()); |
9156 host->SetRootLayer(root); | 9165 host->SetRootLayer(root); |
9157 | 9166 |
9158 ExecuteCalculateDrawProperties(root.get()); | 9167 ExecuteCalculateDrawProperties(root.get()); |
9159 | 9168 |
9160 gfx::Rect expected(0, 0, 50, 50); | 9169 gfx::Rect expected(0, 0, 50, 50); |
9161 EXPECT_EQ(expected, fixed->visible_rect_from_property_trees()); | 9170 EXPECT_EQ(expected, fixed->visible_rect_from_property_trees()); |
9162 } | 9171 } |
9163 | 9172 |
| 9173 TEST_F(LayerTreeHostCommonTest, ChangingAxisAlignmentTriggersRebuild) { |
| 9174 gfx::Transform identity; |
| 9175 gfx::Transform translate; |
| 9176 gfx::Transform rotate; |
| 9177 |
| 9178 translate.Translate(10, 10); |
| 9179 rotate.Rotate(45); |
| 9180 |
| 9181 scoped_refptr<Layer> root = Layer::Create(); |
| 9182 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), |
| 9183 gfx::PointF(), gfx::Size(800, 800), true, false); |
| 9184 root->SetIsContainerForFixedPositionLayers(true); |
| 9185 |
| 9186 scoped_ptr<FakeLayerTreeHost> host(CreateFakeLayerTreeHost()); |
| 9187 host->SetRootLayer(root); |
| 9188 |
| 9189 ExecuteCalculateDrawProperties(root.get()); |
| 9190 |
| 9191 root->SetTransform(translate); |
| 9192 EXPECT_FALSE(host->property_trees()->needs_rebuild); |
| 9193 |
| 9194 root->SetTransform(rotate); |
| 9195 EXPECT_TRUE(host->property_trees()->needs_rebuild); |
| 9196 } |
| 9197 |
9164 } // namespace | 9198 } // namespace |
9165 } // namespace cc | 9199 } // namespace cc |
OLD | NEW |