diff options
Diffstat (limited to 'ui/gfx/compositor/layer_unittest.cc')
-rw-r--r-- | ui/gfx/compositor/layer_unittest.cc | 443 |
1 files changed, 0 insertions, 443 deletions
diff --git a/ui/gfx/compositor/layer_unittest.cc b/ui/gfx/compositor/layer_unittest.cc index 0140660..f5d3ac7 100644 --- a/ui/gfx/compositor/layer_unittest.cc +++ b/ui/gfx/compositor/layer_unittest.cc @@ -19,11 +19,7 @@ #include "ui/gfx/gfx_paths.h" #include "ui/gfx/skia_util.h" -#if defined(USE_WEBKIT_COMPOSITOR) #include "ui/gfx/compositor/compositor_setup.h" -#else -#include "ui/gfx/compositor/test/test_compositor.h" -#endif namespace ui { @@ -151,9 +147,7 @@ class LayerWithRealCompositorTest : public testing::Test { // Overridden from testing::Test: virtual void SetUp() OVERRIDE { -#if defined(USE_WEBKIT_COMPOSITOR) ui::DisableTestCompositor(); -#endif const gfx::Rect host_bounds(10, 10, 500, 500); window_.reset(TestCompositorHost::Create(host_bounds)); window_->Show(); @@ -367,12 +361,8 @@ class LayerWithDelegateTest : public testing::Test, public CompositorDelegate { // Overridden from testing::Test: virtual void SetUp() OVERRIDE { -#if defined(USE_WEBKIT_COMPOSITOR) ui::SetupTestCompositor(); compositor_ = ui::Compositor::Create(this, NULL, gfx::Size(1000, 1000)); -#else - compositor_ = new TestCompositor(this); -#endif } virtual void TearDown() OVERRIDE { @@ -618,409 +608,6 @@ class LayerWithNullDelegateTest : public LayerWithDelegateTest { DISALLOW_COPY_AND_ASSIGN(LayerWithNullDelegateTest); }; -// With the webkit compositor, we don't explicitly textures for layers, making -// tests that check that we do fail. -#if defined(USE_WEBKIT_COMPOSITOR) -#define NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(X) DISABLED_ ## X -#else -#define NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(X) X -#endif - -// Verifies that a layer which is set never to have a texture does not -// get a texture when SetFillsBoundsOpaquely is called. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR( - LayerNoTextureSetFillsBoundsOpaquely)) { - scoped_ptr<Layer> parent(CreateNoTextureLayer(gfx::Rect(0, 0, 400, 400))); - scoped_ptr<Layer> child(CreateNoTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child.get()); - - compositor()->SetRootLayer(parent.get()); - parent->SetFillsBoundsOpaquely(true); - child->SetFillsBoundsOpaquely(true); - Draw(); - RunPendingMessages(); - EXPECT_TRUE(child->texture() == NULL); - EXPECT_TRUE(parent->texture() == NULL); - - parent->SetFillsBoundsOpaquely(false); - child->SetFillsBoundsOpaquely(false); - Draw(); - RunPendingMessages(); - EXPECT_TRUE(child->texture() == NULL); - EXPECT_TRUE(parent->texture() == NULL); -} - -// Verifies that a layer does not have a texture when the hole is the size -// of the parent layer. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerNoTextureHoleSizeOfLayer)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child.get()); - - Draw(); - EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); - EXPECT_TRUE(parent->texture() != NULL); - - child->SetBounds(gfx::Rect(0, 0, 400, 400)); - Draw(); - EXPECT_TRUE(parent->texture() == NULL); -} - -// Verifies that a layer which has opacity == 0 does not have a texture. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerNoTextureTransparent)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child.get()); - - parent->SetOpacity(0.0f); - child->SetOpacity(0.0f); - Draw(); - EXPECT_TRUE(parent->texture() == NULL); - EXPECT_TRUE(child->texture() == NULL); - - parent->SetOpacity(1.0f); - Draw(); - EXPECT_TRUE(parent->texture() != NULL); - EXPECT_TRUE(child->texture() == NULL); - - child->SetOpacity(1.0f); - Draw(); - EXPECT_TRUE(parent->texture() != NULL); - EXPECT_TRUE(child->texture() != NULL); -} - -// Verifies that no texture is created for a layer with empty bounds. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerTextureNonEmptySchedulePaint)) { - scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); - Draw(); - EXPECT_TRUE(layer->texture() == NULL); - - layer->SetBounds(gfx::Rect(0, 0, 400, 400)); - Draw(); - EXPECT_TRUE(layer->texture() != NULL); -} - -// Verifies that when there are many potential holes, the largest one is picked. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LargestHole)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> child1(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child1.get()); - - scoped_ptr<Layer> child2(CreateTextureLayer(gfx::Rect(75, 75, 200, 200))); - parent->Add(child2.get()); - - Draw(); - - EXPECT_EQ(gfx::Rect(75, 75, 200, 200), parent->hole_rect()); -} - -// Verifies that the largest hole in the draw order is picked -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(HoleGeneratedFromLeaf)) { - // Layer tree looks like: - // node 1 - // |_ node 11 - // |_ node 111 - // |_ node 12 - // |_ node 121 - - scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - node1->Add(node11.get()); - - scoped_ptr<Layer> node12(CreateTextureLayer(gfx::Rect(75, 75, 200, 200))); - node1->Add(node12.get()); - - scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); - node11->Add(node111.get()); - - scoped_ptr<Layer> node121(CreateTextureLayer(gfx::Rect(10, 10, 190, 190))); - node12->Add(node121.get()); - - Draw(); - - EXPECT_EQ(gfx::Rect(75, 75, 200, 200), node1->hole_rect()); - EXPECT_EQ(gfx::Rect(25, 25, 75, 75), node11->hole_rect()); - EXPECT_EQ(gfx::Rect(10, 10, 190, 190), node12->hole_rect()); -} - -// Verifies that a hole can only punched into a layer with opacity = 1.0f. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(NoHoleWhenPartialOpacity)) { - // Layer tree looks like: - // node 1 - // |_ node 11 - // |_ node 111 - - scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - node1->Add(node11.get()); - - scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); - node11->Add(node111.get()); - - Draw(); - EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); - EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); - - - node11->SetOpacity(0.5f); - Draw(); - EXPECT_TRUE(node1->hole_rect().IsEmpty()); - EXPECT_TRUE(node11->hole_rect().IsEmpty()); -} - -// Verifies that a non visible layer or any of its children is not a hole. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(NonVisibleLayerCannotBeHole)) { - // Layer tree looks like: - // node 1 - // |_ node 11 - // |_ node 111 - - scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - node1->Add(node11.get()); - - scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); - node11->Add(node111.get()); - - Draw(); - EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); - EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); - - - node11->SetVisible(false); - Draw(); - EXPECT_TRUE(node1->hole_rect().IsEmpty()); - EXPECT_TRUE(node11->hole_rect().IsEmpty()); -} - -// Verifies that a layer which doesn't fill its bounds opaquely cannot punch a -// hole. However its children should still be able to punch a hole. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR( - LayerNotFillingBoundsOpaquelyCannotBeHole)) { - // Layer tree looks like: - // node 1 - // |_ node 11 - // |_ node 111 - - scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - node1->Add(node11.get()); - - scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); - node11->Add(node111.get()); - - Draw(); - EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); - EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); - - - node11->SetFillsBoundsOpaquely(false); - Draw(); - EXPECT_EQ(gfx::Rect(60, 60, 20, 20), node1->hole_rect()); - EXPECT_TRUE(node11->hole_rect().IsEmpty()); -} - -// Verifies that the hole is with respect to the local bounds of its parent. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(HoleLocalBounds)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer( - gfx::Rect(100, 100, 150, 150))); - - scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child.get()); - - Draw(); - - EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); -} - -// Verifies that there is no hole present when one of the child layers has a -// transform. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(NoHoleWithTransform)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); - parent->Add(child.get()); - - Draw(); - - EXPECT_TRUE(!parent->hole_rect().IsEmpty()); - - ui::Transform t; - t.SetTranslate(-50, -50); - t.ConcatRotate(45.0f); - t.ConcatTranslate(50, 50); - child->SetTransform(t); - - Draw(); - - EXPECT_EQ(gfx::Rect(0, 0, 0, 0), parent->hole_rect()); -} - -// Verifies that if the child layer is rotated by a multiple of ninety degrees -// we punch a hole -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(HoleWithNinetyDegreeTransforms)) { - scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 50, 50))); - parent->Add(child.get()); - - Draw(); - - EXPECT_TRUE(!parent->hole_rect().IsEmpty()); - - for (int i = -4; i <= 4; ++i) { - SCOPED_TRACE(::testing::Message() << "Iteration " << i); - - ui::Transform t; - // Need to rotate in local coordinates. - t.SetTranslate(-25, -25); - t.ConcatRotate(90.0f * i); - t.ConcatTranslate(25, 25); - child->SetTransform(t); - - gfx::Rect target_rect(child->bounds().size()); - t.ConcatTranslate(child->bounds().x(), child->bounds().y()); - t.TransformRect(&target_rect); - - Draw(); - - EXPECT_EQ(target_rect, parent->hole_rect()); - } -} - -// Verifies that a layer which doesn't have a texture cannot punch a -// hole. However its children should still be able to punch a hole. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR( - HoleWithRelativeNinetyDegreeTransforms)) { - // Layer tree looks like: - // node 1 - // |_ node 11 - // |_ node 12 - - scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); - - scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 50, 50))); - node1->Add(node11.get()); - - scoped_ptr<Layer> node12(CreateTextureLayer(gfx::Rect(50, 50, 50, 50))); - node1->Add(node12.get()); - - Draw(); - - EXPECT_EQ(gfx::Rect(0, 0, 50, 50), node11->hole_rect()); - EXPECT_TRUE(node12->hole_rect().IsEmpty()); - - ui::Transform t1; - // Need to rotate in local coordinates. - t1.SetTranslate(-25, -25); - t1.ConcatRotate(45.0f); - t1.ConcatTranslate(25, 25); - node11->SetTransform(t1); - - Draw(); - - EXPECT_TRUE(node12->hole_rect().IsEmpty()); - EXPECT_TRUE(node11->hole_rect().IsEmpty()); - - ui::Transform t2; - // Need to rotate in local coordinates. - t2.SetTranslate(-25, -25); - t2.ConcatRotate(-135.0f); - t2.ConcatTranslate(25, 25); - node12->SetTransform(t2); - - // Do translation of target rect in order to account for inprecision of - // using floating point matrices vs integer rects. - ui::Transform t3; - gfx::Rect target_rect = gfx::Rect(node11->bounds().size()); - t3.ConcatTransform(t2); - t1.GetInverse(&t1); - t3.ConcatTransform(t1); - t3.TransformRect(&target_rect); - - Draw(); - - EXPECT_TRUE(node12->hole_rect().IsEmpty()); - EXPECT_EQ(target_rect, node11->hole_rect()); -} - -// Create this hierarchy: -// L1 (no texture) -// +- L11 (texture) -// +- L12 (no texture) (added after L1 is already set as root-layer) -// +- L121 (texture) -// +- L122 (texture) -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(NoCompositor)) { - scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); - scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); - scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); - scoped_ptr<Layer> l121(CreateLayer(Layer::LAYER_HAS_TEXTURE)); - scoped_ptr<Layer> l122(CreateLayer(Layer::LAYER_HAS_TEXTURE)); - - EXPECT_EQ(NULL, l1->texture()); - EXPECT_EQ(NULL, l11->texture()); - EXPECT_EQ(NULL, l12->texture()); - EXPECT_EQ(NULL, l121->texture()); - EXPECT_EQ(NULL, l122->texture()); - - l1->Add(l11.get()); - l1->SetBounds(gfx::Rect(0, 0, 500, 500)); - l11->SetBounds(gfx::Rect(5, 5, 490, 490)); - - EXPECT_EQ(NULL, l11->texture()); - - compositor()->SetRootLayer(l1.get()); - - EXPECT_EQ(NULL, l1->texture()); - - // Despite having type LAYER_HAS_TEXTURE, l11 will not have one set yet - // because it has never been asked to draw. - EXPECT_EQ(NULL, l11->texture()); - - l12->Add(l121.get()); - l12->Add(l122.get()); - l12->SetBounds(gfx::Rect(5, 5, 480, 480)); - l121->SetBounds(gfx::Rect(5, 5, 100, 100)); - l122->SetBounds(gfx::Rect(110, 110, 100, 100)); - - EXPECT_EQ(NULL, l121->texture()); - EXPECT_EQ(NULL, l122->texture()); - - l1->Add(l12.get()); - - // By asking l121 and l122 to paint, we cause them to generate a texture. - SchedulePaintForLayer(l121.get()); - SchedulePaintForLayer(l122.get()); - Draw(); - - EXPECT_EQ(NULL, l12->texture()); - EXPECT_TRUE(NULL != l121->texture()); - EXPECT_TRUE(NULL != l122->texture()); - - // Toggling l2's visibility should drop all sub-layer textures. - l12->SetVisible(false); - EXPECT_EQ(NULL, l12->texture()); - EXPECT_EQ(NULL, l121->texture()); - EXPECT_EQ(NULL, l122->texture()); -} - // Various visibile/drawn assertions. TEST_F(LayerWithNullDelegateTest, Visibility) { scoped_ptr<Layer> l1(new Layer(Layer::LAYER_HAS_TEXTURE)); @@ -1038,11 +625,9 @@ TEST_F(LayerWithNullDelegateTest, Visibility) { EXPECT_TRUE(l1->IsDrawn()); EXPECT_TRUE(l2->IsDrawn()); EXPECT_TRUE(l3->IsDrawn()); -#if defined(USE_WEBKIT_COMPOSITOR) EXPECT_EQ(1.f, l1->web_layer().opacity()); EXPECT_EQ(1.f, l2->web_layer().opacity()); EXPECT_EQ(1.f, l3->web_layer().opacity()); -#endif compositor()->SetRootLayer(l1.get()); @@ -1052,25 +637,19 @@ TEST_F(LayerWithNullDelegateTest, Visibility) { EXPECT_FALSE(l1->IsDrawn()); EXPECT_FALSE(l2->IsDrawn()); EXPECT_FALSE(l3->IsDrawn()); -#if defined(USE_WEBKIT_COMPOSITOR) EXPECT_EQ(0.f, l1->web_layer().opacity()); -#endif l3->SetVisible(false); EXPECT_FALSE(l1->IsDrawn()); EXPECT_FALSE(l2->IsDrawn()); EXPECT_FALSE(l3->IsDrawn()); -#if defined(USE_WEBKIT_COMPOSITOR) EXPECT_EQ(0.f, l3->web_layer().opacity()); -#endif l1->SetVisible(true); EXPECT_TRUE(l1->IsDrawn()); EXPECT_TRUE(l2->IsDrawn()); EXPECT_FALSE(l3->IsDrawn()); -#if defined(USE_WEBKIT_COMPOSITOR) EXPECT_EQ(1.f, l1->web_layer().opacity()); -#endif } // Checks that stacking-related methods behave as advertised. @@ -1132,28 +711,6 @@ TEST_F(LayerWithNullDelegateTest, Stacking) { EXPECT_EQ("2,3,1", GetLayerChildrenNames(*root.get())); } -// Checks that the invalid rect assumes correct values when setting bounds. -// TODO(vollick): for USE_WEBKIT_COMPOSITOR, use WebKit's dirty rect. -TEST_F(LayerWithNullDelegateTest, - NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(SetBoundsInvalidRect)) { - scoped_ptr<Layer> l1(CreateTextureLayer(gfx::Rect(0, 0, 200, 200))); - compositor()->SetRootLayer(l1.get()); - - // After a draw the invalid rect should be empty. - Draw(); - EXPECT_TRUE(l1->invalid_rect().IsEmpty()); - - // After a move the invalid rect should be empty. - l1->SetBounds(gfx::Rect(5, 5, 200, 200)); - EXPECT_TRUE(l1->invalid_rect().IsEmpty()); - - // Bounds change should trigger both the invalid rect to update as well as - // CompositorDelegate being told to draw. - l1->SetBounds(gfx::Rect(5, 5, 100, 100)); - EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), - l1->invalid_rect().ToString()); -} - // Verifies SetBounds triggers the appropriate painting/drawing. TEST_F(LayerWithNullDelegateTest, SetBoundsSchedulesPaint) { scoped_ptr<Layer> l1(CreateTextureLayer(gfx::Rect(0, 0, 200, 200))); |