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

Side by Side Diff: cc/resources/tile_manager_unittest.cc

Issue 816453008: cc: Split tiling set raster queues into all and required. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 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
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_raster_queue.h » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/resources/eviction_tile_priority_queue.h" 5 #include "cc/resources/eviction_tile_priority_queue.h"
6 #include "cc/resources/raster_tile_priority_queue.h" 6 #include "cc/resources/raster_tile_priority_queue.h"
7 #include "cc/resources/tile.h" 7 #include "cc/resources/tile.h"
8 #include "cc/resources/tile_priority.h" 8 #include "cc/resources/tile_priority.h"
9 #include "cc/resources/tiling_set_raster_queue_all.h"
9 #include "cc/test/begin_frame_args_test.h" 10 #include "cc/test/begin_frame_args_test.h"
10 #include "cc/test/fake_impl_proxy.h" 11 #include "cc/test/fake_impl_proxy.h"
11 #include "cc/test/fake_layer_tree_host_impl.h" 12 #include "cc/test/fake_layer_tree_host_impl.h"
12 #include "cc/test/fake_output_surface.h" 13 #include "cc/test/fake_output_surface.h"
13 #include "cc/test/fake_output_surface_client.h" 14 #include "cc/test/fake_output_surface_client.h"
14 #include "cc/test/fake_picture_layer_impl.h" 15 #include "cc/test/fake_picture_layer_impl.h"
15 #include "cc/test/fake_picture_layer_tiling_client.h" 16 #include "cc/test/fake_picture_layer_tiling_client.h"
16 #include "cc/test/fake_picture_pile_impl.h" 17 #include "cc/test/fake_picture_pile_impl.h"
17 #include "cc/test/fake_tile_manager.h" 18 #include "cc/test/fake_tile_manager.h"
18 #include "cc/test/impl_side_painting_settings.h" 19 #include "cc/test/impl_side_painting_settings.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 FakePictureLayerImpl* pending_layer_; 145 FakePictureLayerImpl* pending_layer_;
145 FakePictureLayerImpl* active_layer_; 146 FakePictureLayerImpl* active_layer_;
146 }; 147 };
147 148
148 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { 149 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) {
149 const gfx::Size layer_bounds(1000, 1000); 150 const gfx::Size layer_bounds(1000, 1000);
150 host_impl_.SetViewportSize(layer_bounds); 151 host_impl_.SetViewportSize(layer_bounds);
151 SetupDefaultTrees(layer_bounds); 152 SetupDefaultTrees(layer_bounds);
152 153
153 RasterTilePriorityQueue queue; 154 RasterTilePriorityQueue queue;
154 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 155 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
156 RasterTilePriorityQueue::Type::ALL);
155 EXPECT_FALSE(queue.IsEmpty()); 157 EXPECT_FALSE(queue.IsEmpty());
156 158
157 size_t tile_count = 0; 159 size_t tile_count = 0;
158 std::set<Tile*> all_tiles; 160 std::set<Tile*> all_tiles;
159 while (!queue.IsEmpty()) { 161 while (!queue.IsEmpty()) {
160 EXPECT_TRUE(queue.Top()); 162 EXPECT_TRUE(queue.Top());
161 all_tiles.insert(queue.Top()); 163 all_tiles.insert(queue.Top());
162 ++tile_count; 164 ++tile_count;
163 queue.Pop(); 165 queue.Pop();
164 } 166 }
165 167
166 EXPECT_EQ(tile_count, all_tiles.size()); 168 EXPECT_EQ(tile_count, all_tiles.size());
167 EXPECT_EQ(16u, tile_count); 169 EXPECT_EQ(16u, tile_count);
168 170
169 // Sanity check, all tiles should be visible. 171 // Sanity check, all tiles should be visible.
170 std::set<Tile*> smoothness_tiles; 172 std::set<Tile*> smoothness_tiles;
171 queue.Reset(); 173 queue.Reset();
172 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 174 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
175 RasterTilePriorityQueue::Type::ALL);
173 bool had_low_res = false; 176 bool had_low_res = false;
174 while (!queue.IsEmpty()) { 177 while (!queue.IsEmpty()) {
175 Tile* tile = queue.Top(); 178 Tile* tile = queue.Top();
176 EXPECT_TRUE(tile); 179 EXPECT_TRUE(tile);
177 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); 180 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin);
178 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); 181 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin);
179 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) 182 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION)
180 had_low_res = true; 183 had_low_res = true;
181 else 184 else
182 smoothness_tiles.insert(tile); 185 smoothness_tiles.insert(tile);
183 queue.Pop(); 186 queue.Pop();
184 } 187 }
185 EXPECT_EQ(all_tiles, smoothness_tiles); 188 EXPECT_EQ(all_tiles, smoothness_tiles);
186 EXPECT_TRUE(had_low_res); 189 EXPECT_TRUE(had_low_res);
187 190
191 // Check that everything is required for activation.
192 queue.Reset();
193 host_impl_.BuildRasterQueue(
194 &queue, SMOOTHNESS_TAKES_PRIORITY,
195 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
196 std::set<Tile*> required_for_activation_tiles;
197 while (!queue.IsEmpty()) {
198 Tile* tile = queue.Top();
199 EXPECT_TRUE(tile->required_for_activation());
200 required_for_activation_tiles.insert(tile);
201 queue.Pop();
202 }
203 EXPECT_EQ(all_tiles, required_for_activation_tiles);
204
205 // Check that everything is required for draw.
206 queue.Reset();
207 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
208 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
209 std::set<Tile*> required_for_draw_tiles;
210 while (!queue.IsEmpty()) {
211 Tile* tile = queue.Top();
212 EXPECT_TRUE(tile->required_for_draw());
213 required_for_draw_tiles.insert(tile);
214 queue.Pop();
215 }
216 EXPECT_EQ(all_tiles, required_for_draw_tiles);
217
188 Region invalidation(gfx::Rect(0, 0, 500, 500)); 218 Region invalidation(gfx::Rect(0, 0, 500, 500));
189 219
190 // Invalidate the pending tree. 220 // Invalidate the pending tree.
191 pending_layer_->set_invalidation(invalidation); 221 pending_layer_->set_invalidation(invalidation);
192 pending_layer_->HighResTiling()->Invalidate(invalidation); 222 pending_layer_->HighResTiling()->Invalidate(invalidation);
193 pending_layer_->LowResTiling()->Invalidate(invalidation); 223 pending_layer_->LowResTiling()->Invalidate(invalidation);
194 224
195 active_layer_->ResetAllTilesPriorities(); 225 active_layer_->ResetAllTilesPriorities();
196 pending_layer_->ResetAllTilesPriorities(); 226 pending_layer_->ResetAllTilesPriorities();
197 227
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 active_layer_->LowResTiling()->AllTilesForTesting(); 262 active_layer_->LowResTiling()->AllTilesForTesting();
233 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 263 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
234 all_tiles.insert(active_low_res_tiles[i]); 264 all_tiles.insert(active_low_res_tiles[i]);
235 265
236 Tile* last_tile = NULL; 266 Tile* last_tile = NULL;
237 smoothness_tiles.clear(); 267 smoothness_tiles.clear();
238 tile_count = 0; 268 tile_count = 0;
239 size_t correct_order_tiles = 0u; 269 size_t correct_order_tiles = 0u;
240 // Here we expect to get increasing ACTIVE_TREE priority_bin. 270 // Here we expect to get increasing ACTIVE_TREE priority_bin.
241 queue.Reset(); 271 queue.Reset();
242 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 272 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
273 RasterTilePriorityQueue::Type::ALL);
274 std::set<Tile*> expected_required_for_draw_tiles;
275 std::set<Tile*> expected_required_for_activation_tiles;
243 while (!queue.IsEmpty()) { 276 while (!queue.IsEmpty()) {
244 Tile* tile = queue.Top(); 277 Tile* tile = queue.Top();
245 EXPECT_TRUE(tile); 278 EXPECT_TRUE(tile);
246 279
247 if (!last_tile) 280 if (!last_tile)
248 last_tile = tile; 281 last_tile = tile;
249 282
250 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin, 283 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin,
251 tile->priority(ACTIVE_TREE).priority_bin); 284 tile->priority(ACTIVE_TREE).priority_bin);
252 bool skip_updating_last_tile = false; 285 bool skip_updating_last_tile = false;
(...skipping 15 matching lines...) Expand all
268 last_tile->priority(ACTIVE_TREE).resolution != 301 last_tile->priority(ACTIVE_TREE).resolution !=
269 tile->priority(ACTIVE_TREE).resolution) { 302 tile->priority(ACTIVE_TREE).resolution) {
270 // Low resolution should come first. 303 // Low resolution should come first.
271 EXPECT_EQ(LOW_RESOLUTION, last_tile->priority(ACTIVE_TREE).resolution); 304 EXPECT_EQ(LOW_RESOLUTION, last_tile->priority(ACTIVE_TREE).resolution);
272 } 305 }
273 306
274 if (!skip_updating_last_tile) 307 if (!skip_updating_last_tile)
275 last_tile = tile; 308 last_tile = tile;
276 ++tile_count; 309 ++tile_count;
277 smoothness_tiles.insert(tile); 310 smoothness_tiles.insert(tile);
311 if (tile->required_for_draw())
312 expected_required_for_draw_tiles.insert(tile);
313 if (tile->required_for_activation())
314 expected_required_for_activation_tiles.insert(tile);
278 queue.Pop(); 315 queue.Pop();
279 } 316 }
280 317
281 EXPECT_EQ(tile_count, smoothness_tiles.size()); 318 EXPECT_EQ(tile_count, smoothness_tiles.size());
282 EXPECT_EQ(all_tiles, smoothness_tiles); 319 EXPECT_EQ(all_tiles, smoothness_tiles);
283 // Since we don't guarantee increasing distance due to spiral iterator, we 320 // Since we don't guarantee increasing distance due to spiral iterator, we
284 // should check that we're _mostly_ right. 321 // should check that we're _mostly_ right.
285 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); 322 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4);
286 323
324 // Check that we have consistent required_for_activation tiles.
325 queue.Reset();
326 host_impl_.BuildRasterQueue(
327 &queue, SMOOTHNESS_TAKES_PRIORITY,
328 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
329 required_for_activation_tiles.clear();
330 while (!queue.IsEmpty()) {
331 Tile* tile = queue.Top();
332 EXPECT_TRUE(tile->required_for_activation());
333 required_for_activation_tiles.insert(tile);
334 queue.Pop();
335 }
336 EXPECT_EQ(expected_required_for_activation_tiles,
337 required_for_activation_tiles);
338 EXPECT_NE(all_tiles, required_for_activation_tiles);
339
340 // Check that we have consistent required_for_draw tiles.
341 queue.Reset();
342 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
343 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
344 required_for_draw_tiles.clear();
345 while (!queue.IsEmpty()) {
346 Tile* tile = queue.Top();
347 EXPECT_TRUE(tile->required_for_draw());
348 required_for_draw_tiles.insert(tile);
349 queue.Pop();
350 }
351 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
352 EXPECT_NE(all_tiles, required_for_draw_tiles);
353
287 std::set<Tile*> new_content_tiles; 354 std::set<Tile*> new_content_tiles;
288 last_tile = NULL; 355 last_tile = NULL;
289 size_t increasing_distance_tiles = 0u; 356 size_t increasing_distance_tiles = 0u;
290 // Here we expect to get increasing PENDING_TREE priority_bin. 357 // Here we expect to get increasing PENDING_TREE priority_bin.
291 queue.Reset(); 358 queue.Reset();
292 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY); 359 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY,
360 RasterTilePriorityQueue::Type::ALL);
293 tile_count = 0; 361 tile_count = 0;
294 while (!queue.IsEmpty()) { 362 while (!queue.IsEmpty()) {
295 Tile* tile = queue.Top(); 363 Tile* tile = queue.Top();
296 EXPECT_TRUE(tile); 364 EXPECT_TRUE(tile);
297 365
298 if (!last_tile) 366 if (!last_tile)
299 last_tile = tile; 367 last_tile = tile;
300 368
301 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, 369 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin,
302 tile->priority(PENDING_TREE).priority_bin); 370 tile->priority(PENDING_TREE).priority_bin);
(...skipping 15 matching lines...) Expand all
318 new_content_tiles.insert(tile); 386 new_content_tiles.insert(tile);
319 ++tile_count; 387 ++tile_count;
320 queue.Pop(); 388 queue.Pop();
321 } 389 }
322 390
323 EXPECT_EQ(tile_count, new_content_tiles.size()); 391 EXPECT_EQ(tile_count, new_content_tiles.size());
324 EXPECT_EQ(high_res_tiles, new_content_tiles); 392 EXPECT_EQ(high_res_tiles, new_content_tiles);
325 // Since we don't guarantee increasing distance due to spiral iterator, we 393 // Since we don't guarantee increasing distance due to spiral iterator, we
326 // should check that we're _mostly_ right. 394 // should check that we're _mostly_ right.
327 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); 395 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4);
396
397 // Check that we have consistent required_for_activation tiles.
398 queue.Reset();
399 host_impl_.BuildRasterQueue(
400 &queue, NEW_CONTENT_TAKES_PRIORITY,
401 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
402 required_for_activation_tiles.clear();
403 while (!queue.IsEmpty()) {
404 Tile* tile = queue.Top();
405 EXPECT_TRUE(tile->required_for_activation());
406 required_for_activation_tiles.insert(tile);
407 queue.Pop();
408 }
409 EXPECT_EQ(expected_required_for_activation_tiles,
410 required_for_activation_tiles);
411 EXPECT_NE(new_content_tiles, required_for_activation_tiles);
412
413 // Check that we have consistent required_for_draw tiles.
414 queue.Reset();
415 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY,
416 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
417 required_for_draw_tiles.clear();
418 while (!queue.IsEmpty()) {
419 Tile* tile = queue.Top();
420 EXPECT_TRUE(tile->required_for_draw());
421 required_for_draw_tiles.insert(tile);
422 queue.Pop();
423 }
424 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
425 EXPECT_NE(new_content_tiles, required_for_draw_tiles);
426 }
427
428 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) {
429 const gfx::Size layer_bounds(1000, 1000);
430 host_impl_.SetViewportSize(gfx::Size(500, 500));
431 SetupDefaultTrees(layer_bounds);
432
433 // Use a tile's content rect as an invalidation. We should inset it a bit to
434 // ensure that border math doesn't invalidate neighbouring tiles.
435 gfx::Rect invalidation =
436 pending_layer_->HighResTiling()->TileAt(1, 0)->content_rect();
437 invalidation.Inset(2, 2);
438
439 pending_layer_->set_invalidation(invalidation);
440 pending_layer_->HighResTiling()->Invalidate(invalidation);
441 pending_layer_->LowResTiling()->Invalidate(invalidation);
442
443 // Sanity checks: Tile at 0, 0 should be the same on both trees, tile at 1, 0
444 // should be different.
445 EXPECT_TRUE(pending_layer_->HighResTiling()->TileAt(0, 0));
446 EXPECT_TRUE(active_layer_->HighResTiling()->TileAt(0, 0));
447 EXPECT_EQ(pending_layer_->HighResTiling()->TileAt(0, 0),
448 active_layer_->HighResTiling()->TileAt(0, 0));
449 EXPECT_TRUE(pending_layer_->HighResTiling()->TileAt(1, 0));
450 EXPECT_TRUE(active_layer_->HighResTiling()->TileAt(1, 0));
451 EXPECT_NE(pending_layer_->HighResTiling()->TileAt(1, 0),
452 active_layer_->HighResTiling()->TileAt(1, 0));
453
454 std::set<Tile*> expected_now_tiles;
455 std::set<Tile*> expected_required_for_draw_tiles;
456 std::set<Tile*> expected_required_for_activation_tiles;
457 for (int i = 0; i <= 1; ++i) {
458 for (int j = 0; j <= 1; ++j) {
459 expected_now_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j));
460 expected_now_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j));
461
462 expected_required_for_activation_tiles.insert(
463 pending_layer_->HighResTiling()->TileAt(i, j));
464 expected_required_for_draw_tiles.insert(
465 active_layer_->HighResTiling()->TileAt(i, j));
466 }
467 }
468 // Expect 3 shared tiles and 1 unshared tile in total.
469 EXPECT_EQ(5u, expected_now_tiles.size());
470 // Expect 4 tiles for each draw and activation, but not all the same.
471 EXPECT_EQ(4u, expected_required_for_activation_tiles.size());
472 EXPECT_EQ(4u, expected_required_for_draw_tiles.size());
473 EXPECT_NE(expected_required_for_draw_tiles,
474 expected_required_for_activation_tiles);
475
476 std::set<Tile*> expected_all_tiles;
477 for (int i = 0; i <= 3; ++i) {
478 for (int j = 0; j <= 3; ++j) {
479 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j));
480 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j));
481 }
482 }
483 // Expect 15 shared tiles and 1 unshared tile.
484 EXPECT_EQ(17u, expected_all_tiles.size());
485
486 // The actual test will now build different queues and verify that the queues
487 // return the same information as computed manually above.
488 RasterTilePriorityQueue queue;
489 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
490 RasterTilePriorityQueue::Type::ALL);
491 std::set<Tile*> actual_now_tiles;
492 std::set<Tile*> actual_all_tiles;
493 while (!queue.IsEmpty()) {
494 Tile* tile = queue.Top();
495 queue.Pop();
496 if (tile->combined_priority().priority_bin == TilePriority::NOW)
497 actual_now_tiles.insert(tile);
498 actual_all_tiles.insert(tile);
499 }
500 EXPECT_EQ(expected_now_tiles, actual_now_tiles);
501 EXPECT_EQ(expected_all_tiles, actual_all_tiles);
502
503 queue.Reset();
504 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
505 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
506 std::set<Tile*> actual_required_for_draw_tiles;
507 while (!queue.IsEmpty()) {
508 Tile* tile = queue.Top();
509 queue.Pop();
510 actual_required_for_draw_tiles.insert(tile);
511 }
512 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles);
513
514 queue.Reset();
515 host_impl_.BuildRasterQueue(
516 &queue, SAME_PRIORITY_FOR_BOTH_TREES,
517 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
518 std::set<Tile*> actual_required_for_activation_tiles;
519 while (!queue.IsEmpty()) {
520 Tile* tile = queue.Top();
521 queue.Pop();
522 actual_required_for_activation_tiles.insert(tile);
523 }
524 EXPECT_EQ(expected_required_for_activation_tiles,
525 actual_required_for_activation_tiles);
328 } 526 }
329 527
330 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { 528 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) {
331 base::TimeTicks time_ticks; 529 base::TimeTicks time_ticks;
332 time_ticks += base::TimeDelta::FromMilliseconds(1); 530 time_ticks += base::TimeDelta::FromMilliseconds(1);
333 host_impl_.SetCurrentBeginFrameArgs( 531 host_impl_.SetCurrentBeginFrameArgs(
334 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 532 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
335 533
336 gfx::Size layer_bounds(1000, 1000); 534 gfx::Size layer_bounds(1000, 1000);
337 SetupDefaultTrees(layer_bounds); 535 SetupDefaultTrees(layer_bounds);
(...skipping 11 matching lines...) Expand all
349 547
350 // Set a small viewport, so we have soon and eventually tiles. 548 // Set a small viewport, so we have soon and eventually tiles.
351 host_impl_.SetViewportSize(gfx::Size(200, 200)); 549 host_impl_.SetViewportSize(gfx::Size(200, 200));
352 time_ticks += base::TimeDelta::FromMilliseconds(1); 550 time_ticks += base::TimeDelta::FromMilliseconds(1);
353 host_impl_.SetCurrentBeginFrameArgs( 551 host_impl_.SetCurrentBeginFrameArgs(
354 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 552 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
355 host_impl_.pending_tree()->UpdateDrawProperties(); 553 host_impl_.pending_tree()->UpdateDrawProperties();
356 554
357 RasterTilePriorityQueue queue; 555 RasterTilePriorityQueue queue;
358 host_impl_.SetRequiresHighResToDraw(); 556 host_impl_.SetRequiresHighResToDraw();
359 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 557 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
558 RasterTilePriorityQueue::Type::ALL);
360 EXPECT_FALSE(queue.IsEmpty()); 559 EXPECT_FALSE(queue.IsEmpty());
361 560
362 // Get all the tiles that are NOW or SOON and make sure they are ready to 561 // Get all the tiles that are NOW or SOON and make sure they are ready to
363 // draw. 562 // draw.
364 std::vector<Tile*> all_tiles; 563 std::vector<Tile*> all_tiles;
365 while (!queue.IsEmpty()) { 564 while (!queue.IsEmpty()) {
366 Tile* tile = queue.Top(); 565 Tile* tile = queue.Top();
367 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) 566 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY)
368 break; 567 break;
369 568
(...skipping 14 matching lines...) Expand all
384 host_impl_.SetViewportSize(layer_bounds); 583 host_impl_.SetViewportSize(layer_bounds);
385 SetupDefaultTrees(layer_bounds); 584 SetupDefaultTrees(layer_bounds);
386 585
387 EvictionTilePriorityQueue empty_queue; 586 EvictionTilePriorityQueue empty_queue;
388 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); 587 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES);
389 EXPECT_TRUE(empty_queue.IsEmpty()); 588 EXPECT_TRUE(empty_queue.IsEmpty());
390 std::set<Tile*> all_tiles; 589 std::set<Tile*> all_tiles;
391 size_t tile_count = 0; 590 size_t tile_count = 0;
392 591
393 RasterTilePriorityQueue raster_queue; 592 RasterTilePriorityQueue raster_queue;
394 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 593 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
594 RasterTilePriorityQueue::Type::ALL);
395 while (!raster_queue.IsEmpty()) { 595 while (!raster_queue.IsEmpty()) {
396 ++tile_count; 596 ++tile_count;
397 EXPECT_TRUE(raster_queue.Top()); 597 EXPECT_TRUE(raster_queue.Top());
398 all_tiles.insert(raster_queue.Top()); 598 all_tiles.insert(raster_queue.Top());
399 raster_queue.Pop(); 599 raster_queue.Pop();
400 } 600 }
401 601
402 EXPECT_EQ(tile_count, all_tiles.size()); 602 EXPECT_EQ(tile_count, all_tiles.size());
403 EXPECT_EQ(16u, tile_count); 603 EXPECT_EQ(16u, tile_count);
404 604
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 pending_child_layer->SetDrawsContent(true); 781 pending_child_layer->SetDrawsContent(true);
582 782
583 time_ticks += base::TimeDelta::FromMilliseconds(1); 783 time_ticks += base::TimeDelta::FromMilliseconds(1);
584 host_impl_.SetCurrentBeginFrameArgs( 784 host_impl_.SetCurrentBeginFrameArgs(
585 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 785 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
586 host_impl_.pending_tree()->UpdateDrawProperties(); 786 host_impl_.pending_tree()->UpdateDrawProperties();
587 787
588 std::set<Tile*> all_tiles; 788 std::set<Tile*> all_tiles;
589 size_t tile_count = 0; 789 size_t tile_count = 0;
590 RasterTilePriorityQueue raster_queue; 790 RasterTilePriorityQueue raster_queue;
591 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 791 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
792 RasterTilePriorityQueue::Type::ALL);
592 while (!raster_queue.IsEmpty()) { 793 while (!raster_queue.IsEmpty()) {
593 ++tile_count; 794 ++tile_count;
594 EXPECT_TRUE(raster_queue.Top()); 795 EXPECT_TRUE(raster_queue.Top());
595 all_tiles.insert(raster_queue.Top()); 796 all_tiles.insert(raster_queue.Top());
596 raster_queue.Pop(); 797 raster_queue.Pop();
597 } 798 }
598 EXPECT_EQ(tile_count, all_tiles.size()); 799 EXPECT_EQ(tile_count, all_tiles.size());
599 EXPECT_EQ(32u, tile_count); 800 EXPECT_EQ(32u, tile_count);
600 801
601 pending_layer_->ResetAllTilesPriorities(); 802 pending_layer_->ResetAllTilesPriorities();
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 EXPECT_EQ(tile_count, new_content_tiles.size()); 987 EXPECT_EQ(tile_count, new_content_tiles.size());
787 EXPECT_EQ(all_tiles, new_content_tiles); 988 EXPECT_EQ(all_tiles, new_content_tiles);
788 } 989 }
789 990
790 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 991 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
791 const gfx::Size layer_bounds(1000, 1000); 992 const gfx::Size layer_bounds(1000, 1000);
792 host_impl_.SetViewportSize(layer_bounds); 993 host_impl_.SetViewportSize(layer_bounds);
793 SetupDefaultTrees(layer_bounds); 994 SetupDefaultTrees(layer_bounds);
794 995
795 RasterTilePriorityQueue queue; 996 RasterTilePriorityQueue queue;
796 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 997 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
998 RasterTilePriorityQueue::Type::ALL);
797 EXPECT_FALSE(queue.IsEmpty()); 999 EXPECT_FALSE(queue.IsEmpty());
798 1000
799 size_t tile_count = 0; 1001 size_t tile_count = 0;
800 std::set<Tile*> all_tiles; 1002 std::set<Tile*> all_tiles;
801 while (!queue.IsEmpty()) { 1003 while (!queue.IsEmpty()) {
802 EXPECT_TRUE(queue.Top()); 1004 EXPECT_TRUE(queue.Top());
803 all_tiles.insert(queue.Top()); 1005 all_tiles.insert(queue.Top());
804 ++tile_count; 1006 ++tile_count;
805 queue.Pop(); 1007 queue.Pop();
806 } 1008 }
807 1009
808 EXPECT_EQ(tile_count, all_tiles.size()); 1010 EXPECT_EQ(tile_count, all_tiles.size());
809 EXPECT_EQ(16u, tile_count); 1011 EXPECT_EQ(16u, tile_count);
810 1012
811 queue.Reset(); 1013 queue.Reset();
812 for (int i = 1; i < 10; ++i) { 1014 for (int i = 1; i < 10; ++i) {
813 scoped_ptr<FakePictureLayerImpl> pending_layer = 1015 scoped_ptr<FakePictureLayerImpl> pending_layer =
814 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1016 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
815 pending_layer->SetDrawsContent(true); 1017 pending_layer->SetDrawsContent(true);
816 pending_layer->set_has_valid_tile_priorities(true); 1018 pending_layer->set_has_valid_tile_priorities(true);
817 pending_layer_->AddChild(pending_layer.Pass()); 1019 pending_layer_->AddChild(pending_layer.Pass());
818 } 1020 }
819 1021
820 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 1022 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
1023 RasterTilePriorityQueue::Type::ALL);
821 EXPECT_FALSE(queue.IsEmpty()); 1024 EXPECT_FALSE(queue.IsEmpty());
822 1025
823 tile_count = 0; 1026 tile_count = 0;
824 all_tiles.clear(); 1027 all_tiles.clear();
825 while (!queue.IsEmpty()) { 1028 while (!queue.IsEmpty()) {
826 EXPECT_TRUE(queue.Top()); 1029 EXPECT_TRUE(queue.Top());
827 all_tiles.insert(queue.Top()); 1030 all_tiles.insert(queue.Top());
828 ++tile_count; 1031 ++tile_count;
829 queue.Pop(); 1032 queue.Pop();
830 } 1033 }
831 EXPECT_EQ(tile_count, all_tiles.size()); 1034 EXPECT_EQ(tile_count, all_tiles.size());
832 EXPECT_EQ(16u, tile_count); 1035 EXPECT_EQ(16u, tile_count);
833 } 1036 }
834 1037
835 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 1038 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
836 const gfx::Size layer_bounds(1000, 1000); 1039 const gfx::Size layer_bounds(1000, 1000);
837 host_impl_.SetViewportSize(layer_bounds); 1040 host_impl_.SetViewportSize(layer_bounds);
838 SetupDefaultTrees(layer_bounds); 1041 SetupDefaultTrees(layer_bounds);
839 1042
840 RasterTilePriorityQueue raster_queue; 1043 RasterTilePriorityQueue raster_queue;
841 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 1044 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
1045 RasterTilePriorityQueue::Type::ALL);
842 EXPECT_FALSE(raster_queue.IsEmpty()); 1046 EXPECT_FALSE(raster_queue.IsEmpty());
843 1047
844 size_t tile_count = 0; 1048 size_t tile_count = 0;
845 std::set<Tile*> all_tiles; 1049 std::set<Tile*> all_tiles;
846 while (!raster_queue.IsEmpty()) { 1050 while (!raster_queue.IsEmpty()) {
847 EXPECT_TRUE(raster_queue.Top()); 1051 EXPECT_TRUE(raster_queue.Top());
848 all_tiles.insert(raster_queue.Top()); 1052 all_tiles.insert(raster_queue.Top());
849 ++tile_count; 1053 ++tile_count;
850 raster_queue.Pop(); 1054 raster_queue.Pop();
851 } 1055 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 &client, settings.max_tiles_for_interest_area, 1102 &client, settings.max_tiles_for_interest_area,
899 settings.skewport_target_time_in_seconds, 1103 settings.skewport_target_time_in_seconds,
900 settings.skewport_extrapolation_limit_in_content_pixels); 1104 settings.skewport_extrapolation_limit_in_content_pixels);
901 1105
902 scoped_refptr<FakePicturePileImpl> pile = 1106 scoped_refptr<FakePicturePileImpl> pile =
903 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds); 1107 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds);
904 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile); 1108 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile);
905 tiling->set_resolution(HIGH_RESOLUTION); 1109 tiling->set_resolution(HIGH_RESOLUTION);
906 1110
907 tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true); 1111 tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true);
908
909 TilingSetRasterQueue empty_queue;
910 EXPECT_TRUE(empty_queue.IsEmpty());
911
912 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting(); 1112 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
913
914 // Sanity check. 1113 // Sanity check.
915 EXPECT_EQ(841u, all_tiles.size()); 1114 EXPECT_EQ(841u, all_tiles.size());
916 1115
917 // The explanation of each iteration is as follows: 1116 // The explanation of each iteration is as follows:
918 // 1. First iteration tests that we can get all of the tiles correctly. 1117 // 1. First iteration tests that we can get all of the tiles correctly.
919 // 2. Second iteration ensures that we can get all of the tiles again (first 1118 // 2. Second iteration ensures that we can get all of the tiles again (first
920 // iteration didn't change any tiles), as well set all tiles to be ready to 1119 // iteration didn't change any tiles), as well set all tiles to be ready to
921 // draw. 1120 // draw.
922 // 3. Third iteration ensures that no tiles are returned, since they were all 1121 // 3. Third iteration ensures that no tiles are returned, since they were all
923 // marked as ready to draw. 1122 // marked as ready to draw.
924 for (int i = 0; i < 3; ++i) { 1123 for (int i = 0; i < 3; ++i) {
925 TilingSetRasterQueue queue(tiling_set.get(), false); 1124 scoped_ptr<TilingSetRasterQueue> queue(
1125 new TilingSetRasterQueueAll(tiling_set.get(), false));
926 1126
927 // There are 3 bins in TilePriority. 1127 // There are 3 bins in TilePriority.
928 bool have_tiles[3] = {}; 1128 bool have_tiles[3] = {};
929 1129
930 // On the third iteration, we should get no tiles since everything was 1130 // On the third iteration, we should get no tiles since everything was
931 // marked as ready to draw. 1131 // marked as ready to draw.
932 if (i == 2) { 1132 if (i == 2) {
933 EXPECT_TRUE(queue.IsEmpty()); 1133 EXPECT_TRUE(queue->IsEmpty());
934 continue; 1134 continue;
935 } 1135 }
936 1136
937 EXPECT_FALSE(queue.IsEmpty()); 1137 EXPECT_FALSE(queue->IsEmpty());
938 std::set<Tile*> unique_tiles; 1138 std::set<Tile*> unique_tiles;
939 unique_tiles.insert(queue.Top()); 1139 unique_tiles.insert(queue->Top());
940 Tile* last_tile = queue.Top(); 1140 Tile* last_tile = queue->Top();
941 have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true; 1141 have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true;
942 1142
943 // On the second iteration, mark everything as ready to draw (solid color). 1143 // On the second iteration, mark everything as ready to draw (solid color).
944 if (i == 1) { 1144 if (i == 1) {
945 TileDrawInfo& draw_info = last_tile->draw_info(); 1145 TileDrawInfo& draw_info = last_tile->draw_info();
946 draw_info.SetSolidColorForTesting(SK_ColorRED); 1146 draw_info.SetSolidColorForTesting(SK_ColorRED);
947 } 1147 }
948 queue.Pop(); 1148 queue->Pop();
949 int eventually_bin_order_correct_count = 0; 1149 int eventually_bin_order_correct_count = 0;
950 int eventually_bin_order_incorrect_count = 0; 1150 int eventually_bin_order_incorrect_count = 0;
951 while (!queue.IsEmpty()) { 1151 while (!queue->IsEmpty()) {
952 Tile* new_tile = queue.Top(); 1152 Tile* new_tile = queue->Top();
953 queue.Pop(); 1153 queue->Pop();
954 unique_tiles.insert(new_tile); 1154 unique_tiles.insert(new_tile);
955 1155
956 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1156 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
957 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1157 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
958 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1158 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
959 if (last_priority.priority_bin == new_priority.priority_bin) { 1159 if (last_priority.priority_bin == new_priority.priority_bin) {
960 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1160 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
961 bool order_correct = last_priority.distance_to_visible <= 1161 bool order_correct = last_priority.distance_to_visible <=
962 new_priority.distance_to_visible; 1162 new_priority.distance_to_visible;
963 eventually_bin_order_correct_count += order_correct; 1163 eventually_bin_order_correct_count += order_correct;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 true); 1224 true);
1025 1225
1026 gfx::Rect soon_rect = moved_viewport; 1226 gfx::Rect soon_rect = moved_viewport;
1027 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 1227 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1028 1228
1029 // There are 3 bins in TilePriority. 1229 // There are 3 bins in TilePriority.
1030 bool have_tiles[3] = {}; 1230 bool have_tiles[3] = {};
1031 Tile* last_tile = NULL; 1231 Tile* last_tile = NULL;
1032 int eventually_bin_order_correct_count = 0; 1232 int eventually_bin_order_correct_count = 0;
1033 int eventually_bin_order_incorrect_count = 0; 1233 int eventually_bin_order_incorrect_count = 0;
1034 for (TilingSetRasterQueue queue(tiling_set.get(), false); !queue.IsEmpty(); 1234 scoped_ptr<TilingSetRasterQueue> queue(
1035 queue.Pop()) { 1235 new TilingSetRasterQueueAll(tiling_set.get(), false));
1236 for (; !queue->IsEmpty(); queue->Pop()) {
1036 if (!last_tile) 1237 if (!last_tile)
1037 last_tile = queue.Top(); 1238 last_tile = queue->Top();
1038 1239
1039 Tile* new_tile = queue.Top(); 1240 Tile* new_tile = queue->Top();
1040 1241
1041 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1242 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
1042 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1243 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
1043 1244
1044 have_tiles[new_priority.priority_bin] = true; 1245 have_tiles[new_priority.priority_bin] = true;
1045 1246
1046 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1247 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
1047 if (last_priority.priority_bin == new_priority.priority_bin) { 1248 if (last_priority.priority_bin == new_priority.priority_bin) {
1048 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1249 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
1049 bool order_correct = last_priority.distance_to_visible <= 1250 bool order_correct = last_priority.distance_to_visible <=
(...skipping 14 matching lines...) Expand all
1064 EXPECT_GT(eventually_bin_order_correct_count, 1265 EXPECT_GT(eventually_bin_order_correct_count,
1065 eventually_bin_order_incorrect_count); 1266 eventually_bin_order_incorrect_count);
1066 1267
1067 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1268 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1068 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1269 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1069 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1270 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1070 } 1271 }
1071 1272
1072 } // namespace 1273 } // namespace
1073 } // namespace cc 1274 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_raster_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698