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

Side by Side Diff: cc/trees/layer_tree_host_unittest_damage.cc

Issue 645853008: Standardize usage of virtual/override/final in cc/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Formatted Created 6 years, 2 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "cc/test/fake_content_layer.h" 12 #include "cc/test/fake_content_layer.h"
13 #include "cc/test/fake_content_layer_client.h" 13 #include "cc/test/fake_content_layer_client.h"
14 #include "cc/test/fake_painted_scrollbar_layer.h" 14 #include "cc/test/fake_painted_scrollbar_layer.h"
15 #include "cc/test/fake_picture_layer.h" 15 #include "cc/test/fake_picture_layer.h"
16 #include "cc/test/layer_tree_test.h" 16 #include "cc/test/layer_tree_test.h"
17 #include "cc/trees/damage_tracker.h" 17 #include "cc/trees/damage_tracker.h"
18 #include "cc/trees/layer_tree_impl.h" 18 #include "cc/trees/layer_tree_impl.h"
19 19
20 namespace cc { 20 namespace cc {
21 namespace { 21 namespace {
22 22
23 // These tests deal with damage tracking. 23 // These tests deal with damage tracking.
24 class LayerTreeHostDamageTest : public LayerTreeTest {}; 24 class LayerTreeHostDamageTest : public LayerTreeTest {};
25 25
26 // LayerTreeHost::SetNeedsRedraw should damage the whole viewport. 26 // LayerTreeHost::SetNeedsRedraw should damage the whole viewport.
27 class LayerTreeHostDamageTestSetNeedsRedraw 27 class LayerTreeHostDamageTestSetNeedsRedraw
28 : public LayerTreeHostDamageTest { 28 : public LayerTreeHostDamageTest {
29 virtual void SetupTree() override { 29 void SetupTree() override {
30 // Viewport is 10x10. 30 // Viewport is 10x10.
31 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_); 31 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
32 root->SetBounds(gfx::Size(10, 10)); 32 root->SetBounds(gfx::Size(10, 10));
33 33
34 layer_tree_host()->SetRootLayer(root); 34 layer_tree_host()->SetRootLayer(root);
35 LayerTreeHostDamageTest::SetupTree(); 35 LayerTreeHostDamageTest::SetupTree();
36 } 36 }
37 37
38 virtual void BeginTest() override { 38 void BeginTest() override {
39 draw_count_ = 0; 39 draw_count_ = 0;
40 PostSetNeedsCommitToMainThread(); 40 PostSetNeedsCommitToMainThread();
41 } 41 }
42 42
43 virtual void DidCommitAndDrawFrame() override { 43 void DidCommitAndDrawFrame() override {
44 switch (layer_tree_host()->source_frame_number()) { 44 switch (layer_tree_host()->source_frame_number()) {
45 case 1: 45 case 1:
46 layer_tree_host()->SetNeedsRedraw(); 46 layer_tree_host()->SetNeedsRedraw();
47 break; 47 break;
48 } 48 }
49 } 49 }
50 50
51 virtual DrawResult PrepareToDrawOnThread( 51 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* impl,
52 LayerTreeHostImpl* impl, 52 LayerTreeHostImpl::FrameData* frame_data,
53 LayerTreeHostImpl::FrameData* frame_data, 53 DrawResult draw_result) override {
54 DrawResult draw_result) override {
55 EXPECT_EQ(DRAW_SUCCESS, draw_result); 54 EXPECT_EQ(DRAW_SUCCESS, draw_result);
56 55
57 RenderSurfaceImpl* root_surface = 56 RenderSurfaceImpl* root_surface =
58 impl->active_tree()->root_layer()->render_surface(); 57 impl->active_tree()->root_layer()->render_surface();
59 gfx::RectF root_damage = 58 gfx::RectF root_damage =
60 root_surface->damage_tracker()->current_damage_rect(); 59 root_surface->damage_tracker()->current_damage_rect();
61 60
62 switch (draw_count_) { 61 switch (draw_count_) {
63 case 0: 62 case 0:
64 // The first frame has full damage. 63 // The first frame has full damage.
65 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString()); 64 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString());
66 break; 65 break;
67 case 1: 66 case 1:
68 // The second frame has full damage. 67 // The second frame has full damage.
69 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString()); 68 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString());
70 EndTest(); 69 EndTest();
71 break; 70 break;
72 case 2: 71 case 2:
73 NOTREACHED(); 72 NOTREACHED();
74 } 73 }
75 74
76 ++draw_count_; 75 ++draw_count_;
77 return draw_result; 76 return draw_result;
78 } 77 }
79 78
80 virtual void AfterTest() override {} 79 void AfterTest() override {}
81 80
82 int draw_count_; 81 int draw_count_;
83 FakeContentLayerClient client_; 82 FakeContentLayerClient client_;
84 }; 83 };
85 84
86 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetNeedsRedraw); 85 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetNeedsRedraw);
87 86
88 // LayerTreeHost::SetViewportSize should damage the whole viewport. 87 // LayerTreeHost::SetViewportSize should damage the whole viewport.
89 class LayerTreeHostDamageTestSetViewportSize 88 class LayerTreeHostDamageTestSetViewportSize
90 : public LayerTreeHostDamageTest { 89 : public LayerTreeHostDamageTest {
91 virtual void SetupTree() override { 90 void SetupTree() override {
92 // Viewport is 10x10. 91 // Viewport is 10x10.
93 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_); 92 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
94 root->SetBounds(gfx::Size(10, 10)); 93 root->SetBounds(gfx::Size(10, 10));
95 94
96 layer_tree_host()->SetRootLayer(root); 95 layer_tree_host()->SetRootLayer(root);
97 LayerTreeHostDamageTest::SetupTree(); 96 LayerTreeHostDamageTest::SetupTree();
98 } 97 }
99 98
100 virtual void BeginTest() override { 99 void BeginTest() override {
101 draw_count_ = 0; 100 draw_count_ = 0;
102 PostSetNeedsCommitToMainThread(); 101 PostSetNeedsCommitToMainThread();
103 } 102 }
104 103
105 virtual void DidCommitAndDrawFrame() override { 104 void DidCommitAndDrawFrame() override {
106 switch (layer_tree_host()->source_frame_number()) { 105 switch (layer_tree_host()->source_frame_number()) {
107 case 1: 106 case 1:
108 layer_tree_host()->SetViewportSize(gfx::Size(15, 15)); 107 layer_tree_host()->SetViewportSize(gfx::Size(15, 15));
109 break; 108 break;
110 } 109 }
111 } 110 }
112 111
113 virtual DrawResult PrepareToDrawOnThread( 112 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* impl,
114 LayerTreeHostImpl* impl, 113 LayerTreeHostImpl::FrameData* frame_data,
115 LayerTreeHostImpl::FrameData* frame_data, 114 DrawResult draw_result) override {
116 DrawResult draw_result) override {
117 EXPECT_EQ(DRAW_SUCCESS, draw_result); 115 EXPECT_EQ(DRAW_SUCCESS, draw_result);
118 116
119 RenderSurfaceImpl* root_surface = 117 RenderSurfaceImpl* root_surface =
120 impl->active_tree()->root_layer()->render_surface(); 118 impl->active_tree()->root_layer()->render_surface();
121 gfx::RectF root_damage = 119 gfx::RectF root_damage =
122 root_surface->damage_tracker()->current_damage_rect(); 120 root_surface->damage_tracker()->current_damage_rect();
123 121
124 switch (draw_count_) { 122 switch (draw_count_) {
125 case 0: 123 case 0:
126 // The first frame has full damage. 124 // The first frame has full damage.
127 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString()); 125 EXPECT_EQ(gfx::RectF(10.f, 10.f).ToString(), root_damage.ToString());
128 break; 126 break;
129 case 1: 127 case 1:
130 // The second frame has full damage. 128 // The second frame has full damage.
131 EXPECT_EQ(gfx::RectF(15.f, 15.f).ToString(), root_damage.ToString()); 129 EXPECT_EQ(gfx::RectF(15.f, 15.f).ToString(), root_damage.ToString());
132 EndTest(); 130 EndTest();
133 break; 131 break;
134 case 2: 132 case 2:
135 NOTREACHED(); 133 NOTREACHED();
136 } 134 }
137 135
138 ++draw_count_; 136 ++draw_count_;
139 return draw_result; 137 return draw_result;
140 } 138 }
141 139
142 virtual void AfterTest() override {} 140 void AfterTest() override {}
143 141
144 int draw_count_; 142 int draw_count_;
145 FakeContentLayerClient client_; 143 FakeContentLayerClient client_;
146 }; 144 };
147 145
148 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize); 146 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize);
149 147
150 class LayerTreeHostDamageTestNoDamageDoesNotSwap 148 class LayerTreeHostDamageTestNoDamageDoesNotSwap
151 : public LayerTreeHostDamageTest { 149 : public LayerTreeHostDamageTest {
152 virtual void BeginTest() override { 150 void BeginTest() override {
153 expect_swap_and_succeed_ = 0; 151 expect_swap_and_succeed_ = 0;
154 did_swaps_ = 0; 152 did_swaps_ = 0;
155 did_swap_and_succeed_ = 0; 153 did_swap_and_succeed_ = 0;
156 PostSetNeedsCommitToMainThread(); 154 PostSetNeedsCommitToMainThread();
157 } 155 }
158 156
159 virtual void SetupTree() override { 157 void SetupTree() override {
160 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_); 158 scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
161 root->SetBounds(gfx::Size(10, 10)); 159 root->SetBounds(gfx::Size(10, 10));
162 160
163 // Most of the layer isn't visible. 161 // Most of the layer isn't visible.
164 content_ = FakeContentLayer::Create(&client_); 162 content_ = FakeContentLayer::Create(&client_);
165 content_->SetBounds(gfx::Size(2000, 100)); 163 content_->SetBounds(gfx::Size(2000, 100));
166 root->AddChild(content_); 164 root->AddChild(content_);
167 165
168 layer_tree_host()->SetRootLayer(root); 166 layer_tree_host()->SetRootLayer(root);
169 LayerTreeHostDamageTest::SetupTree(); 167 LayerTreeHostDamageTest::SetupTree();
170 } 168 }
171 169
172 virtual DrawResult PrepareToDrawOnThread( 170 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
173 LayerTreeHostImpl* host_impl, 171 LayerTreeHostImpl::FrameData* frame_data,
174 LayerTreeHostImpl::FrameData* frame_data, 172 DrawResult draw_result) override {
175 DrawResult draw_result) override {
176 EXPECT_EQ(DRAW_SUCCESS, draw_result); 173 EXPECT_EQ(DRAW_SUCCESS, draw_result);
177 174
178 int source_frame = host_impl->active_tree()->source_frame_number(); 175 int source_frame = host_impl->active_tree()->source_frame_number();
179 switch (source_frame) { 176 switch (source_frame) {
180 case 0: 177 case 0:
181 // The first frame has damage, so we should draw and swap. 178 // The first frame has damage, so we should draw and swap.
182 ++expect_swap_and_succeed_; 179 ++expect_swap_and_succeed_;
183 break; 180 break;
184 case 1: 181 case 1:
185 // The second frame has no damage, so we should not draw and swap. 182 // The second frame has no damage, so we should not draw and swap.
186 break; 183 break;
187 case 2: 184 case 2:
188 // The third frame has damage again, so we should draw and swap. 185 // The third frame has damage again, so we should draw and swap.
189 ++expect_swap_and_succeed_; 186 ++expect_swap_and_succeed_;
190 break; 187 break;
191 case 3: 188 case 3:
192 // The fourth frame has no visible damage, so we should not draw and 189 // The fourth frame has no visible damage, so we should not draw and
193 // swap. 190 // swap.
194 EndTest(); 191 EndTest();
195 break; 192 break;
196 } 193 }
197 return draw_result; 194 return draw_result;
198 } 195 }
199 196
200 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 197 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
201 bool result) override {
202 ++did_swaps_; 198 ++did_swaps_;
203 if (result) 199 if (result)
204 ++did_swap_and_succeed_; 200 ++did_swap_and_succeed_;
205 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_); 201 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
206 } 202 }
207 203
208 virtual void DidCommit() override { 204 void DidCommit() override {
209 int next_frame = layer_tree_host()->source_frame_number(); 205 int next_frame = layer_tree_host()->source_frame_number();
210 switch (next_frame) { 206 switch (next_frame) {
211 case 1: 207 case 1:
212 layer_tree_host()->SetNeedsCommit(); 208 layer_tree_host()->SetNeedsCommit();
213 break; 209 break;
214 case 2: 210 case 2:
215 // Cause visible damage. 211 // Cause visible damage.
216 content_->SetNeedsDisplayRect( 212 content_->SetNeedsDisplayRect(
217 gfx::Rect(layer_tree_host()->device_viewport_size())); 213 gfx::Rect(layer_tree_host()->device_viewport_size()));
218 break; 214 break;
219 case 3: 215 case 3:
220 // Cause non-visible damage. 216 // Cause non-visible damage.
221 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10)); 217 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10));
222 layer_tree_host()->SetNeedsCommit(); 218 layer_tree_host()->SetNeedsCommit();
223 break; 219 break;
224 } 220 }
225 } 221 }
226 222
227 virtual void AfterTest() override { 223 void AfterTest() override {
228 EXPECT_EQ(4, did_swaps_); 224 EXPECT_EQ(4, did_swaps_);
229 EXPECT_EQ(2, expect_swap_and_succeed_); 225 EXPECT_EQ(2, expect_swap_and_succeed_);
230 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_); 226 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
231 } 227 }
232 228
233 FakeContentLayerClient client_; 229 FakeContentLayerClient client_;
234 scoped_refptr<FakeContentLayer> content_; 230 scoped_refptr<FakeContentLayer> content_;
235 int expect_swap_and_succeed_; 231 int expect_swap_and_succeed_;
236 int did_swaps_; 232 int did_swaps_;
237 int did_swap_and_succeed_; 233 int did_swap_and_succeed_;
238 }; 234 };
239 235
240 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( 236 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(
241 LayerTreeHostDamageTestNoDamageDoesNotSwap); 237 LayerTreeHostDamageTestNoDamageDoesNotSwap);
242 238
243 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest { 239 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest {
244 virtual void BeginTest() override { 240 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
245 PostSetNeedsCommitToMainThread();
246 }
247 241
248 virtual void SetupTree() override { 242 void SetupTree() override {
249 root_ = FakeContentLayer::Create(&client_); 243 root_ = FakeContentLayer::Create(&client_);
250 child_ = FakeContentLayer::Create(&client_); 244 child_ = FakeContentLayer::Create(&client_);
251 245
252 root_->SetBounds(gfx::Size(500, 500)); 246 root_->SetBounds(gfx::Size(500, 500));
253 child_->SetPosition(gfx::Point(100, 100)); 247 child_->SetPosition(gfx::Point(100, 100));
254 child_->SetBounds(gfx::Size(30, 30)); 248 child_->SetBounds(gfx::Size(30, 30));
255 249
256 root_->AddChild(child_); 250 root_->AddChild(child_);
257 layer_tree_host()->SetRootLayer(root_); 251 layer_tree_host()->SetRootLayer(root_);
258 LayerTreeHostDamageTest::SetupTree(); 252 LayerTreeHostDamageTest::SetupTree();
259 } 253 }
260 254
261 virtual DrawResult PrepareToDrawOnThread( 255 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
262 LayerTreeHostImpl* host_impl, 256 LayerTreeHostImpl::FrameData* frame_data,
263 LayerTreeHostImpl::FrameData* frame_data, 257 DrawResult draw_result) override {
264 DrawResult draw_result) override {
265 EXPECT_EQ(DRAW_SUCCESS, draw_result); 258 EXPECT_EQ(DRAW_SUCCESS, draw_result);
266 259
267 RenderSurfaceImpl* root_surface = 260 RenderSurfaceImpl* root_surface =
268 host_impl->active_tree()->root_layer()->render_surface(); 261 host_impl->active_tree()->root_layer()->render_surface();
269 gfx::RectF root_damage = 262 gfx::RectF root_damage =
270 root_surface->damage_tracker()->current_damage_rect(); 263 root_surface->damage_tracker()->current_damage_rect();
271 root_damage.Intersect(root_surface->content_rect()); 264 root_damage.Intersect(root_surface->content_rect());
272 265
273 int source_frame = host_impl->active_tree()->source_frame_number(); 266 int source_frame = host_impl->active_tree()->source_frame_number();
274 switch (source_frame) { 267 switch (source_frame) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 EXPECT_EQ(gfx::RectF(root_surface->content_rect()).ToString(), 320 EXPECT_EQ(gfx::RectF(root_surface->content_rect()).ToString(),
328 root_damage.ToString()); 321 root_damage.ToString());
329 EXPECT_FALSE(frame_data->has_no_damage); 322 EXPECT_FALSE(frame_data->has_no_damage);
330 323
331 EndTest(); 324 EndTest();
332 break; 325 break;
333 } 326 }
334 return draw_result; 327 return draw_result;
335 } 328 }
336 329
337 virtual void DidCommitAndDrawFrame() override { 330 void DidCommitAndDrawFrame() override {
338 if (!TestEnded()) 331 if (!TestEnded())
339 layer_tree_host()->SetNeedsCommit(); 332 layer_tree_host()->SetNeedsCommit();
340 333
341 if (!child_damage_rect_.IsEmpty()) { 334 if (!child_damage_rect_.IsEmpty()) {
342 child_->SetNeedsDisplayRect(child_damage_rect_); 335 child_->SetNeedsDisplayRect(child_damage_rect_);
343 child_damage_rect_ = gfx::Rect(); 336 child_damage_rect_ = gfx::Rect();
344 } 337 }
345 } 338 }
346 339
347 virtual void AfterTest() override {} 340 void AfterTest() override {}
348 341
349 FakeContentLayerClient client_; 342 FakeContentLayerClient client_;
350 scoped_refptr<FakeContentLayer> root_; 343 scoped_refptr<FakeContentLayer> root_;
351 scoped_refptr<FakeContentLayer> child_; 344 scoped_refptr<FakeContentLayer> child_;
352 gfx::Rect child_damage_rect_; 345 gfx::Rect child_damage_rect_;
353 }; 346 };
354 347
355 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostDamageTestForcedFullDamage); 348 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(LayerTreeHostDamageTestForcedFullDamage);
356 349
357 class LayerTreeHostScrollbarDamageTest : public LayerTreeHostDamageTest { 350 class LayerTreeHostScrollbarDamageTest : public LayerTreeHostDamageTest {
358 virtual void SetupTree() override { 351 void SetupTree() override {
359 scoped_refptr<Layer> root_layer = Layer::Create(); 352 scoped_refptr<Layer> root_layer = Layer::Create();
360 root_layer->SetBounds(gfx::Size(400, 400)); 353 root_layer->SetBounds(gfx::Size(400, 400));
361 root_layer->SetMasksToBounds(true); 354 root_layer->SetMasksToBounds(true);
362 layer_tree_host()->SetRootLayer(root_layer); 355 layer_tree_host()->SetRootLayer(root_layer);
363 356
364 scoped_refptr<Layer> scroll_clip_layer = Layer::Create(); 357 scoped_refptr<Layer> scroll_clip_layer = Layer::Create();
365 scoped_refptr<Layer> content_layer = FakeContentLayer::Create(&client_); 358 scoped_refptr<Layer> content_layer = FakeContentLayer::Create(&client_);
366 content_layer->SetScrollClipLayerId(scroll_clip_layer->id()); 359 content_layer->SetScrollClipLayerId(scroll_clip_layer->id());
367 content_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); 360 content_layer->SetScrollOffset(gfx::ScrollOffset(10, 20));
368 content_layer->SetBounds(gfx::Size(100, 200)); 361 content_layer->SetBounds(gfx::Size(100, 200));
(...skipping 19 matching lines...) Expand all
388 381
389 LayerTreeHostDamageTest::SetupTree(); 382 LayerTreeHostDamageTest::SetupTree();
390 } 383 }
391 384
392 private: 385 private:
393 FakeContentLayerClient client_; 386 FakeContentLayerClient client_;
394 }; 387 };
395 388
396 class LayerTreeHostDamageTestScrollbarDoesDamage 389 class LayerTreeHostDamageTestScrollbarDoesDamage
397 : public LayerTreeHostScrollbarDamageTest { 390 : public LayerTreeHostScrollbarDamageTest {
398 virtual void BeginTest() override { 391 void BeginTest() override {
399 did_swaps_ = 0; 392 did_swaps_ = 0;
400 PostSetNeedsCommitToMainThread(); 393 PostSetNeedsCommitToMainThread();
401 } 394 }
402 395
403 virtual DrawResult PrepareToDrawOnThread( 396 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
404 LayerTreeHostImpl* host_impl, 397 LayerTreeHostImpl::FrameData* frame_data,
405 LayerTreeHostImpl::FrameData* frame_data, 398 DrawResult draw_result) override {
406 DrawResult draw_result) override {
407 EXPECT_EQ(DRAW_SUCCESS, draw_result); 399 EXPECT_EQ(DRAW_SUCCESS, draw_result);
408 RenderSurfaceImpl* root_surface = 400 RenderSurfaceImpl* root_surface =
409 host_impl->active_tree()->root_layer()->render_surface(); 401 host_impl->active_tree()->root_layer()->render_surface();
410 gfx::RectF root_damage = 402 gfx::RectF root_damage =
411 root_surface->damage_tracker()->current_damage_rect(); 403 root_surface->damage_tracker()->current_damage_rect();
412 root_damage.Intersect(root_surface->content_rect()); 404 root_damage.Intersect(root_surface->content_rect());
413 switch (did_swaps_) { 405 switch (did_swaps_) {
414 case 0: 406 case 0:
415 // The first frame has damage, so we should draw and swap. 407 // The first frame has damage, so we should draw and swap.
416 break; 408 break;
417 case 1: 409 case 1:
418 // The second frame should not damage the scrollbars. 410 // The second frame should not damage the scrollbars.
419 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100))); 411 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100)));
420 break; 412 break;
421 case 2: 413 case 2:
422 // The third frame should damage the scrollbars. 414 // The third frame should damage the scrollbars.
423 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); 415 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100)));
424 break; 416 break;
425 case 3: 417 case 3:
426 // The fourth frame should damage the scrollbars. 418 // The fourth frame should damage the scrollbars.
427 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); 419 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100)));
428 EndTest(); 420 EndTest();
429 break; 421 break;
430 } 422 }
431 return draw_result; 423 return draw_result;
432 } 424 }
433 425
434 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 426 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
435 bool result) override {
436 ++did_swaps_; 427 ++did_swaps_;
437 EXPECT_TRUE(result); 428 EXPECT_TRUE(result);
438 LayerImpl* root = host_impl->active_tree()->root_layer(); 429 LayerImpl* root = host_impl->active_tree()->root_layer();
439 LayerImpl* scroll_clip_layer = root->children()[0]; 430 LayerImpl* scroll_clip_layer = root->children()[0];
440 LayerImpl* scroll_layer = scroll_clip_layer->children()[0]; 431 LayerImpl* scroll_layer = scroll_clip_layer->children()[0];
441 switch (did_swaps_) { 432 switch (did_swaps_) {
442 case 1: 433 case 1:
443 // Test that modifying the position of the content layer (not 434 // Test that modifying the position of the content layer (not
444 // scrolling) won't damage the scrollbar. 435 // scrolling) won't damage the scrollbar.
445 scroll_layer->SetPosition(gfx::Point(1, 1)); 436 scroll_layer->SetPosition(gfx::Point(1, 1));
446 scroll_layer->SetScrollOffset(scroll_layer->scroll_offset()); 437 scroll_layer->SetScrollOffset(scroll_layer->scroll_offset());
447 host_impl->SetNeedsRedraw(); 438 host_impl->SetNeedsRedraw();
448 break; 439 break;
449 case 2: 440 case 2:
450 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); 441 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f));
451 host_impl->SetNeedsRedraw(); 442 host_impl->SetNeedsRedraw();
452 break; 443 break;
453 case 3: 444 case 3:
454 scroll_layer->SetBounds(gfx::Size(root->bounds().width() + 60, 445 scroll_layer->SetBounds(gfx::Size(root->bounds().width() + 60,
455 root->bounds().height() + 100)); 446 root->bounds().height() + 100));
456 host_impl->SetNeedsRedraw(); 447 host_impl->SetNeedsRedraw();
457 break; 448 break;
458 } 449 }
459 } 450 }
460 451
461 virtual void AfterTest() override { 452 void AfterTest() override { EXPECT_EQ(4, did_swaps_); }
462 EXPECT_EQ(4, did_swaps_);
463 }
464 453
465 int did_swaps_; 454 int did_swaps_;
466 }; 455 };
467 456
468 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarDoesDamage); 457 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarDoesDamage);
469 458
470 class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage 459 class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage
471 : public LayerTreeHostScrollbarDamageTest { 460 : public LayerTreeHostScrollbarDamageTest {
472 virtual void BeginTest() override { 461 void BeginTest() override {
473 did_swaps_ = 0; 462 did_swaps_ = 0;
474 PostSetNeedsCommitToMainThread(); 463 PostSetNeedsCommitToMainThread();
475 } 464 }
476 465
477 virtual DrawResult PrepareToDrawOnThread( 466 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
478 LayerTreeHostImpl* host_impl, 467 LayerTreeHostImpl::FrameData* frame_data,
479 LayerTreeHostImpl::FrameData* frame_data, 468 DrawResult draw_result) override {
480 DrawResult draw_result) override {
481 EXPECT_EQ(DRAW_SUCCESS, draw_result); 469 EXPECT_EQ(DRAW_SUCCESS, draw_result);
482 RenderSurfaceImpl* root_surface = 470 RenderSurfaceImpl* root_surface =
483 host_impl->active_tree()->root_layer()->render_surface(); 471 host_impl->active_tree()->root_layer()->render_surface();
484 gfx::RectF root_damage = 472 gfx::RectF root_damage =
485 root_surface->damage_tracker()->current_damage_rect(); 473 root_surface->damage_tracker()->current_damage_rect();
486 root_damage.Intersect(root_surface->content_rect()); 474 root_damage.Intersect(root_surface->content_rect());
487 int frame = host_impl->active_tree()->source_frame_number(); 475 int frame = host_impl->active_tree()->source_frame_number();
488 switch (did_swaps_) { 476 switch (did_swaps_) {
489 case 0: 477 case 0:
490 // The first frame has damage, so we should draw and swap. 478 // The first frame has damage, so we should draw and swap.
491 EXPECT_EQ(0, frame); 479 EXPECT_EQ(0, frame);
492 break; 480 break;
493 case 1: 481 case 1:
494 // The second frame has scrolled, so the scrollbar should be damaged. 482 // The second frame has scrolled, so the scrollbar should be damaged.
495 EXPECT_EQ(0, frame); 483 EXPECT_EQ(0, frame);
496 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); 484 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100)));
497 break; 485 break;
498 case 2: 486 case 2:
499 // The third frame (after the commit) has no changes, so it shouldn't. 487 // The third frame (after the commit) has no changes, so it shouldn't.
500 EXPECT_EQ(1, frame); 488 EXPECT_EQ(1, frame);
501 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100))); 489 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100)));
502 break; 490 break;
503 default: 491 default:
504 NOTREACHED(); 492 NOTREACHED();
505 break; 493 break;
506 } 494 }
507 return draw_result; 495 return draw_result;
508 } 496 }
509 497
510 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 498 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override {
511 bool result) override {
512 ++did_swaps_; 499 ++did_swaps_;
513 EXPECT_TRUE(result); 500 EXPECT_TRUE(result);
514 LayerImpl* root = host_impl->active_tree()->root_layer(); 501 LayerImpl* root = host_impl->active_tree()->root_layer();
515 LayerImpl* scroll_clip_layer = root->children()[0]; 502 LayerImpl* scroll_clip_layer = root->children()[0];
516 LayerImpl* scroll_layer = scroll_clip_layer->children()[0]; 503 LayerImpl* scroll_layer = scroll_clip_layer->children()[0];
517 switch (did_swaps_) { 504 switch (did_swaps_) {
518 case 1: 505 case 1:
519 // Scroll on the thread. This should damage the scrollbar for the 506 // Scroll on the thread. This should damage the scrollbar for the
520 // next draw on the thread. 507 // next draw on the thread.
521 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); 508 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f));
522 host_impl->SetNeedsRedraw(); 509 host_impl->SetNeedsRedraw();
523 break; 510 break;
524 case 2: 511 case 2:
525 // Forcibly send the scroll to the main thread. 512 // Forcibly send the scroll to the main thread.
526 PostSetNeedsCommitToMainThread(); 513 PostSetNeedsCommitToMainThread();
527 break; 514 break;
528 case 3: 515 case 3:
529 // First swap after second commit. 516 // First swap after second commit.
530 EndTest(); 517 EndTest();
531 break; 518 break;
532 default: 519 default:
533 NOTREACHED(); 520 NOTREACHED();
534 break; 521 break;
535 } 522 }
536 } 523 }
537 524
538 virtual void AfterTest() override { 525 void AfterTest() override { EXPECT_EQ(3, did_swaps_); }
539 EXPECT_EQ(3, did_swaps_);
540 }
541 526
542 int did_swaps_; 527 int did_swaps_;
543 }; 528 };
544 529
545 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); 530 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage);
546 531
547 class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws 532 class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws
548 : public LayerTreeHostDamageTest { 533 : public LayerTreeHostDamageTest {
549 534 void InitializeSettings(LayerTreeSettings* settings) override {
550 virtual void InitializeSettings(LayerTreeSettings* settings) override {
551 settings->impl_side_painting = true; 535 settings->impl_side_painting = true;
552 } 536 }
553 537
554 virtual void BeginTest() override { 538 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
555 PostSetNeedsCommitToMainThread();
556 }
557 539
558 virtual void SetupTree() override { 540 void SetupTree() override {
559 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); 541 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_);
560 root->SetBounds(gfx::Size(500, 500)); 542 root->SetBounds(gfx::Size(500, 500));
561 layer_tree_host()->SetRootLayer(root); 543 layer_tree_host()->SetRootLayer(root);
562 LayerTreeHostDamageTest::SetupTree(); 544 LayerTreeHostDamageTest::SetupTree();
563 545
564 swap_count_ = 0; 546 swap_count_ = 0;
565 prepare_to_draw_count_ = 0; 547 prepare_to_draw_count_ = 0;
566 update_visible_tile_count_ = 0; 548 update_visible_tile_count_ = 0;
567 } 549 }
568 550
569 virtual DrawResult PrepareToDrawOnThread( 551 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
570 LayerTreeHostImpl* host_impl, 552 LayerTreeHostImpl::FrameData* frame_data,
571 LayerTreeHostImpl::FrameData* frame_data, 553 DrawResult draw_result) override {
572 DrawResult draw_result) override {
573 EXPECT_EQ(DRAW_SUCCESS, draw_result); 554 EXPECT_EQ(DRAW_SUCCESS, draw_result);
574 prepare_to_draw_count_++; 555 prepare_to_draw_count_++;
575 switch (prepare_to_draw_count_) { 556 switch (prepare_to_draw_count_) {
576 case 1: 557 case 1:
577 // Detect that we have an incomplete tile, during the first frame. 558 // Detect that we have an incomplete tile, during the first frame.
578 // The first frame should have damage. 559 // The first frame should have damage.
579 frame_data->contains_incomplete_tile = true; 560 frame_data->contains_incomplete_tile = true;
580 DCHECK(!frame_data->has_no_damage); 561 DCHECK(!frame_data->has_no_damage);
581 break; 562 break;
582 case 2: 563 case 2:
583 // Make a no-damage frame. We early out and can't detect 564 // Make a no-damage frame. We early out and can't detect
584 // incomplete tiles, even if they still exist. 565 // incomplete tiles, even if they still exist.
585 frame_data->contains_incomplete_tile = false; 566 frame_data->contains_incomplete_tile = false;
586 frame_data->has_no_damage = true; 567 frame_data->has_no_damage = true;
587 break; 568 break;
588 case 3: 569 case 3:
589 // Trigger the last swap for the completed tile. 570 // Trigger the last swap for the completed tile.
590 frame_data->contains_incomplete_tile = false; 571 frame_data->contains_incomplete_tile = false;
591 frame_data->has_no_damage = false; 572 frame_data->has_no_damage = false;
592 EndTest(); 573 EndTest();
593 break; 574 break;
594 default: 575 default:
595 NOTREACHED(); 576 NOTREACHED();
596 break; 577 break;
597 } 578 }
598 579
599 return draw_result; 580 return draw_result;
600 } 581 }
601 582
602 virtual void UpdateVisibleTilesOnThread( 583 void UpdateVisibleTilesOnThread(LayerTreeHostImpl* host_impl) override {
603 LayerTreeHostImpl* host_impl) override {
604 // Simulate creating some visible tiles (that trigger prepare-to-draws). 584 // Simulate creating some visible tiles (that trigger prepare-to-draws).
605 // The first we make into a no-damage-frame during prepare-to-draw (see 585 // The first we make into a no-damage-frame during prepare-to-draw (see
606 // above). This is to ensure we still get UpdateVisibleTiles calls after 586 // above). This is to ensure we still get UpdateVisibleTiles calls after
607 // a no-damage or aborted frame. 587 // a no-damage or aborted frame.
608 update_visible_tile_count_++; 588 update_visible_tile_count_++;
609 switch (update_visible_tile_count_) { 589 switch (update_visible_tile_count_) {
610 case 3: 590 case 3:
611 case 6: 591 case 6:
612 host_impl->DidInitializeVisibleTileForTesting(); 592 host_impl->DidInitializeVisibleTileForTesting();
613 break; 593 break;
614 case 7: 594 case 7:
615 NOTREACHED(); 595 NOTREACHED();
616 break; 596 break;
617 } 597 }
618 } 598 }
619 599
620 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 600 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
621 bool didSwap) override { 601 bool didSwap) override {
622 if (!didSwap) 602 if (!didSwap)
623 return; 603 return;
624 ++swap_count_; 604 ++swap_count_;
625 } 605 }
626 606
627 virtual void AfterTest() override { 607 void AfterTest() override {
628 // We should keep getting update-visible-tiles calls 608 // We should keep getting update-visible-tiles calls
629 // until we report there are no more incomplete-tiles. 609 // until we report there are no more incomplete-tiles.
630 EXPECT_EQ(update_visible_tile_count_, 6); 610 EXPECT_EQ(update_visible_tile_count_, 6);
631 // First frame, plus two triggered by DidInitializeVisibleTile() 611 // First frame, plus two triggered by DidInitializeVisibleTile()
632 EXPECT_EQ(prepare_to_draw_count_, 3); 612 EXPECT_EQ(prepare_to_draw_count_, 3);
633 // First swap, plus final swap (contained damage). 613 // First swap, plus final swap (contained damage).
634 EXPECT_EQ(swap_count_, 2); 614 EXPECT_EQ(swap_count_, 2);
635 } 615 }
636 616
637 FakeContentLayerClient client_; 617 FakeContentLayerClient client_;
638 int swap_count_; 618 int swap_count_;
639 int prepare_to_draw_count_; 619 int prepare_to_draw_count_;
640 int update_visible_tile_count_; 620 int update_visible_tile_count_;
641 }; 621 };
642 622
643 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws); 623 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws);
644 624
645 } // namespace 625 } // namespace
646 } // namespace cc 626 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest_copyrequest.cc ('k') | cc/trees/layer_tree_host_unittest_delegated.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698