| Index: ui/gfx/compositor/layer_unittest.cc
|
| ===================================================================
|
| --- ui/gfx/compositor/layer_unittest.cc (revision 100773)
|
| +++ ui/gfx/compositor/layer_unittest.cc (working copy)
|
| @@ -7,6 +7,7 @@
|
| #include "base/scoped_ptr.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/gfx/canvas_skia.h"
|
| +#include "ui/gfx/compositor/compositor_observer.h"
|
| #include "ui/gfx/compositor/layer.h"
|
| #include "ui/gfx/compositor/test_compositor_host.h"
|
|
|
| @@ -14,6 +15,21 @@
|
|
|
| namespace {
|
|
|
| +// Simple class that exits the current message loop when compositing finishes.
|
| +class CompositingEndedObserver : public CompositorObserver {
|
| + public:
|
| + CompositingEndedObserver() {}
|
| + virtual ~CompositingEndedObserver() {}
|
| +
|
| + // Overridden from CompositorObserver:
|
| + virtual void OnCompositingEnded() OVERRIDE {
|
| + MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(CompositingEndedObserver);
|
| +};
|
| +
|
| class TestLayerDelegate : public LayerDelegate {
|
| public:
|
| explicit TestLayerDelegate(Layer* owner) : owner_(owner), color_index_(0) {}
|
| @@ -27,15 +43,13 @@
|
| int color_index() const { return color_index_; }
|
|
|
| // Overridden from LayerDelegate:
|
| - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
|
| + virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
|
| SkBitmap contents = canvas->AsCanvasSkia()->ExtractBitmap();
|
| paint_size_ = gfx::Size(contents.width(), contents.height());
|
| canvas->FillRectInt(colors_.at(color_index_), 0, 0,
|
| contents.width(),
|
| contents.height());
|
| color_index_ = ++color_index_ % colors_.size();
|
| -
|
| - MessageLoop::current()->Quit();
|
| }
|
|
|
| private:
|
| @@ -94,19 +108,10 @@
|
|
|
| void DrawTree(Layer* root) {
|
| window_->GetCompositor()->NotifyStart();
|
| - DrawLayerChildren(root);
|
| + root->DrawTree();
|
| window_->GetCompositor()->NotifyEnd();
|
| }
|
|
|
| - void DrawLayerChildren(Layer* layer) {
|
| - layer->Draw();
|
| - std::vector<Layer*>::const_iterator it = layer->children().begin();
|
| - while (it != layer->children().end()) {
|
| - DrawLayerChildren(*it);
|
| - ++it;
|
| - }
|
| - }
|
| -
|
| void RunPendingMessages() {
|
| MessageLoopForUI::current()->Run(NULL);
|
| }
|
| @@ -118,7 +123,7 @@
|
| // Overridden from TestCompositorHostDelegate:
|
| virtual void Draw() {
|
| if (root_layer_)
|
| - DrawLayerChildren(root_layer_);
|
| + root_layer_->DrawTree();
|
| }
|
|
|
| MessageLoopForUI message_loop_;
|
| @@ -128,6 +133,28 @@
|
| DISALLOW_COPY_AND_ASSIGN(LayerTest);
|
| };
|
|
|
| +class LayerQuitOnCompositedTest : public LayerTest {
|
| + public:
|
| + LayerQuitOnCompositedTest() {}
|
| + virtual ~LayerQuitOnCompositedTest() {}
|
| +
|
| + // Overridden from LayerTest:
|
| + virtual void SetUp() OVERRIDE {
|
| + LayerTest::SetUp();
|
| + GetCompositor()->AddObserver(&compositor_observer_);
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + LayerTest::TearDown();
|
| + GetCompositor()->RemoveObserver(&compositor_observer_);
|
| + }
|
| +
|
| + private:
|
| + CompositingEndedObserver compositor_observer_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(LayerQuitOnCompositedTest);
|
| +};
|
| +
|
| }
|
|
|
| TEST_F(LayerTest, Draw) {
|
| @@ -205,7 +232,7 @@
|
| EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords);
|
| }
|
|
|
| -TEST_F(LayerTest, Delegate) {
|
| +TEST_F(LayerQuitOnCompositedTest, Delegate) {
|
| scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK,
|
| gfx::Rect(20, 20, 400, 400)));
|
| TestLayerDelegate delegate(l1.get());
|
| @@ -232,5 +259,57 @@
|
| EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50));
|
| }
|
|
|
| +namespace {
|
| +
|
| +class DrawTreeLayerDelegate : public LayerDelegate {
|
| + public:
|
| + DrawTreeLayerDelegate() : painted_(false) {}
|
| + virtual ~DrawTreeLayerDelegate() {}
|
| +
|
| + void Reset() {
|
| + painted_ = false;
|
| + }
|
| +
|
| + bool painted() const { return painted_; }
|
| +
|
| + // Overridden from LayerDelegate:
|
| + virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
|
| + painted_ = true;
|
| + }
|
| +
|
| + private:
|
| + bool painted_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DrawTreeLayerDelegate);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST_F(LayerQuitOnCompositedTest, DrawTree) {
|
| + scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED,
|
| + gfx::Rect(20, 20, 400, 400)));
|
| + scoped_ptr<Layer> l2(CreateColorLayer(SK_ColorBLUE,
|
| + gfx::Rect(10, 10, 350, 350)));
|
| + scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW,
|
| + gfx::Rect(10, 10, 100, 100)));
|
| + l1->Add(l2.get());
|
| + l2->Add(l3.get());
|
| +
|
| + DrawTreeLayerDelegate d1;
|
| + l1->set_delegate(&d1);
|
| + DrawTreeLayerDelegate d2;
|
| + l2->set_delegate(&d2);
|
| + DrawTreeLayerDelegate d3;
|
| + l3->set_delegate(&d3);
|
| +
|
| + set_root_layer(l1.get());
|
| +
|
| + l2->SchedulePaint(gfx::Rect(5, 5, 5, 5));
|
| + RunPendingMessages();
|
| + EXPECT_FALSE(d1.painted());
|
| + EXPECT_TRUE(d2.painted());
|
| + EXPECT_FALSE(d3.painted());
|
| +}
|
| +
|
| } // namespace ui
|
|
|
|
|