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/layer.h" | 5 #include "cc/layer.h" |
6 | 6 |
7 #include "cc/keyframed_animation_curve.h" | 7 #include "cc/keyframed_animation_curve.h" |
8 #include "cc/layer_impl.h" | 8 #include "cc/layer_impl.h" |
9 #include "cc/layer_painter.h" | 9 #include "cc/layer_painter.h" |
10 #include "cc/layer_tree_host.h" | 10 #include "cc/layer_tree_host.h" |
11 #include "cc/settings.h" | |
12 #include "cc/single_thread_proxy.h" | 11 #include "cc/single_thread_proxy.h" |
13 #include "cc/thread.h" | 12 #include "cc/thread.h" |
14 #include "cc/test/fake_layer_tree_host_client.h" | 13 #include "cc/test/fake_layer_tree_host_client.h" |
15 #include "cc/test/geometry_test_utils.h" | 14 #include "cc/test/geometry_test_utils.h" |
16 #include "cc/test/test_common.h" | |
17 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
19 #include <public/WebTransformationMatrix.h> | 17 #include <public/WebTransformationMatrix.h> |
20 | 18 |
21 using namespace WebKitTests; | 19 using namespace WebKitTests; |
22 using WebKit::WebTransformationMatrix; | 20 using WebKit::WebTransformationMatrix; |
23 using ::testing::Mock; | 21 using ::testing::Mock; |
24 using ::testing::_; | 22 using ::testing::_; |
25 using ::testing::AtLeast; | 23 using ::testing::AtLeast; |
26 using ::testing::AnyNumber; | 24 using ::testing::AnyNumber; |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 | 539 |
542 // If we do clear the LayerImpl side, then the next updateRect should be fre
sh without accumulation. | 540 // If we do clear the LayerImpl side, then the next updateRect should be fre
sh without accumulation. |
543 implLayer->resetAllChangeTrackingForSubtree(); | 541 implLayer->resetAllChangeTrackingForSubtree(); |
544 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5,
5))); | 542 testLayer->setNeedsDisplayRect(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5,
5))); |
545 testLayer->pushPropertiesTo(implLayer.get()); | 543 testLayer->pushPropertiesTo(implLayer.get()); |
546 EXPECT_FLOAT_RECT_EQ(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5, 5)), impl
Layer->updateRect()); | 544 EXPECT_FLOAT_RECT_EQ(gfx::RectF(gfx::PointF(10, 10), gfx::SizeF(5, 5)), impl
Layer->updateRect()); |
547 } | 545 } |
548 | 546 |
549 class FakeLayerImplTreeHost : public LayerTreeHost { | 547 class FakeLayerImplTreeHost : public LayerTreeHost { |
550 public: | 548 public: |
551 static scoped_ptr<FakeLayerImplTreeHost> create() | 549 static scoped_ptr<FakeLayerImplTreeHost> create(const LayerTreeSettings& set
tings = LayerTreeSettings()) |
552 { | 550 { |
553 scoped_ptr<FakeLayerImplTreeHost> host(new FakeLayerImplTreeHost); | 551 scoped_ptr<FakeLayerImplTreeHost> host(new FakeLayerImplTreeHost(setting
s)); |
554 // 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. | 552 // 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. |
555 host->initialize(scoped_ptr<Thread>(NULL)); | 553 host->initialize(scoped_ptr<Thread>(NULL)); |
556 return host.Pass(); | 554 return host.Pass(); |
557 } | 555 } |
558 | 556 |
559 private: | 557 private: |
560 FakeLayerImplTreeHost() | 558 FakeLayerImplTreeHost(const LayerTreeSettings& settings) |
561 : LayerTreeHost(&m_client, LayerTreeSettings()) | 559 : LayerTreeHost(&m_client, settings) |
562 { | 560 { |
563 } | 561 } |
564 | 562 |
565 FakeLayerImplTreeHostClient m_client; | 563 FakeLayerImplTreeHostClient m_client; |
566 }; | 564 }; |
567 | 565 |
568 void assertLayerTreeHostMatchesForSubtree(Layer* layer, LayerTreeHost* host) | 566 void assertLayerTreeHostMatchesForSubtree(Layer* layer, LayerTreeHost* host) |
569 { | 567 { |
570 EXPECT_EQ(host, layer->layerTreeHost()); | 568 EXPECT_EQ(host, layer->layerTreeHost()); |
571 | 569 |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 return layer->addAnimation(animation.Pass()); | 749 return layer->addAnimation(animation.Pass()); |
752 } | 750 } |
753 | 751 |
754 TEST(LayerLayerTreeHostTest, shouldNotAddAnimationWithoutLayerTreeHost) | 752 TEST(LayerLayerTreeHostTest, shouldNotAddAnimationWithoutLayerTreeHost) |
755 { | 753 { |
756 // Currently, WebCore assumes that animations will be started immediately /
very soon | 754 // Currently, WebCore assumes that animations will be started immediately /
very soon |
757 // if a composited layer's addAnimation() returns true. However, without a l
ayerTreeHost, | 755 // if a composited layer's addAnimation() returns true. However, without a l
ayerTreeHost, |
758 // layers cannot actually animate yet. So, to prevent violating this WebCore
assumption, | 756 // layers cannot actually animate yet. So, to prevent violating this WebCore
assumption, |
759 // the animation should not be accepted if the layer doesn't already have a
layerTreeHost. | 757 // the animation should not be accepted if the layer doesn't already have a
layerTreeHost. |
760 | 758 |
761 ScopedSettings scopedSettings; | 759 LayerTreeSettings settings; |
762 Settings::setAcceleratedAnimationEnabled(true); | 760 settings.acceleratedAnimationEnabled = true; |
763 | 761 |
764 scoped_refptr<Layer> layer = Layer::create(); | 762 scoped_refptr<Layer> layer = Layer::create(); |
765 | 763 |
766 // Case 1: without a layerTreeHost, the animation should not be accepted. | 764 // Case 1: without a layerTreeHost, the animation should not be accepted. |
767 EXPECT_FALSE(addTestAnimation(layer.get())); | 765 EXPECT_FALSE(addTestAnimation(layer.get())); |
768 | 766 |
769 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat
e()); | 767 scoped_ptr<FakeLayerImplTreeHost> layerTreeHost(FakeLayerImplTreeHost::creat
e(settings)); |
770 layerTreeHost->setRootLayer(layer.get()); | 768 layerTreeHost->setRootLayer(layer.get()); |
771 layer->setLayerTreeHost(layerTreeHost.get()); | 769 layer->setLayerTreeHost(layerTreeHost.get()); |
772 assertLayerTreeHostMatchesForSubtree(layer.get(), layerTreeHost.get()); | 770 assertLayerTreeHostMatchesForSubtree(layer.get(), layerTreeHost.get()); |
773 | 771 |
774 // Case 2: with a layerTreeHost, the animation should be accepted. | 772 // Case 2: with a layerTreeHost, the animation should be accepted. |
775 EXPECT_TRUE(addTestAnimation(layer.get())); | 773 EXPECT_TRUE(addTestAnimation(layer.get())); |
776 } | 774 } |
777 | 775 |
778 class MockLayer : public Layer { | 776 class MockLayer : public Layer { |
779 public: | 777 public: |
(...skipping 10 matching lines...) Expand all Loading... |
790 scoped_refptr<MockLayer> layer(new MockLayer); | 788 scoped_refptr<MockLayer> layer(new MockLayer); |
791 EXPECT_FALSE(layer->needsDisplay()); | 789 EXPECT_FALSE(layer->needsDisplay()); |
792 layer->setBounds(gfx::Size(0, 10)); | 790 layer->setBounds(gfx::Size(0, 10)); |
793 EXPECT_FALSE(layer->needsDisplay()); | 791 EXPECT_FALSE(layer->needsDisplay()); |
794 layer->setBounds(gfx::Size(10, 10)); | 792 layer->setBounds(gfx::Size(10, 10)); |
795 EXPECT_TRUE(layer->needsDisplay()); | 793 EXPECT_TRUE(layer->needsDisplay()); |
796 } | 794 } |
797 | 795 |
798 } // namespace | 796 } // namespace |
799 } // namespace cc | 797 } // namespace cc |
OLD | NEW |