OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/compiler_specific.h" | 6 #include "base/compiler_specific.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/gfx/canvas_skia.h" | 9 #include "ui/gfx/canvas_skia.h" |
10 #include "ui/gfx/compositor/compositor_observer.h" | 10 #include "ui/gfx/compositor/compositor_observer.h" |
11 #include "ui/gfx/compositor/layer.h" | 11 #include "ui/gfx/compositor/layer.h" |
12 #include "ui/gfx/compositor/test_compositor.h" | 12 #include "ui/gfx/compositor/test_compositor.h" |
13 #include "ui/gfx/compositor/test_compositor_host.h" | 13 #include "ui/gfx/compositor/test_compositor_host.h" |
14 | 14 |
15 namespace ui { | 15 namespace ui { |
16 | 16 |
17 namespace { | 17 namespace { |
18 | 18 |
19 // There are three test classes in here that configure the Compositor and | 19 // There are three test classes in here that configure the Compositor and |
20 // Layer's slightly differently: | 20 // Layer's slightly differently: |
21 // - LayerWithNullDelegateTest uses TestCompositor and NullLayerDelegate as the | 21 // - LayerWithNullDelegateTest uses TestCompositor and NullLayerDelegate as the |
22 // LayerDelegate. This is typically the base class you want to use. | 22 // LayerDelegate. This is typically the base class you want to use. |
23 // - LayerWithDelegateTest uses TestCompositor and does not set a LayerDelegate | 23 // - LayerWithDelegateTest uses TestCompositor and does not set a LayerDelegate |
24 // on the delegates. | 24 // on the delegates. |
25 // - LayerWithRealCompositorTest when a real compositor is required for testing. | 25 // - LayerWithRealCompositorTest when a real compositor is required for testing. |
26 // - Slow because they bring up a window and run the real compositor. This | 26 // - Slow because they bring up a window and run the real compositor. This |
27 // is typically not what you want. | 27 // is typically not what you want. |
| 28 |
| 29 class ColoredLayer : public Layer, public LayerDelegate { |
| 30 public: |
| 31 ColoredLayer(Compositor* compositor, SkColor color) |
| 32 : Layer(compositor, Layer::LAYER_HAS_TEXTURE), |
| 33 color_(color) { |
| 34 set_delegate(this); |
| 35 } |
| 36 |
| 37 virtual ~ColoredLayer() { } |
| 38 |
| 39 // Overridden from LayerDelegate: |
| 40 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { |
| 41 canvas->GetSkCanvas()->drawColor(color_); |
| 42 } |
| 43 |
| 44 private: |
| 45 SkColor color_; |
| 46 }; |
| 47 |
28 class LayerWithRealCompositorTest : public testing::Test { | 48 class LayerWithRealCompositorTest : public testing::Test { |
29 public: | 49 public: |
30 LayerWithRealCompositorTest() {} | 50 LayerWithRealCompositorTest() {} |
31 virtual ~LayerWithRealCompositorTest() {} | 51 virtual ~LayerWithRealCompositorTest() {} |
32 | 52 |
33 // Overridden from testing::Test: | 53 // Overridden from testing::Test: |
34 virtual void SetUp() OVERRIDE { | 54 virtual void SetUp() OVERRIDE { |
35 const gfx::Rect host_bounds(10, 10, 500, 500); | 55 const gfx::Rect host_bounds(10, 10, 500, 500); |
36 window_.reset(TestCompositorHost::Create(host_bounds)); | 56 window_.reset(TestCompositorHost::Create(host_bounds)); |
37 window_->Show(); | 57 window_->Show(); |
38 } | 58 } |
39 | 59 |
40 virtual void TearDown() OVERRIDE { | 60 virtual void TearDown() OVERRIDE { |
41 } | 61 } |
42 | 62 |
43 Compositor* GetCompositor() { | 63 Compositor* GetCompositor() { |
44 return window_->GetCompositor(); | 64 return window_->GetCompositor(); |
45 } | 65 } |
46 | 66 |
47 Layer* CreateLayer(Layer::LayerType type) { | 67 Layer* CreateLayer(Layer::LayerType type) { |
48 return new Layer(GetCompositor(), type); | 68 return new Layer(GetCompositor(), type); |
49 } | 69 } |
50 | 70 |
51 Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { | 71 Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { |
52 Layer* layer = CreateLayer(Layer::LAYER_HAS_TEXTURE); | 72 Layer* layer = new ColoredLayer(GetCompositor(), color); |
53 layer->SetBounds(bounds); | 73 layer->SetBounds(bounds); |
54 PaintColorToLayer(layer, color); | |
55 return layer; | 74 return layer; |
56 } | 75 } |
57 | 76 |
58 Layer* CreateNoTextureLayer(const gfx::Rect& bounds) { | 77 Layer* CreateNoTextureLayer(const gfx::Rect& bounds) { |
59 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); | 78 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); |
60 layer->SetBounds(bounds); | 79 layer->SetBounds(bounds); |
61 return layer; | 80 return layer; |
62 } | 81 } |
63 | 82 |
64 gfx::Canvas* CreateCanvasForLayer(const Layer* layer) { | 83 gfx::Canvas* CreateCanvasForLayer(const Layer* layer) { |
65 return gfx::Canvas::CreateCanvas(layer->bounds().width(), | 84 return gfx::Canvas::CreateCanvas(layer->bounds().width(), |
66 layer->bounds().height(), | 85 layer->bounds().height(), |
67 false); | 86 false); |
68 } | 87 } |
69 | 88 |
70 void PaintColorToLayer(Layer* layer, SkColor color) { | |
71 scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer)); | |
72 canvas->FillRectInt(color, 0, 0, layer->bounds().width(), | |
73 layer->bounds().height()); | |
74 layer->SetCanvas(*canvas->GetSkCanvas(), layer->bounds().origin()); | |
75 } | |
76 | |
77 void DrawTree(Layer* root) { | 89 void DrawTree(Layer* root) { |
78 GetCompositor()->SetRootLayer(root); | 90 GetCompositor()->SetRootLayer(root); |
79 GetCompositor()->Draw(false); | 91 GetCompositor()->Draw(false); |
80 } | 92 } |
81 | 93 |
82 void RunPendingMessages() { | 94 void RunPendingMessages() { |
83 MessageLoopForUI::current()->RunAllPending(); | 95 MessageLoopForUI::current()->RunAllPending(); |
84 } | 96 } |
85 | 97 |
86 // Invalidates the entire contents of the layer. | 98 // Invalidates the entire contents of the layer. |
87 void SchedulePaintForLayer(Layer* layer) { | 99 void SchedulePaintForLayer(Layer* layer) { |
88 layer->SchedulePaint( | 100 layer->SchedulePaint( |
89 gfx::Rect(0, 0, layer->bounds().width(), layer->bounds().height())); | 101 gfx::Rect(0, 0, layer->bounds().width(), layer->bounds().height())); |
90 } | 102 } |
91 | 103 |
92 private: | 104 private: |
93 MessageLoopForUI message_loop_; | |
94 scoped_ptr<TestCompositorHost> window_; | 105 scoped_ptr<TestCompositorHost> window_; |
95 | 106 |
96 DISALLOW_COPY_AND_ASSIGN(LayerWithRealCompositorTest); | 107 DISALLOW_COPY_AND_ASSIGN(LayerWithRealCompositorTest); |
97 }; | 108 }; |
98 | 109 |
99 // LayerDelegate that paints colors to the layer. | 110 // LayerDelegate that paints colors to the layer. |
100 class TestLayerDelegate : public LayerDelegate { | 111 class TestLayerDelegate : public LayerDelegate { |
101 public: | 112 public: |
102 explicit TestLayerDelegate(Layer* owner) : owner_(owner), color_index_(0) {} | 113 explicit TestLayerDelegate() : color_index_(0) {} |
103 virtual ~TestLayerDelegate() {} | 114 virtual ~TestLayerDelegate() {} |
104 | 115 |
105 void AddColor(SkColor color) { | 116 void AddColor(SkColor color) { |
106 colors_.push_back(color); | 117 colors_.push_back(color); |
107 } | 118 } |
108 | 119 |
109 gfx::Size paint_size() const { return paint_size_; } | 120 gfx::Size paint_size() const { return paint_size_; } |
110 int color_index() const { return color_index_; } | 121 int color_index() const { return color_index_; } |
111 | 122 |
112 // Overridden from LayerDelegate: | 123 // Overridden from LayerDelegate: |
113 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { | 124 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE { |
114 SkBitmap contents = canvas->AsCanvasSkia()->ExtractBitmap(); | 125 SkBitmap contents = canvas->AsCanvasSkia()->ExtractBitmap(); |
115 paint_size_ = gfx::Size(contents.width(), contents.height()); | 126 paint_size_ = gfx::Size(contents.width(), contents.height()); |
116 canvas->FillRectInt(colors_.at(color_index_), 0, 0, | 127 canvas->FillRectInt(colors_.at(color_index_), 0, 0, |
117 contents.width(), | 128 contents.width(), |
118 contents.height()); | 129 contents.height()); |
119 color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size()); | 130 color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size()); |
120 } | 131 } |
121 | 132 |
122 private: | 133 private: |
123 Layer* owner_; | |
124 std::vector<SkColor> colors_; | 134 std::vector<SkColor> colors_; |
125 int color_index_; | 135 int color_index_; |
126 gfx::Size paint_size_; | 136 gfx::Size paint_size_; |
127 | 137 |
128 DISALLOW_COPY_AND_ASSIGN(TestLayerDelegate); | 138 DISALLOW_COPY_AND_ASSIGN(TestLayerDelegate); |
129 }; | 139 }; |
130 | 140 |
131 // LayerDelegate that verifies that a layer was asked to update its canvas. | 141 // LayerDelegate that verifies that a layer was asked to update its canvas. |
132 class DrawTreeLayerDelegate : public LayerDelegate { | 142 class DrawTreeLayerDelegate : public LayerDelegate { |
133 public: | 143 public: |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 virtual void TearDown() OVERRIDE { | 229 virtual void TearDown() OVERRIDE { |
220 } | 230 } |
221 | 231 |
222 Compositor* compositor() { return compositor_.get(); } | 232 Compositor* compositor() { return compositor_.get(); } |
223 | 233 |
224 virtual Layer* CreateLayer(Layer::LayerType type) { | 234 virtual Layer* CreateLayer(Layer::LayerType type) { |
225 return new Layer(compositor(), type); | 235 return new Layer(compositor(), type); |
226 } | 236 } |
227 | 237 |
228 Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { | 238 Layer* CreateColorLayer(SkColor color, const gfx::Rect& bounds) { |
229 Layer* layer = CreateLayer(Layer::LAYER_HAS_TEXTURE); | 239 Layer* layer = new ColoredLayer(compositor(), color); |
230 layer->SetBounds(bounds); | 240 layer->SetBounds(bounds); |
231 PaintColorToLayer(layer, color); | |
232 return layer; | 241 return layer; |
233 } | 242 } |
234 | 243 |
235 virtual Layer* CreateNoTextureLayer(const gfx::Rect& bounds) { | 244 virtual Layer* CreateNoTextureLayer(const gfx::Rect& bounds) { |
236 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); | 245 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); |
237 layer->SetBounds(bounds); | 246 layer->SetBounds(bounds); |
238 return layer; | 247 return layer; |
239 } | 248 } |
240 | 249 |
241 gfx::Canvas* CreateCanvasForLayer(const Layer* layer) { | 250 gfx::Canvas* CreateCanvasForLayer(const Layer* layer) { |
242 return gfx::Canvas::CreateCanvas(layer->bounds().width(), | 251 return gfx::Canvas::CreateCanvas(layer->bounds().width(), |
243 layer->bounds().height(), | 252 layer->bounds().height(), |
244 false); | 253 false); |
245 } | 254 } |
246 | 255 |
247 void PaintColorToLayer(Layer* layer, SkColor color) { | |
248 scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer)); | |
249 canvas->FillRectInt(color, 0, 0, layer->bounds().width(), | |
250 layer->bounds().height()); | |
251 layer->SetCanvas(*canvas->GetSkCanvas(), layer->bounds().origin()); | |
252 } | |
253 | |
254 void DrawTree(Layer* root) { | 256 void DrawTree(Layer* root) { |
255 compositor()->SetRootLayer(root); | 257 compositor()->SetRootLayer(root); |
256 compositor()->Draw(false); | 258 compositor()->Draw(false); |
257 } | 259 } |
258 | 260 |
259 // Invalidates the entire contents of the layer. | 261 // Invalidates the entire contents of the layer. |
260 void SchedulePaintForLayer(Layer* layer) { | 262 void SchedulePaintForLayer(Layer* layer) { |
261 layer->SchedulePaint( | 263 layer->SchedulePaint( |
262 gfx::Rect(0, 0, layer->bounds().width(), layer->bounds().height())); | 264 gfx::Rect(0, 0, layer->bounds().width(), layer->bounds().height())); |
263 } | 265 } |
264 | 266 |
265 // Invokes DrawTree on the compositor. | 267 // Invokes DrawTree on the compositor. |
266 void Draw() { | 268 void Draw() { |
267 compositor_->root_layer()->DrawTree(); | 269 compositor_->Draw(false); |
268 } | 270 } |
269 | 271 |
270 private: | 272 private: |
271 scoped_refptr<TestCompositor> compositor_; | 273 scoped_refptr<TestCompositor> compositor_; |
272 | 274 |
273 DISALLOW_COPY_AND_ASSIGN(LayerWithDelegateTest); | 275 DISALLOW_COPY_AND_ASSIGN(LayerWithDelegateTest); |
274 }; | 276 }; |
275 | 277 |
276 // L1 | 278 // L1 |
277 // +-- L2 | 279 // +-- L2 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 Layer::ConvertPointToLayer(l3.get(), l1.get(), &point1_in_l3_coords); | 314 Layer::ConvertPointToLayer(l3.get(), l1.get(), &point1_in_l3_coords); |
313 gfx::Point point1_in_l1_coords(25, 25); | 315 gfx::Point point1_in_l1_coords(25, 25); |
314 EXPECT_EQ(point1_in_l1_coords, point1_in_l3_coords); | 316 EXPECT_EQ(point1_in_l1_coords, point1_in_l3_coords); |
315 | 317 |
316 gfx::Point point2_in_l1_coords(5, 5); | 318 gfx::Point point2_in_l1_coords(5, 5); |
317 Layer::ConvertPointToLayer(l1.get(), l3.get(), &point2_in_l1_coords); | 319 Layer::ConvertPointToLayer(l1.get(), l3.get(), &point2_in_l1_coords); |
318 gfx::Point point2_in_l3_coords(-15, -15); | 320 gfx::Point point2_in_l3_coords(-15, -15); |
319 EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords); | 321 EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords); |
320 } | 322 } |
321 | 323 |
322 TEST_F(LayerWithDelegateTest, Delegate) { | 324 TEST_F(LayerWithRealCompositorTest, Delegate) { |
323 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK, | 325 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK, |
324 gfx::Rect(20, 20, 400, 400))); | 326 gfx::Rect(20, 20, 400, 400))); |
325 TestLayerDelegate delegate(l1.get()); | 327 GetCompositor()->SetRootLayer(l1.get()); |
| 328 RunPendingMessages(); |
| 329 |
| 330 TestLayerDelegate delegate; |
326 l1->set_delegate(&delegate); | 331 l1->set_delegate(&delegate); |
327 delegate.AddColor(SK_ColorWHITE); | 332 delegate.AddColor(SK_ColorWHITE); |
328 delegate.AddColor(SK_ColorYELLOW); | 333 delegate.AddColor(SK_ColorYELLOW); |
329 delegate.AddColor(SK_ColorGREEN); | 334 delegate.AddColor(SK_ColorGREEN); |
330 | 335 |
331 compositor()->SetRootLayer(l1.get()); | |
332 | |
333 l1->SchedulePaint(gfx::Rect(0, 0, 400, 400)); | 336 l1->SchedulePaint(gfx::Rect(0, 0, 400, 400)); |
334 Draw(); | 337 RunPendingMessages(); |
335 EXPECT_EQ(delegate.color_index(), 1); | 338 EXPECT_EQ(delegate.color_index(), 1); |
336 EXPECT_EQ(delegate.paint_size(), l1->bounds().size()); | 339 EXPECT_EQ(delegate.paint_size(), l1->bounds().size()); |
337 | 340 |
338 l1->SchedulePaint(gfx::Rect(10, 10, 200, 200)); | 341 l1->SchedulePaint(gfx::Rect(10, 10, 200, 200)); |
339 Draw(); | 342 RunPendingMessages(); |
340 EXPECT_EQ(delegate.color_index(), 2); | 343 EXPECT_EQ(delegate.color_index(), 2); |
341 EXPECT_EQ(delegate.paint_size(), gfx::Size(200, 200)); | 344 EXPECT_EQ(delegate.paint_size(), gfx::Size(200, 200)); |
342 | 345 |
343 l1->SchedulePaint(gfx::Rect(5, 5, 50, 50)); | 346 l1->SchedulePaint(gfx::Rect(5, 5, 50, 50)); |
344 Draw(); | 347 RunPendingMessages(); |
345 EXPECT_EQ(delegate.color_index(), 0); | 348 EXPECT_EQ(delegate.color_index(), 0); |
346 EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50)); | 349 EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50)); |
347 } | 350 } |
348 | 351 |
349 TEST_F(LayerWithDelegateTest, DrawTree) { | 352 TEST_F(LayerWithRealCompositorTest, DrawTree) { |
350 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, | 353 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, |
351 gfx::Rect(20, 20, 400, 400))); | 354 gfx::Rect(20, 20, 400, 400))); |
352 scoped_ptr<Layer> l2(CreateColorLayer(SK_ColorBLUE, | 355 scoped_ptr<Layer> l2(CreateColorLayer(SK_ColorBLUE, |
353 gfx::Rect(10, 10, 350, 350))); | 356 gfx::Rect(10, 10, 350, 350))); |
354 scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW, | 357 scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW, |
355 gfx::Rect(10, 10, 100, 100))); | 358 gfx::Rect(10, 10, 100, 100))); |
356 l1->Add(l2.get()); | 359 l1->Add(l2.get()); |
357 l2->Add(l3.get()); | 360 l2->Add(l3.get()); |
358 | 361 |
| 362 GetCompositor()->SetRootLayer(l1.get()); |
| 363 RunPendingMessages(); |
| 364 |
359 DrawTreeLayerDelegate d1; | 365 DrawTreeLayerDelegate d1; |
360 l1->set_delegate(&d1); | 366 l1->set_delegate(&d1); |
361 DrawTreeLayerDelegate d2; | 367 DrawTreeLayerDelegate d2; |
362 l2->set_delegate(&d2); | 368 l2->set_delegate(&d2); |
363 DrawTreeLayerDelegate d3; | 369 DrawTreeLayerDelegate d3; |
364 l3->set_delegate(&d3); | 370 l3->set_delegate(&d3); |
365 | 371 |
366 compositor()->SetRootLayer(l1.get()); | |
367 | |
368 l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); | 372 l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
369 Draw(); | 373 RunPendingMessages(); |
370 EXPECT_FALSE(d1.painted()); | 374 EXPECT_FALSE(d1.painted()); |
371 EXPECT_TRUE(d2.painted()); | 375 EXPECT_TRUE(d2.painted()); |
372 EXPECT_FALSE(d3.painted()); | 376 EXPECT_FALSE(d3.painted()); |
373 } | 377 } |
374 | 378 |
375 // Tests no-texture Layers. | 379 // Tests no-texture Layers. |
376 // Create this hierarchy: | 380 // Create this hierarchy: |
377 // L1 - red | 381 // L1 - red |
378 // +-- L2 - NO TEXTURE | 382 // +-- L2 - NO TEXTURE |
379 // | +-- L3 - yellow | 383 // | +-- L3 - yellow |
380 // +-- L4 - magenta | 384 // +-- L4 - magenta |
381 // | 385 // |
382 TEST_F(LayerWithDelegateTest, HierarchyNoTexture) { | 386 TEST_F(LayerWithRealCompositorTest, HierarchyNoTexture) { |
383 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, | 387 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED, |
384 gfx::Rect(20, 20, 400, 400))); | 388 gfx::Rect(20, 20, 400, 400))); |
385 scoped_ptr<Layer> l2(CreateNoTextureLayer(gfx::Rect(10, 10, 350, 350))); | 389 scoped_ptr<Layer> l2(CreateNoTextureLayer(gfx::Rect(10, 10, 350, 350))); |
386 scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW, | 390 scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW, |
387 gfx::Rect(5, 5, 25, 25))); | 391 gfx::Rect(5, 5, 25, 25))); |
388 scoped_ptr<Layer> l4(CreateColorLayer(SK_ColorMAGENTA, | 392 scoped_ptr<Layer> l4(CreateColorLayer(SK_ColorMAGENTA, |
389 gfx::Rect(300, 300, 100, 100))); | 393 gfx::Rect(300, 300, 100, 100))); |
390 | 394 |
391 l1->Add(l2.get()); | 395 l1->Add(l2.get()); |
392 l1->Add(l4.get()); | 396 l1->Add(l4.get()); |
393 l2->Add(l3.get()); | 397 l2->Add(l3.get()); |
394 | 398 |
| 399 GetCompositor()->SetRootLayer(l1.get()); |
| 400 RunPendingMessages(); |
| 401 |
395 DrawTreeLayerDelegate d2; | 402 DrawTreeLayerDelegate d2; |
396 l2->set_delegate(&d2); | 403 l2->set_delegate(&d2); |
397 DrawTreeLayerDelegate d3; | 404 DrawTreeLayerDelegate d3; |
398 l3->set_delegate(&d3); | 405 l3->set_delegate(&d3); |
399 | 406 |
400 compositor()->SetRootLayer(l1.get()); | |
401 | |
402 l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); | 407 l2->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
403 l3->SchedulePaint(gfx::Rect(5, 5, 5, 5)); | 408 l3->SchedulePaint(gfx::Rect(5, 5, 5, 5)); |
404 Draw(); | 409 RunPendingMessages(); |
405 | 410 |
406 // |d2| should not have received a paint notification since it has no texture. | 411 // |d2| should not have received a paint notification since it has no texture. |
407 EXPECT_FALSE(d2.painted()); | 412 EXPECT_FALSE(d2.painted()); |
408 // |d3| should have received a paint notification. | 413 // |d3| should have received a paint notification. |
409 EXPECT_TRUE(d3.painted()); | 414 EXPECT_TRUE(d3.painted()); |
410 } | 415 } |
411 | 416 |
412 class LayerWithNullDelegateTest : public LayerWithDelegateTest { | 417 class LayerWithNullDelegateTest : public LayerWithDelegateTest { |
413 public: | 418 public: |
414 LayerWithNullDelegateTest() {} | 419 LayerWithNullDelegateTest() {} |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 scoped_ptr<Layer> parent(CreateNoTextureLayer(gfx::Rect(0, 0, 400, 400))); | 464 scoped_ptr<Layer> parent(CreateNoTextureLayer(gfx::Rect(0, 0, 400, 400))); |
460 scoped_ptr<Layer> child(CreateNoTextureLayer(gfx::Rect(50, 50, 100, 100))); | 465 scoped_ptr<Layer> child(CreateNoTextureLayer(gfx::Rect(50, 50, 100, 100))); |
461 parent->Add(child.get()); | 466 parent->Add(child.get()); |
462 | 467 |
463 compositor()->SetRootLayer(parent.get()); | 468 compositor()->SetRootLayer(parent.get()); |
464 Draw(); | 469 Draw(); |
465 EXPECT_TRUE(child->texture() == NULL); | 470 EXPECT_TRUE(child->texture() == NULL); |
466 EXPECT_TRUE(parent->texture() == NULL); | 471 EXPECT_TRUE(parent->texture() == NULL); |
467 } | 472 } |
468 | 473 |
| 474 // With the webkit compositor, we don't explicitly textures for layers, making |
| 475 // tests that check that we do fail. |
| 476 #if defined(USE_WEBKIT_COMPOSITOR) |
| 477 #define WEBKIT_COMPOSITOR_FAILS(X) FAILS_ ## X |
| 478 #else |
| 479 #define WEBKIT_COMPOSITOR_FAILS(X) X |
| 480 #endif |
| 481 |
469 // Verifies that a layer does not have a texture when the hole is the size | 482 // Verifies that a layer does not have a texture when the hole is the size |
470 // of the parent layer. | 483 // of the parent layer. |
471 TEST_F(LayerWithNullDelegateTest, LayerNoTextureHoleSizeOfLayer) { | 484 TEST_F(LayerWithNullDelegateTest, |
| 485 WEBKIT_COMPOSITOR_FAILS(LayerNoTextureHoleSizeOfLayer)) { |
472 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | 486 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); |
473 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 487 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
474 parent->Add(child.get()); | 488 parent->Add(child.get()); |
475 | 489 |
476 Draw(); | 490 Draw(); |
477 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); | 491 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); |
478 EXPECT_TRUE(parent->texture() != NULL); | 492 EXPECT_TRUE(parent->texture() != NULL); |
479 | 493 |
480 child->SetBounds(gfx::Rect(0, 0, 400, 400)); | 494 child->SetBounds(gfx::Rect(0, 0, 400, 400)); |
481 Draw(); | 495 Draw(); |
482 EXPECT_TRUE(parent->texture() == NULL); | 496 EXPECT_TRUE(parent->texture() == NULL); |
483 } | 497 } |
484 | 498 |
485 // Verifies that a layer which has opacity == 0 does not have a texture. | 499 // Verifies that a layer which has opacity == 0 does not have a texture. |
486 TEST_F(LayerWithNullDelegateTest, LayerNoTextureTransparent) { | 500 TEST_F(LayerWithNullDelegateTest, |
| 501 WEBKIT_COMPOSITOR_FAILS(LayerNoTextureTransparent)) { |
487 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | 502 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); |
488 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 503 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
489 parent->Add(child.get()); | 504 parent->Add(child.get()); |
490 | 505 |
491 parent->SetOpacity(0.0f); | 506 parent->SetOpacity(0.0f); |
492 child->SetOpacity(0.0f); | 507 child->SetOpacity(0.0f); |
493 Draw(); | 508 Draw(); |
494 EXPECT_TRUE(parent->texture() == NULL); | 509 EXPECT_TRUE(parent->texture() == NULL); |
495 EXPECT_TRUE(child->texture() == NULL); | 510 EXPECT_TRUE(child->texture() == NULL); |
496 | 511 |
497 parent->SetOpacity(1.0f); | 512 parent->SetOpacity(1.0f); |
498 Draw(); | 513 Draw(); |
499 EXPECT_TRUE(parent->texture() != NULL); | 514 EXPECT_TRUE(parent->texture() != NULL); |
500 EXPECT_TRUE(child->texture() == NULL); | 515 EXPECT_TRUE(child->texture() == NULL); |
501 | 516 |
502 child->SetOpacity(1.0f); | 517 child->SetOpacity(1.0f); |
503 Draw(); | 518 Draw(); |
504 EXPECT_TRUE(parent->texture() != NULL); | 519 EXPECT_TRUE(parent->texture() != NULL); |
505 EXPECT_TRUE(child->texture() != NULL); | 520 EXPECT_TRUE(child->texture() != NULL); |
506 } | 521 } |
507 | 522 |
508 // Verifies that no texture is created for a layer with empty bounds. | 523 // Verifies that no texture is created for a layer with empty bounds. |
509 TEST_F(LayerWithNullDelegateTest, LayerTextureNonEmptySchedulePaint) { | 524 TEST_F(LayerWithNullDelegateTest, |
| 525 WEBKIT_COMPOSITOR_FAILS(LayerTextureNonEmptySchedulePaint)) { |
510 scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); | 526 scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); |
511 Draw(); | 527 Draw(); |
512 EXPECT_TRUE(layer->texture() == NULL); | 528 EXPECT_TRUE(layer->texture() == NULL); |
513 | 529 |
514 layer->SetBounds(gfx::Rect(0, 0, 400, 400)); | 530 layer->SetBounds(gfx::Rect(0, 0, 400, 400)); |
515 Draw(); | 531 Draw(); |
516 EXPECT_TRUE(layer->texture() != NULL); | 532 EXPECT_TRUE(layer->texture() != NULL); |
517 } | 533 } |
518 | 534 |
519 // Verifies that when there are many potential holes, the largest one is picked. | 535 // Verifies that when there are many potential holes, the largest one is picked. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 EXPECT_EQ(target_rect, parent->hole_rect()); | 587 EXPECT_EQ(target_rect, parent->hole_rect()); |
572 } | 588 } |
573 } | 589 } |
574 | 590 |
575 // Create this hierarchy: | 591 // Create this hierarchy: |
576 // L1 (no texture) | 592 // L1 (no texture) |
577 // +- L11 (texture) | 593 // +- L11 (texture) |
578 // +- L12 (no texture) (added after L1 is already set as root-layer) | 594 // +- L12 (no texture) (added after L1 is already set as root-layer) |
579 // +- L121 (texture) | 595 // +- L121 (texture) |
580 // +- L122 (texture) | 596 // +- L122 (texture) |
581 TEST_F(LayerWithNullDelegateTest, NoCompositor) { | 597 TEST_F(LayerWithNullDelegateTest, WEBKIT_COMPOSITOR_FAILS(NoCompositor)) { |
582 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 598 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
583 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 599 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
584 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 600 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
585 scoped_ptr<Layer> l121(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 601 scoped_ptr<Layer> l121(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
586 scoped_ptr<Layer> l122(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 602 scoped_ptr<Layer> l122(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
587 | 603 |
588 EXPECT_EQ(NULL, l1->texture()); | 604 EXPECT_EQ(NULL, l1->texture()); |
589 EXPECT_EQ(NULL, l11->texture()); | 605 EXPECT_EQ(NULL, l11->texture()); |
590 EXPECT_EQ(NULL, l12->texture()); | 606 EXPECT_EQ(NULL, l12->texture()); |
591 EXPECT_EQ(NULL, l121->texture()); | 607 EXPECT_EQ(NULL, l121->texture()); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 EXPECT_FALSE(l2->IsDrawn()); | 680 EXPECT_FALSE(l2->IsDrawn()); |
665 EXPECT_FALSE(l3->IsDrawn()); | 681 EXPECT_FALSE(l3->IsDrawn()); |
666 | 682 |
667 l1->SetVisible(true); | 683 l1->SetVisible(true); |
668 EXPECT_TRUE(l1->IsDrawn()); | 684 EXPECT_TRUE(l1->IsDrawn()); |
669 EXPECT_TRUE(l2->IsDrawn()); | 685 EXPECT_TRUE(l2->IsDrawn()); |
670 EXPECT_FALSE(l3->IsDrawn()); | 686 EXPECT_FALSE(l3->IsDrawn()); |
671 } | 687 } |
672 | 688 |
673 } // namespace ui | 689 } // namespace ui |
OLD | NEW |