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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "cc/layer.h" | 7 #include "cc/layer.h" |
8 | 8 |
9 #include "cc/keyframed_animation_curve.h" | 9 #include "cc/keyframed_animation_curve.h" |
10 #include "cc/layer_impl.h" | 10 #include "cc/layer_impl.h" |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 TEST_F(LayerTest, checkSetNeedsDisplayCausesCorrectBehavior) | 412 TEST_F(LayerTest, checkSetNeedsDisplayCausesCorrectBehavior) |
413 { | 413 { |
414 // The semantics for setNeedsDisplay which are tested here: | 414 // The semantics for setNeedsDisplay which are tested here: |
415 // 1. sets needsDisplay flag appropriately. | 415 // 1. sets needsDisplay flag appropriately. |
416 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe
edsDisplay. | 416 // 2. indirectly calls setNeedsCommit, exactly once for each call to setNe
edsDisplay. |
417 | 417 |
418 scoped_refptr<Layer> testLayer = Layer::create(); | 418 scoped_refptr<Layer> testLayer = Layer::create(); |
419 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 419 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
420 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 420 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); |
421 | 421 |
422 IntSize testBounds = IntSize(501, 508); | 422 gfx::Size testBounds = gfx::Size(501, 508); |
423 | 423 |
424 FloatRect dirty1 = FloatRect(10, 15, 1, 2); | 424 gfx::RectF dirty1 = gfx::RectF(10, 15, 1, 2); |
425 FloatRect dirty2 = FloatRect(20, 25, 3, 4); | 425 gfx::RectF dirty2 = gfx::RectF(20, 25, 3, 4); |
426 FloatRect emptyDirtyRect = FloatRect(40, 45, 0, 0); | 426 gfx::RectF emptyDirtyRect = gfx::RectF(40, 45, 0, 0); |
427 FloatRect outOfBoundsDirtyRect = FloatRect(400, 405, 500, 502); | 427 gfx::RectF outOfBoundsDirtyRect = gfx::RectF(400, 405, 500, 502); |
428 | 428 |
429 // Before anything, testLayer should not be dirty. | 429 // Before anything, testLayer should not be dirty. |
430 EXPECT_FALSE(testLayer->needsDisplay()); | 430 EXPECT_FALSE(testLayer->needsDisplay()); |
431 | 431 |
432 // This is just initialization, but setNeedsCommit behavior is verified anyw
ay to avoid warnings. | 432 // This is just initialization, but setNeedsCommit behavior is verified anyw
ay to avoid warnings. |
433 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou
nds)); | 433 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(testBou
nds)); |
434 testLayer = Layer::create(); | 434 testLayer = Layer::create(); |
435 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 435 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
436 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 436 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); |
437 EXPECT_FALSE(testLayer->needsDisplay()); | 437 EXPECT_FALSE(testLayer->needsDisplay()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 scoped_refptr<Layer> testLayer = Layer::create(); | 479 scoped_refptr<Layer> testLayer = Layer::create(); |
480 testLayer->setLayerTreeHost(m_layerTreeHost.get()); | 480 testLayer->setLayerTreeHost(m_layerTreeHost.get()); |
481 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); | 481 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setIsDrawable(tru
e)); |
482 | 482 |
483 scoped_refptr<Layer> dummyLayer = Layer::create(); // just a dummy layer for
this test case. | 483 scoped_refptr<Layer> dummyLayer = Layer::create(); // just a dummy layer for
this test case. |
484 | 484 |
485 // sanity check of initial test condition | 485 // sanity check of initial test condition |
486 EXPECT_FALSE(testLayer->needsDisplay()); | 486 EXPECT_FALSE(testLayer->needsDisplay()); |
487 | 487 |
488 // Test properties that should not call needsDisplay and needsCommit when ch
anged. | 488 // Test properties that should not call needsDisplay and needsCommit when ch
anged. |
489 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setVisibleContent
Rect(IntRect(0, 0, 40, 50))); | 489 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setVisibleContent
Rect(gfx::Rect(0, 0, 40, 50))); |
490 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setUseLCDText(tru
e)); | 490 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setUseLCDText(tru
e)); |
491 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawOpacity(0.
5)); | 491 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawOpacity(0.
5)); |
492 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setRenderTarget(0
)); | 492 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setRenderTarget(0
)); |
493 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawTransform(
WebTransformationMatrix())); | 493 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawTransform(
WebTransformationMatrix())); |
494 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setScreenSpaceTra
nsform(WebTransformationMatrix())); | 494 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setScreenSpaceTra
nsform(WebTransformationMatrix())); |
495 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawableConten
tRect(IntRect(4, 5, 6, 7))); | 495 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(0, testLayer->setDrawableConten
tRect(gfx::Rect(4, 5, 6, 7))); |
496 EXPECT_FALSE(testLayer->needsDisplay()); | 496 EXPECT_FALSE(testLayer->needsDisplay()); |
497 | 497 |
498 // Next, test properties that should call setNeedsCommit (but not setNeedsDi
splay) | 498 // Next, test properties that should call setNeedsCommit (but not setNeedsDi
splay) |
499 // All properties need to be set to new values in order for setNeedsCommit t
o be called. | 499 // All properties need to be set to new values in order for setNeedsCommit t
o be called. |
500 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPoint(Fl
oatPoint(1.23f, 4.56f))); | 500 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPoint(gf
x::PointF(1.23f, 4.56f))); |
501 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPointZ(0
.7f)); | 501 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setAnchorPointZ(0
.7f)); |
502 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBackgroundColo
r(SK_ColorLTGRAY)); | 502 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBackgroundColo
r(SK_ColorLTGRAY)); |
503 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMasksToBounds(
true)); | 503 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMasksToBounds(
true)); |
504 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMaskLayer(dumm
yLayer.get())); | 504 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setMaskLayer(dumm
yLayer.get())); |
505 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setOpacity(0.5)); | 505 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setOpacity(0.5)); |
506 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setContentsOpaque
(true)); | 506 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setContentsOpaque
(true)); |
507 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setPosition(Float
Point(4, 9))); | 507 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setPosition(gfx::
PointF(4, 9))); |
508 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setReplicaLayer(d
ummyLayer.get())); | 508 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setReplicaLayer(d
ummyLayer.get())); |
509 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setSublayerTransf
orm(WebTransformationMatrix(0, 0, 0, 0, 0, 0))); | 509 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setSublayerTransf
orm(WebTransformationMatrix(0, 0, 0, 0, 0, 0))); |
510 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollable(tru
e)); | 510 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollable(tru
e)); |
511 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setShouldScrollOn
MainThread(true)); | 511 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setShouldScrollOn
MainThread(true)); |
512 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNonFastScrolla
bleRegion(Region(IntRect(1, 1, 2, 2)))); | 512 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setNonFastScrolla
bleRegion(Region(IntRect(1, 1, 2, 2)))); |
513 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setHaveWheelEvent
Handlers(true)); | 513 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setHaveWheelEvent
Handlers(true)); |
514 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollPosition
(IntPoint(10, 10))); | 514 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setScrollPosition
(IntPoint(10, 10))); |
515 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setTransform(WebT
ransformationMatrix(0, 0, 0, 0, 0, 0))); | 515 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setTransform(WebT
ransformationMatrix(0, 0, 0, 0, 0, 0))); |
516 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDoubleSided(fa
lse)); | 516 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDoubleSided(fa
lse)); |
517 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDebugName("Tes
t Layer")); | 517 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDebugName("Tes
t Layer")); |
518 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDrawCheckerboa
rdForMissingTiles(!testLayer->drawCheckerboardForMissingTiles())); | 518 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setDrawCheckerboa
rdForMissingTiles(!testLayer->drawCheckerboardForMissingTiles())); |
519 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setForceRenderSur
face(true)); | 519 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setForceRenderSur
face(true)); |
520 | 520 |
521 // The above tests should not have caused a change to the needsDisplay flag. | 521 // The above tests should not have caused a change to the needsDisplay flag. |
522 EXPECT_FALSE(testLayer->needsDisplay()); | 522 EXPECT_FALSE(testLayer->needsDisplay()); |
523 | 523 |
524 // Test properties that should call setNeedsDisplay and setNeedsCommit | 524 // Test properties that should call setNeedsDisplay and setNeedsCommit |
525 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(IntSize
(5, 10))); | 525 EXECUTE_AND_VERIFY_SET_NEEDS_COMMIT_BEHAVIOR(1, testLayer->setBounds(gfx::Si
ze(5, 10))); |
526 EXPECT_TRUE(testLayer->needsDisplay()); | 526 EXPECT_TRUE(testLayer->needsDisplay()); |
527 } | 527 } |
528 | 528 |
529 TEST_F(LayerTest, verifyPushPropertiesAccumulatesUpdateRect) | 529 TEST_F(LayerTest, verifyPushPropertiesAccumulatesUpdateRect) |
530 { | 530 { |
531 DebugScopedSetImplThread setImplThread; | 531 DebugScopedSetImplThread setImplThread; |
532 | 532 |
533 scoped_refptr<Layer> testLayer = Layer::create(); | 533 scoped_refptr<Layer> testLayer = Layer::create(); |
534 scoped_ptr<LayerImpl> implLayer = LayerImpl::create(1); | 534 scoped_ptr<LayerImpl> implLayer = LayerImpl::create(1); |
535 | 535 |
536 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint::zero(), FloatSize(5, 5)
)); | 536 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(), gfx::SizeF(5, 5))); |
537 testLayer->pushPropertiesTo(implLayer.get()); | 537 testLayer->pushPropertiesTo(implLayer.get()); |
538 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(5, 5)), implLay
er->updateRect()); | 538 EXPECT_FLOAT_RECT_EQ(gfx::RectF(gfx::PointF(), gfx::SizeF(5, 5)), implLayer-
>updateRect()); |
539 | 539 |
540 // The LayerImpl's updateRect should be accumulated here, since we did not d
o anything to clear it. | 540 // The LayerImpl's updateRect should be accumulated here, since we did not d
o anything to clear it. |
541 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5)
)); | 541 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5,
5))); |
542 testLayer->pushPropertiesTo(implLayer.get()); | 542 testLayer->pushPropertiesTo(implLayer.get()); |
543 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint::zero(), FloatSize(15, 15)), implL
ayer->updateRect()); | 543 EXPECT_FLOAT_RECT_EQ(gfx::RectF(gfx::PointF(), gfx::SizeF(15, 15)), implLaye
r->updateRect()); |
544 | 544 |
545 // If we do clear the LayerImpl side, then the next updateRect should be fre
sh without accumulation. | 545 // If we do clear the LayerImpl side, then the next updateRect should be fre
sh without accumulation. |
546 implLayer->resetAllChangeTrackingForSubtree(); | 546 implLayer->resetAllChangeTrackingForSubtree(); |
547 testLayer->setNeedsDisplayRect(FloatRect(FloatPoint(10, 10), FloatSize(5, 5)
)); | 547 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5,
5))); |
548 testLayer->pushPropertiesTo(implLayer.get()); | 548 testLayer->pushPropertiesTo(implLayer.get()); |
549 EXPECT_FLOAT_RECT_EQ(FloatRect(FloatPoint(10, 10), FloatSize(5, 5)), implLay
er->updateRect()); | 549 EXPECT_FLOAT_RECT_EQ(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5, 5)), impl
Layer->updateRect()); |
550 } | 550 } |
551 | 551 |
552 class FakeLayerImplTreeHost : public LayerTreeHost { | 552 class FakeLayerImplTreeHost : public LayerTreeHost { |
553 public: | 553 public: |
554 static scoped_ptr<FakeLayerImplTreeHost> create() | 554 static scoped_ptr<FakeLayerImplTreeHost> create() |
555 { | 555 { |
556 scoped_ptr<FakeLayerImplTreeHost> host(new FakeLayerImplTreeHost); | 556 scoped_ptr<FakeLayerImplTreeHost> host(new FakeLayerImplTreeHost); |
557 // The initialize call will fail, since our client doesn't provide a val
id GraphicsContext3D, but it doesn't matter in the tests that use this fake so i
gnore the return value. | 557 // The initialize call will fail, since our client doesn't provide a val
id GraphicsContext3D, but it doesn't matter in the tests that use this fake so i
gnore the return value. |
558 host->initialize(); | 558 host->initialize(); |
559 return host.Pass(); | 559 return host.Pass(); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 private: | 785 private: |
786 virtual ~MockLayer() | 786 virtual ~MockLayer() |
787 { | 787 { |
788 } | 788 } |
789 }; | 789 }; |
790 | 790 |
791 TEST(LayerTestWithoutFixture, setBoundsTriggersSetNeedsRedrawAfterGettingNonEmpt
yBounds) | 791 TEST(LayerTestWithoutFixture, setBoundsTriggersSetNeedsRedrawAfterGettingNonEmpt
yBounds) |
792 { | 792 { |
793 scoped_refptr<MockLayer> layer(new MockLayer); | 793 scoped_refptr<MockLayer> layer(new MockLayer); |
794 EXPECT_FALSE(layer->needsDisplay()); | 794 EXPECT_FALSE(layer->needsDisplay()); |
795 layer->setBounds(IntSize(0, 10)); | 795 layer->setBounds(gfx::Size(0, 10)); |
796 EXPECT_FALSE(layer->needsDisplay()); | 796 EXPECT_FALSE(layer->needsDisplay()); |
797 layer->setBounds(IntSize(10, 10)); | 797 layer->setBounds(gfx::Size(10, 10)); |
798 EXPECT_TRUE(layer->needsDisplay()); | 798 EXPECT_TRUE(layer->needsDisplay()); |
799 } | 799 } |
800 | 800 |
801 | 801 |
802 } // namespace | 802 } // namespace |
OLD | NEW |