Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: ui/gfx/compositor/layer_unittest.cc

Issue 7845033: Rework View Layer Draw() to use the Layer::DrawTree() method and the LayerDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/compositor/layer_delegate.h ('k') | ui/gfx/compositor/test_compositor_host_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/scoped_ptr.h" 7 #include "base/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/layer.h" 11 #include "ui/gfx/compositor/layer.h"
11 #include "ui/gfx/compositor/test_compositor_host.h" 12 #include "ui/gfx/compositor/test_compositor_host.h"
12 13
13 namespace ui { 14 namespace ui {
14 15
15 namespace { 16 namespace {
16 17
18 // Simple class that exits the current message loop when compositing finishes.
19 class CompositingEndedObserver : public CompositorObserver {
20 public:
21 CompositingEndedObserver() {}
22 virtual ~CompositingEndedObserver() {}
23
24 // Overridden from CompositorObserver:
25 virtual void OnCompositingEnded() OVERRIDE {
26 MessageLoop::current()->Quit();
27 }
28
29 private:
30 DISALLOW_COPY_AND_ASSIGN(CompositingEndedObserver);
31 };
32
17 class TestLayerDelegate : public LayerDelegate { 33 class TestLayerDelegate : public LayerDelegate {
18 public: 34 public:
19 explicit TestLayerDelegate(Layer* owner) : owner_(owner), color_index_(0) {} 35 explicit TestLayerDelegate(Layer* owner) : owner_(owner), color_index_(0) {}
20 virtual ~TestLayerDelegate() {} 36 virtual ~TestLayerDelegate() {}
21 37
22 void AddColor(SkColor color) { 38 void AddColor(SkColor color) {
23 colors_.push_back(color); 39 colors_.push_back(color);
24 } 40 }
25 41
26 gfx::Size paint_size() const { return paint_size_; } 42 gfx::Size paint_size() const { return paint_size_; }
27 int color_index() const { return color_index_; } 43 int color_index() const { return color_index_; }
28 44
29 // Overridden from LayerDelegate: 45 // Overridden from LayerDelegate:
30 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { 46 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
31 SkBitmap contents = canvas->AsCanvasSkia()->ExtractBitmap(); 47 SkBitmap contents = canvas->AsCanvasSkia()->ExtractBitmap();
32 paint_size_ = gfx::Size(contents.width(), contents.height()); 48 paint_size_ = gfx::Size(contents.width(), contents.height());
33 canvas->FillRectInt(colors_.at(color_index_), 0, 0, 49 canvas->FillRectInt(colors_.at(color_index_), 0, 0,
34 contents.width(), 50 contents.width(),
35 contents.height()); 51 contents.height());
36 color_index_ = ++color_index_ % colors_.size(); 52 color_index_ = ++color_index_ % colors_.size();
37
38 MessageLoop::current()->Quit();
39 } 53 }
40 54
41 private: 55 private:
42 Layer* owner_; 56 Layer* owner_;
43 std::vector<SkColor> colors_; 57 std::vector<SkColor> colors_;
44 int color_index_; 58 int color_index_;
45 gfx::Size paint_size_; 59 gfx::Size paint_size_;
46 60
47 DISALLOW_COPY_AND_ASSIGN(TestLayerDelegate); 61 DISALLOW_COPY_AND_ASSIGN(TestLayerDelegate);
48 }; 62 };
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 101
88 void PaintColorToLayer(Layer* layer, SkColor color) { 102 void PaintColorToLayer(Layer* layer, SkColor color) {
89 scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer)); 103 scoped_ptr<gfx::Canvas> canvas(CreateCanvasForLayer(layer));
90 canvas->FillRectInt(color, 0, 0, layer->bounds().width(), 104 canvas->FillRectInt(color, 0, 0, layer->bounds().width(),
91 layer->bounds().height()); 105 layer->bounds().height());
92 layer->SetCanvas(*canvas->AsCanvasSkia(), layer->bounds().origin()); 106 layer->SetCanvas(*canvas->AsCanvasSkia(), layer->bounds().origin());
93 } 107 }
94 108
95 void DrawTree(Layer* root) { 109 void DrawTree(Layer* root) {
96 window_->GetCompositor()->NotifyStart(); 110 window_->GetCompositor()->NotifyStart();
97 DrawLayerChildren(root); 111 root->DrawTree();
98 window_->GetCompositor()->NotifyEnd(); 112 window_->GetCompositor()->NotifyEnd();
99 } 113 }
100 114
101 void DrawLayerChildren(Layer* layer) {
102 layer->Draw();
103 std::vector<Layer*>::const_iterator it = layer->children().begin();
104 while (it != layer->children().end()) {
105 DrawLayerChildren(*it);
106 ++it;
107 }
108 }
109
110 void RunPendingMessages() { 115 void RunPendingMessages() {
111 MessageLoopForUI::current()->Run(NULL); 116 MessageLoopForUI::current()->Run(NULL);
112 } 117 }
113 118
114 protected: 119 protected:
115 void set_root_layer(Layer* root_layer) { root_layer_ = root_layer; } 120 void set_root_layer(Layer* root_layer) { root_layer_ = root_layer; }
116 121
117 private: 122 private:
118 // Overridden from TestCompositorHostDelegate: 123 // Overridden from TestCompositorHostDelegate:
119 virtual void Draw() { 124 virtual void Draw() {
120 if (root_layer_) 125 if (root_layer_)
121 DrawLayerChildren(root_layer_); 126 root_layer_->DrawTree();
122 } 127 }
123 128
124 MessageLoopForUI message_loop_; 129 MessageLoopForUI message_loop_;
125 scoped_ptr<TestCompositorHost> window_; 130 scoped_ptr<TestCompositorHost> window_;
126 Layer* root_layer_; 131 Layer* root_layer_;
127 132
128 DISALLOW_COPY_AND_ASSIGN(LayerTest); 133 DISALLOW_COPY_AND_ASSIGN(LayerTest);
129 }; 134 };
130 135
136 class LayerQuitOnCompositedTest : public LayerTest {
137 public:
138 LayerQuitOnCompositedTest() {}
139 virtual ~LayerQuitOnCompositedTest() {}
140
141 // Overridden from LayerTest:
142 virtual void SetUp() OVERRIDE {
143 LayerTest::SetUp();
144 GetCompositor()->AddObserver(&compositor_observer_);
145 }
146
147 virtual void TearDown() OVERRIDE {
148 LayerTest::TearDown();
149 GetCompositor()->RemoveObserver(&compositor_observer_);
150 }
151
152 private:
153 CompositingEndedObserver compositor_observer_;
154
155 DISALLOW_COPY_AND_ASSIGN(LayerQuitOnCompositedTest);
156 };
157
131 } 158 }
132 159
133 TEST_F(LayerTest, Draw) { 160 TEST_F(LayerTest, Draw) {
134 scoped_ptr<Layer> layer(CreateColorLayer(SK_ColorRED, 161 scoped_ptr<Layer> layer(CreateColorLayer(SK_ColorRED,
135 gfx::Rect(20, 20, 50, 50))); 162 gfx::Rect(20, 20, 50, 50)));
136 DrawTree(layer.get()); 163 DrawTree(layer.get());
137 } 164 }
138 165
139 // Create this hierarchy: 166 // Create this hierarchy:
140 // L1 - red 167 // L1 - red
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 Layer::ConvertPointToLayer(l3.get(), l1.get(), &point1_in_l3_coords); 225 Layer::ConvertPointToLayer(l3.get(), l1.get(), &point1_in_l3_coords);
199 gfx::Point point1_in_l1_coords(25, 25); 226 gfx::Point point1_in_l1_coords(25, 25);
200 EXPECT_EQ(point1_in_l1_coords, point1_in_l3_coords); 227 EXPECT_EQ(point1_in_l1_coords, point1_in_l3_coords);
201 228
202 gfx::Point point2_in_l1_coords(5, 5); 229 gfx::Point point2_in_l1_coords(5, 5);
203 Layer::ConvertPointToLayer(l1.get(), l3.get(), &point2_in_l1_coords); 230 Layer::ConvertPointToLayer(l1.get(), l3.get(), &point2_in_l1_coords);
204 gfx::Point point2_in_l3_coords(-15, -15); 231 gfx::Point point2_in_l3_coords(-15, -15);
205 EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords); 232 EXPECT_EQ(point2_in_l3_coords, point2_in_l1_coords);
206 } 233 }
207 234
208 TEST_F(LayerTest, Delegate) { 235 TEST_F(LayerQuitOnCompositedTest, Delegate) {
209 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK, 236 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorBLACK,
210 gfx::Rect(20, 20, 400, 400))); 237 gfx::Rect(20, 20, 400, 400)));
211 TestLayerDelegate delegate(l1.get()); 238 TestLayerDelegate delegate(l1.get());
212 l1->set_delegate(&delegate); 239 l1->set_delegate(&delegate);
213 delegate.AddColor(SK_ColorWHITE); 240 delegate.AddColor(SK_ColorWHITE);
214 delegate.AddColor(SK_ColorYELLOW); 241 delegate.AddColor(SK_ColorYELLOW);
215 delegate.AddColor(SK_ColorGREEN); 242 delegate.AddColor(SK_ColorGREEN);
216 243
217 set_root_layer(l1.get()); 244 set_root_layer(l1.get());
218 245
219 l1->SchedulePaint(gfx::Rect(0, 0, 400, 400)); 246 l1->SchedulePaint(gfx::Rect(0, 0, 400, 400));
220 RunPendingMessages(); 247 RunPendingMessages();
221 EXPECT_EQ(delegate.color_index(), 1); 248 EXPECT_EQ(delegate.color_index(), 1);
222 EXPECT_EQ(delegate.paint_size(), l1->bounds().size()); 249 EXPECT_EQ(delegate.paint_size(), l1->bounds().size());
223 250
224 l1->SchedulePaint(gfx::Rect(10, 10, 200, 200)); 251 l1->SchedulePaint(gfx::Rect(10, 10, 200, 200));
225 RunPendingMessages(); 252 RunPendingMessages();
226 EXPECT_EQ(delegate.color_index(), 2); 253 EXPECT_EQ(delegate.color_index(), 2);
227 EXPECT_EQ(delegate.paint_size(), gfx::Size(200, 200)); 254 EXPECT_EQ(delegate.paint_size(), gfx::Size(200, 200));
228 255
229 l1->SchedulePaint(gfx::Rect(5, 5, 50, 50)); 256 l1->SchedulePaint(gfx::Rect(5, 5, 50, 50));
230 RunPendingMessages(); 257 RunPendingMessages();
231 EXPECT_EQ(delegate.color_index(), 0); 258 EXPECT_EQ(delegate.color_index(), 0);
232 EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50)); 259 EXPECT_EQ(delegate.paint_size(), gfx::Size(50, 50));
233 } 260 }
234 261
262 namespace {
263
264 class DrawTreeLayerDelegate : public LayerDelegate {
265 public:
266 DrawTreeLayerDelegate() : painted_(false) {}
267 virtual ~DrawTreeLayerDelegate() {}
268
269 void Reset() {
270 painted_ = false;
271 }
272
273 bool painted() const { return painted_; }
274
275 // Overridden from LayerDelegate:
276 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
277 painted_ = true;
278 }
279
280 private:
281 bool painted_;
282
283 DISALLOW_COPY_AND_ASSIGN(DrawTreeLayerDelegate);
284 };
285
286 } // namespace
287
288 TEST_F(LayerQuitOnCompositedTest, DrawTree) {
289 scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorRED,
290 gfx::Rect(20, 20, 400, 400)));
291 scoped_ptr<Layer> l2(CreateColorLayer(SK_ColorBLUE,
292 gfx::Rect(10, 10, 350, 350)));
293 scoped_ptr<Layer> l3(CreateColorLayer(SK_ColorYELLOW,
294 gfx::Rect(10, 10, 100, 100)));
295 l1->Add(l2.get());
296 l2->Add(l3.get());
297
298 DrawTreeLayerDelegate d1;
299 l1->set_delegate(&d1);
300 DrawTreeLayerDelegate d2;
301 l2->set_delegate(&d2);
302 DrawTreeLayerDelegate d3;
303 l3->set_delegate(&d3);
304
305 set_root_layer(l1.get());
306
307 l2->SchedulePaint(gfx::Rect(5, 5, 5, 5));
308 RunPendingMessages();
309 EXPECT_FALSE(d1.painted());
310 EXPECT_TRUE(d2.painted());
311 EXPECT_FALSE(d3.painted());
312 }
313
235 } // namespace ui 314 } // namespace ui
236 315
OLDNEW
« no previous file with comments | « ui/gfx/compositor/layer_delegate.h ('k') | ui/gfx/compositor/test_compositor_host_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698