Index: ui/gfx/compositor/layer_unittest.cc |
diff --git a/ui/gfx/compositor/layer_unittest.cc b/ui/gfx/compositor/layer_unittest.cc |
index 69999a3431b11497e219d207c73156caa336ceda..aa230f9c16a1dbdf35287e8a5be89ee91ee0f930 100644 |
--- a/ui/gfx/compositor/layer_unittest.cc |
+++ b/ui/gfx/compositor/layer_unittest.cc |
@@ -25,6 +25,29 @@ namespace { |
// - LayerWithRealCompositorTest when a real compositor is required for testing. |
// - Slow because they bring up a window and run the real compositor. This |
// is typically not what you want. |
+ |
+class ColoredLayer : public Layer, public LayerDelegate { |
+ public: |
+ ColoredLayer(Compositor* compositor, SkColor color) |
+ : Layer(compositor, Layer::LAYER_HAS_TEXTURE), |
+ color_(color) { |
+ set_delegate(this); |
+ } |
+ |
+ virtual ~ColoredLayer() { } |
+ |
+ // Overridden from LayerDelegate: |
+ virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { |
+ canvas->GetSkCanvas()->drawColor(color_); |
+ } |
+ |
+ virtual void OnLayerAnimationEnded(const ui::Animation* animation) OVERRIDE { |
+ } |
+ |
+ private: |
+ SkColor color_; |
+}; |
+ |
class LayerWithRealCompositorTest : public testing::Test { |
public: |
LayerWithRealCompositorTest() {} |
@@ -49,9 +72,8 @@ class LayerWithRealCompositorTest : public testing::Test { |
} |
Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { |
- Layer* layer = CreateLayer(Layer::LAYER_HAS_TEXTURE); |
+ Layer* layer = new ColoredLayer(GetCompositor(), color); |
layer->SetBounds(bounds); |
- PaintColorToLayer(layer, color); |
return layer; |
} |
@@ -67,13 +89,6 @@ class LayerWithRealCompositorTest : public testing::Test { |
false); |
} |
- void PaintColorToLayer(Layer* layer, SkColor color) { |
- scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer)); |
- canvas->FillRectInt(color, 0, 0, layer->bounds().width(), |
- layer->bounds().height()); |
- layer->SetCanvas(*canvas->GetSkCanvas(), layer->bounds().origin()); |
- } |
- |
void DrawTree(Layer* root) { |
GetCompositor()->SetRootLayer(root); |
GetCompositor()->Draw(false); |
@@ -90,7 +105,6 @@ class LayerWithRealCompositorTest : public testing::Test { |
} |
private: |
- MessageLoopForUI message_loop_; |
scoped_ptr<TestCompositorHost> window_; |
DISALLOW_COPY_AND_ASSIGN(LayerWithRealCompositorTest); |
@@ -99,7 +113,7 @@ class LayerWithRealCompositorTest : public testing::Test { |
// LayerDelegate that paints colors to the layer. |
class TestLayerDelegate : public LayerDelegate { |
public: |
- explicit TestLayerDelegate(Layer* owner) : owner_(owner), color_index_(0) {} |
+ explicit TestLayerDelegate() : color_index_(0) {} |
virtual ~TestLayerDelegate() {} |
void AddColor(SkColor color) { |
@@ -122,7 +136,6 @@ class TestLayerDelegate : public LayerDelegate { |
} |
private: |
- Layer* owner_; |
std::vector<SkColor> colors_; |
int color_index_; |
gfx::Size paint_size_; |
@@ -176,11 +189,17 @@ class NullLayerDelegate : public LayerDelegate { |
#if defined(OS_WIN) |
// These are disabled on windows as they don't run correctly on the buildbot. |
// Reenable once we move to the real compositor. |
+#define MAYBE_Delegate DISABLED_Delegate |
#define MAYBE_Draw DISABLED_Draw |
+#define MAYBE_DrawTree DISABLED_DrawTree |
#define MAYBE_Hierarchy DISABLED_Hierarchy |
+#define MAYBE_HierarchyNoTexture DISABLED_HierarchyNoTexture |
#else |
+#define MAYBE_Delegate Delegate |
#define MAYBE_Draw Draw |
+#define MAYBE_DrawTree DrawTree |
#define MAYBE_Hierarchy Hierarchy |
+#define MAYBE_HierarchyNoTexture HierarchyNoTexture |
#endif |
TEST_F(LayerWithRealCompositorTest, MAYBE_Draw) { |
@@ -232,9 +251,8 @@ class LayerWithDelegateTest : public testing::Test { |
} |
Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { |
- Layer* layer = CreateLayer(Layer::LAYER_HAS_TEXTURE); |
+ Layer* layer = new ColoredLayer(compositor(), color); |
layer->SetBounds(bounds); |
- PaintColorToLayer(layer, color); |
return layer; |
} |
@@ -250,13 +268,6 @@ class LayerWithDelegateTest : public testing::Test { |
false); |
} |
- void PaintColorToLayer(Layer* layer, SkColor color) { |
- scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer)); |
- canvas->FillRectInt(color, 0, 0, layer->bounds().width(), |
- layer->bounds().height()); |
- layer->SetCanvas(*canvas->GetSkCanvas(), layer->bounds().origin()); |
- } |
- |
void DrawTree(Layer* root) { |
compositor()->SetRootLayer(root); |
compositor()->Draw(false); |
@@ -270,7 +281,7 @@ class LayerWithDelegateTest : public testing::Test { |
// Invokes DrawTree on the compositor. |
void Draw() { |
- compositor_->root_layer()->DrawTree(); |
+ compositor_->Draw(false); |
} |
private: |
@@ -325,34 +336,35 @@ TEST_F(LayerWithDelegateTest, ConvertPointToLayer_Medium) { |
EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords); |
} |
-TEST_F(LayerWithDelegateTest, Delegate) { |
+TEST_F(LayerWithRealCompositorTest, MAYBE_Delegate) { |
scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK, |
gfx::Rect(20, 20, 400, 400))); |
- TestLayerDelegate delegate(l1.get()); |
+ GetCompositor()->SetRootLayer(l1.get()); |
+ RunPendingMessages(); |
+ |
+ TestLayerDelegate delegate; |
l1->set_delegate(&delegate); |
delegate.AddColor(SK_ColorWHITE); |
delegate.AddColor(SK_ColorYELLOW); |
delegate.AddColor(SK_ColorGREEN); |
- compositor()->SetRootLayer(l1.get()); |
- |
l1->SchedulePaint(gfx::Rect(0, 0, 400, 400)); |
- Draw(); |
+ RunPendingMessages(); |
EXPECT_EQ(delegate.color_index(), 1); |
EXPECT_EQ(delegate.paint_size(), l1->bounds().size()); |
l1->SchedulePaint(gfx::Rect(10, 10, 200, 200)); |
- Draw(); |
+ RunPendingMessages(); |
EXPECT_EQ(delegate.color_index(), 2); |
EXPECT_EQ(delegate.paint_size(), gfx::Size(200, 200)); |
l1->SchedulePaint(gfx::Rect(5, 5, 50, 50)); |
- Draw(); |
+ RunPendingMessages(); |
EXPECT_EQ(delegate.color_index(), 0); |
EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50)); |
} |
-TEST_F(LayerWithDelegateTest, DrawTree) { |
+TEST_F(LayerWithRealCompositorTest, MAYBE_DrawTree) { |
scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, |
gfx::Rect(20, 20, 400, 400))); |
scoped_ptr<Layer> l2(CreateColorLayer(SK_ColorBLUE, |
@@ -362,6 +374,9 @@ TEST_F(LayerWithDelegateTest, DrawTree) { |
l1->Add(l2.get()); |
l2->Add(l3.get()); |
+ GetCompositor()->SetRootLayer(l1.get()); |
+ RunPendingMessages(); |
+ |
DrawTreeLayerDelegate d1; |
l1->set_delegate(&d1); |
DrawTreeLayerDelegate d2; |
@@ -369,10 +384,8 @@ TEST_F(LayerWithDelegateTest, DrawTree) { |
DrawTreeLayerDelegate d3; |
l3->set_delegate(&d3); |
- compositor()->SetRootLayer(l1.get()); |
- |
l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
- Draw(); |
+ RunPendingMessages(); |
EXPECT_FALSE(d1.painted()); |
EXPECT_TRUE(d2.painted()); |
EXPECT_FALSE(d3.painted()); |
@@ -385,7 +398,7 @@ TEST_F(LayerWithDelegateTest, DrawTree) { |
// | +-- L3 - yellow |
// +-- L4 - magenta |
// |
-TEST_F(LayerWithDelegateTest, HierarchyNoTexture) { |
+TEST_F(LayerWithRealCompositorTest, MAYBE_HierarchyNoTexture) { |
scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, |
gfx::Rect(20, 20, 400, 400))); |
scoped_ptr<Layer> l2(CreateNoTextureLayer(gfx::Rect(10, 10, 350, 350))); |
@@ -398,16 +411,17 @@ TEST_F(LayerWithDelegateTest, HierarchyNoTexture) { |
l1->Add(l4.get()); |
l2->Add(l3.get()); |
+ GetCompositor()->SetRootLayer(l1.get()); |
+ RunPendingMessages(); |
+ |
DrawTreeLayerDelegate d2; |
l2->set_delegate(&d2); |
DrawTreeLayerDelegate d3; |
l3->set_delegate(&d3); |
- compositor()->SetRootLayer(l1.get()); |
- |
l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
l3->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
- Draw(); |
+ RunPendingMessages(); |
// |d2| should not have received a paint notification since it has no texture. |
EXPECT_FALSE(d2.painted()); |
@@ -472,9 +486,18 @@ TEST_F(LayerWithNullDelegateTest, LayerNoTextureSetFillsBoundsOpaquely) { |
EXPECT_TRUE(parent->texture() == NULL); |
} |
+// 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 WEBKIT_COMPOSITOR_FAILS(X) FAILS_ ## X |
+#else |
+#define WEBKIT_COMPOSITOR_FAILS(X) X |
+#endif |
+ |
// Verifies that a layer does not have a texture when the hole is the size |
// of the parent layer. |
-TEST_F(LayerWithNullDelegateTest, LayerNoTextureHoleSizeOfLayer) { |
+TEST_F(LayerWithNullDelegateTest, |
+ WEBKIT_COMPOSITOR_FAILS(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()); |
@@ -489,7 +512,8 @@ TEST_F(LayerWithNullDelegateTest, LayerNoTextureHoleSizeOfLayer) { |
} |
// Verifies that a layer which has opacity == 0 does not have a texture. |
-TEST_F(LayerWithNullDelegateTest, LayerNoTextureTransparent) { |
+TEST_F(LayerWithNullDelegateTest, |
+ WEBKIT_COMPOSITOR_FAILS(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()); |
@@ -512,7 +536,8 @@ TEST_F(LayerWithNullDelegateTest, LayerNoTextureTransparent) { |
} |
// Verifies that no texture is created for a layer with empty bounds. |
-TEST_F(LayerWithNullDelegateTest, LayerTextureNonEmptySchedulePaint) { |
+TEST_F(LayerWithNullDelegateTest, |
+ WEBKIT_COMPOSITOR_FAILS(LayerTextureNonEmptySchedulePaint)) { |
scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); |
Draw(); |
EXPECT_TRUE(layer->texture() == NULL); |
@@ -595,7 +620,7 @@ TEST_F(LayerWithNullDelegateTest, HoleWithNinetyDegreeTransforms) { |
// +- L12 (no texture) (added after L1 is already set as root-layer) |
// +- L121 (texture) |
// +- L122 (texture) |
-TEST_F(LayerWithNullDelegateTest, NoCompositor) { |
+TEST_F(LayerWithNullDelegateTest, WEBKIT_COMPOSITOR_FAILS(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)); |