| 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/output/filter_operation.h" | 7 #include "cc/output/filter_operation.h" |
| 8 #include "cc/output/filter_operations.h" | 8 #include "cc/output/filter_operations.h" |
| 9 #include "cc/test/fake_impl_proxy.h" | 9 #include "cc/test/fake_impl_proxy.h" |
| 10 #include "cc/test/fake_layer_tree_host_impl.h" | 10 #include "cc/test/fake_layer_tree_host_impl.h" |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 251 root->SetClipParent(clip_parent.get())); | 251 root->SetClipParent(clip_parent.get())); |
| 252 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 252 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
| 253 root->SetClipChildren(clip_children)); | 253 root->SetClipChildren(clip_children)); |
| 254 } | 254 } |
| 255 | 255 |
| 256 TEST(LayerImplTest, VerifyNeedsUpdateDrawProperties) { | 256 TEST(LayerImplTest, VerifyNeedsUpdateDrawProperties) { |
| 257 FakeImplProxy proxy; | 257 FakeImplProxy proxy; |
| 258 FakeLayerTreeHostImpl host_impl(&proxy); | 258 FakeLayerTreeHostImpl host_impl(&proxy); |
| 259 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); | 259 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); |
| 260 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); | 260 host_impl.active_tree()->SetRootLayer( |
| 261 root->SetScrollable(true); | 261 LayerImpl::Create(host_impl.active_tree(), 1)); |
| 262 LayerImpl* root = host_impl.active_tree()->root_layer(); |
| 263 scoped_ptr<LayerImpl> layer_ptr = |
| 264 LayerImpl::Create(host_impl.active_tree(), 2); |
| 265 LayerImpl* layer = layer_ptr.get(); |
| 266 root->AddChild(layer_ptr.Pass()); |
| 267 layer->SetScrollable(true); |
| 268 DCHECK(host_impl.CanDraw()); |
| 262 | 269 |
| 263 gfx::PointF arbitrary_point_f = gfx::PointF(0.125f, 0.25f); | 270 gfx::PointF arbitrary_point_f = gfx::PointF(0.125f, 0.25f); |
| 264 float arbitrary_number = 0.352f; | 271 float arbitrary_number = 0.352f; |
| 265 gfx::Size arbitrary_size = gfx::Size(111, 222); | 272 gfx::Size arbitrary_size = gfx::Size(111, 222); |
| 266 gfx::Point arbitrary_point = gfx::Point(333, 444); | 273 gfx::Point arbitrary_point = gfx::Point(333, 444); |
| 267 gfx::Vector2d arbitrary_vector2d = gfx::Vector2d(111, 222); | 274 gfx::Vector2d arbitrary_vector2d = gfx::Vector2d(111, 222); |
| 268 gfx::Vector2d large_vector2d = gfx::Vector2d(1000, 1000); | 275 gfx::Vector2d large_vector2d = gfx::Vector2d(1000, 1000); |
| 269 gfx::Rect arbitrary_rect = gfx::Rect(arbitrary_point, arbitrary_size); | 276 gfx::Rect arbitrary_rect = gfx::Rect(arbitrary_point, arbitrary_size); |
| 270 gfx::RectF arbitrary_rect_f = | 277 gfx::RectF arbitrary_rect_f = |
| 271 gfx::RectF(arbitrary_point_f, gfx::SizeF(1.234f, 5.678f)); | 278 gfx::RectF(arbitrary_point_f, gfx::SizeF(1.234f, 5.678f)); |
| 272 SkColor arbitrary_color = SkColorSetRGB(10, 20, 30); | 279 SkColor arbitrary_color = SkColorSetRGB(10, 20, 30); |
| 273 gfx::Transform arbitrary_transform; | 280 gfx::Transform arbitrary_transform; |
| 274 arbitrary_transform.Scale3d(0.1f, 0.2f, 0.3f); | 281 arbitrary_transform.Scale3d(0.1f, 0.2f, 0.3f); |
| 275 FilterOperations arbitrary_filters; | 282 FilterOperations arbitrary_filters; |
| 276 arbitrary_filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); | 283 arbitrary_filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); |
| 277 SkXfermode::Mode arbitrary_blend_mode = SkXfermode::kMultiply_Mode; | 284 SkXfermode::Mode arbitrary_blend_mode = SkXfermode::kMultiply_Mode; |
| 278 | 285 |
| 279 // Related filter functions. | 286 // Related filter functions. |
| 280 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 287 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
| 281 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 288 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
| 282 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(FilterOperations())); | 289 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(FilterOperations())); |
| 283 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 290 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
| 284 | 291 |
| 285 // Related scrolling functions. | 292 // Related scrolling functions. |
| 286 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMaxScrollOffset(large_vector2d)); | 293 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 294 layer->SetMaxScrollOffset(large_vector2d)); |
| 287 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 295 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 288 root->SetMaxScrollOffset(large_vector2d)); | 296 layer->SetMaxScrollOffset(large_vector2d)); |
| 289 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->ScrollBy(arbitrary_vector2d)); | 297 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); |
| 290 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->ScrollBy(gfx::Vector2d())); | 298 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); |
| 291 root->SetScrollDelta(gfx::Vector2d(0, 0)); | 299 layer->SetScrollDelta(gfx::Vector2d(0, 0)); |
| 292 host_impl.ForcePrepareToDraw(); | 300 host_impl.ForcePrepareToDraw(); |
| 293 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetScrollDelta(arbitrary_vector2d)); | 301 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 302 layer->SetScrollDelta(arbitrary_vector2d)); |
| 294 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 303 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 295 root->SetScrollDelta(arbitrary_vector2d)); | 304 layer->SetScrollDelta(arbitrary_vector2d)); |
| 296 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 305 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 297 root->SetScrollOffset(arbitrary_vector2d)); | 306 layer->SetScrollOffset(arbitrary_vector2d)); |
| 298 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 307 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 299 root->SetScrollOffset(arbitrary_vector2d)); | 308 layer->SetScrollOffset(arbitrary_vector2d)); |
| 300 | 309 |
| 301 // Unrelated functions, always set to new values, always set needs update. | 310 // Unrelated functions, always set to new values, always set needs update. |
| 302 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetAnchorPointZ(arbitrary_number)); | 311 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetAnchorPointZ(arbitrary_number)); |
| 303 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 312 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 304 root->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4))); | 313 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4))); |
| 305 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMasksToBounds(true)); | 314 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true)); |
| 306 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentsOpaque(true)); | 315 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true)); |
| 307 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 316 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 308 root->SetReplicaLayer(LayerImpl::Create(host_impl.active_tree(), 5))); | 317 layer->SetReplicaLayer(LayerImpl::Create(host_impl.active_tree(), 5))); |
| 309 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPosition(arbitrary_point_f)); | 318 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPosition(arbitrary_point_f)); |
| 310 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPreserves3d(true)); | 319 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPreserves3d(true)); |
| 311 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 320 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 312 root->SetDoubleSided(false)); // constructor initializes it to "true". | 321 layer->SetDoubleSided(false)); // constructor initializes it to "true". |
| 313 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentBounds(arbitrary_size)); | 322 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentBounds(arbitrary_size)); |
| 314 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 323 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 315 root->SetContentsScale(arbitrary_number, arbitrary_number)); | 324 layer->SetContentsScale(arbitrary_number, arbitrary_number)); |
| 316 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetDrawsContent(true)); | 325 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetDrawsContent(true)); |
| 317 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 326 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 318 root->SetBackgroundColor(arbitrary_color)); | 327 layer->SetBackgroundColor(arbitrary_color)); |
| 319 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 328 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 320 root->SetBackgroundFilters(arbitrary_filters)); | 329 layer->SetBackgroundFilters(arbitrary_filters)); |
| 321 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetOpacity(arbitrary_number)); | 330 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetOpacity(arbitrary_number)); |
| 322 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBlendMode(arbitrary_blend_mode)); | |
| 323 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetTransform(arbitrary_transform)); | |
| 324 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 331 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 325 root->SetSublayerTransform(arbitrary_transform)); | 332 layer->SetBlendMode(arbitrary_blend_mode)); |
| 326 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBounds(arbitrary_size)); | 333 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetTransform(arbitrary_transform)); |
| 334 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 335 layer->SetSublayerTransform(arbitrary_transform)); |
| 336 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(arbitrary_size)); |
| 327 | 337 |
| 328 // Unrelated functions, set to the same values, no needs update. | 338 // Unrelated functions, set to the same values, no needs update. |
| 329 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 339 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 330 root->SetAnchorPointZ(arbitrary_number)); | 340 layer->SetAnchorPointZ(arbitrary_number)); |
| 331 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetIsRootForIsolatedGroup(true)); | |
| 332 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | |
| 333 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMasksToBounds(true)); | |
| 334 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentsOpaque(true)); | |
| 335 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPosition(arbitrary_point_f)); | |
| 336 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPreserves3d(true)); | |
| 337 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 341 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 338 root->SetDoubleSided(false)); // constructor initializes it to "true". | 342 layer->SetIsRootForIsolatedGroup(true)); |
| 343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
| 344 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true)); |
| 345 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true)); |
| 346 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPosition(arbitrary_point_f)); |
| 347 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPreserves3d(true)); |
| 339 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 348 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 340 root->SetContentBounds(arbitrary_size)); | 349 layer->SetDoubleSided(false)); // constructor initializes it to "true". |
| 341 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 350 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 342 root->SetContentsScale(arbitrary_number, arbitrary_number)); | 351 layer->SetContentBounds(arbitrary_size)); |
| 343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetDrawsContent(true)); | |
| 344 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 352 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 345 root->SetBackgroundColor(arbitrary_color)); | 353 layer->SetContentsScale(arbitrary_number, arbitrary_number)); |
| 354 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetDrawsContent(true)); |
| 346 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 355 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 347 root->SetBackgroundFilters(arbitrary_filters)); | 356 layer->SetBackgroundColor(arbitrary_color)); |
| 348 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetOpacity(arbitrary_number)); | |
| 349 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 357 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 350 root->SetBlendMode(arbitrary_blend_mode)); | 358 layer->SetBackgroundFilters(arbitrary_filters)); |
| 351 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetIsRootForIsolatedGroup(true)); | 359 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetOpacity(arbitrary_number)); |
| 352 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 360 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 353 root->SetTransform(arbitrary_transform)); | 361 layer->SetBlendMode(arbitrary_blend_mode)); |
| 354 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 362 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 355 root->SetSublayerTransform(arbitrary_transform)); | 363 layer->SetIsRootForIsolatedGroup(true)); |
| 356 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBounds(arbitrary_size)); | 364 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 365 layer->SetTransform(arbitrary_transform)); |
| 366 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 367 layer->SetSublayerTransform(arbitrary_transform)); |
| 368 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(arbitrary_size)); |
| 357 } | 369 } |
| 358 | 370 |
| 359 TEST(LayerImplTest, SafeOpaqueBackgroundColor) { | 371 TEST(LayerImplTest, SafeOpaqueBackgroundColor) { |
| 360 FakeImplProxy proxy; | 372 FakeImplProxy proxy; |
| 361 FakeLayerTreeHostImpl host_impl(&proxy); | 373 FakeLayerTreeHostImpl host_impl(&proxy); |
| 362 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); | 374 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); |
| 363 scoped_ptr<LayerImpl> layer = LayerImpl::Create(host_impl.active_tree(), 1); | 375 scoped_ptr<LayerImpl> layer = LayerImpl::Create(host_impl.active_tree(), 1); |
| 364 | 376 |
| 365 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) { | 377 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) { |
| 366 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) { | 378 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) { |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 layer()->SetMaxScrollOffset(max_scroll_offset); | 653 layer()->SetMaxScrollOffset(max_scroll_offset); |
| 642 layer()->SetScrollOffset(scroll_offset); | 654 layer()->SetScrollOffset(scroll_offset); |
| 643 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 655 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
| 644 | 656 |
| 645 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); | 657 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); |
| 646 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->TotalScrollOffset()); | 658 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->TotalScrollOffset()); |
| 647 } | 659 } |
| 648 | 660 |
| 649 } // namespace | 661 } // namespace |
| 650 } // namespace cc | 662 } // namespace cc |
| OLD | NEW |