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

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: todos 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
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);
danakj 2015/01/08 23:24:41 this test is just checking that all tiles are requ
vmpstr 2015/01/09 20:21:40 Well it's testing that these tiles are all shared
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);
danakj 2015/01/08 23:24:40 ditto?
vmpstr 2015/01/09 20:21:40 Ditto!
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*> actual_required_for_draw_tiles;
275 std::set<Tile*> actual_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 actual_required_for_draw_tiles.insert(tile);
313 if (tile->required_for_activation())
314 actual_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(actual_required_for_activation_tiles,
danakj 2015/01/08 23:24:41 Can you EXPECT_NE(required_for_activation, all_til
vmpstr 2015/01/09 20:21:40 Done.
337 required_for_activation_tiles);
338
339 // Check that we have consistent required_for_draw tiles.
340 queue.Reset();
341 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
342 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
343 required_for_draw_tiles.clear();
344 while (!queue.IsEmpty()) {
345 Tile* tile = queue.Top();
346 EXPECT_TRUE(tile->required_for_draw());
347 required_for_draw_tiles.insert(tile);
348 queue.Pop();
349 }
350 EXPECT_EQ(actual_required_for_draw_tiles, required_for_draw_tiles);
danakj 2015/01/08 23:24:41 Can you EXPECT_NE(required_for_draw, all_tiles) ?
vmpstr 2015/01/09 20:21:40 Done.
351
287 std::set<Tile*> new_content_tiles; 352 std::set<Tile*> new_content_tiles;
288 last_tile = NULL; 353 last_tile = NULL;
289 size_t increasing_distance_tiles = 0u; 354 size_t increasing_distance_tiles = 0u;
290 // Here we expect to get increasing PENDING_TREE priority_bin. 355 // Here we expect to get increasing PENDING_TREE priority_bin.
291 queue.Reset(); 356 queue.Reset();
292 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY); 357 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY,
358 RasterTilePriorityQueue::Type::ALL);
293 tile_count = 0; 359 tile_count = 0;
294 while (!queue.IsEmpty()) { 360 while (!queue.IsEmpty()) {
295 Tile* tile = queue.Top(); 361 Tile* tile = queue.Top();
296 EXPECT_TRUE(tile); 362 EXPECT_TRUE(tile);
297 363
298 if (!last_tile) 364 if (!last_tile)
299 last_tile = tile; 365 last_tile = tile;
300 366
301 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, 367 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin,
302 tile->priority(PENDING_TREE).priority_bin); 368 tile->priority(PENDING_TREE).priority_bin);
(...skipping 15 matching lines...) Expand all
318 new_content_tiles.insert(tile); 384 new_content_tiles.insert(tile);
319 ++tile_count; 385 ++tile_count;
320 queue.Pop(); 386 queue.Pop();
321 } 387 }
322 388
323 EXPECT_EQ(tile_count, new_content_tiles.size()); 389 EXPECT_EQ(tile_count, new_content_tiles.size());
324 EXPECT_EQ(high_res_tiles, new_content_tiles); 390 EXPECT_EQ(high_res_tiles, new_content_tiles);
325 // Since we don't guarantee increasing distance due to spiral iterator, we 391 // Since we don't guarantee increasing distance due to spiral iterator, we
326 // should check that we're _mostly_ right. 392 // should check that we're _mostly_ right.
327 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); 393 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4);
394
395 // Check that we have consistent required_for_activation tiles.
396 queue.Reset();
397 host_impl_.BuildRasterQueue(
398 &queue, NEW_CONTENT_TAKES_PRIORITY,
399 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
400 required_for_activation_tiles.clear();
401 while (!queue.IsEmpty()) {
402 Tile* tile = queue.Top();
403 EXPECT_TRUE(tile->required_for_activation());
404 required_for_activation_tiles.insert(tile);
405 queue.Pop();
406 }
407 EXPECT_EQ(actual_required_for_activation_tiles,
408 required_for_activation_tiles);
danakj 2015/01/08 23:24:40 ditto?
vmpstr 2015/01/09 20:21:40 Done.
409
410 // Check that we have consistent required_for_draw tiles.
411 queue.Reset();
412 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY,
413 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
414 required_for_draw_tiles.clear();
415 while (!queue.IsEmpty()) {
416 Tile* tile = queue.Top();
417 EXPECT_TRUE(tile->required_for_draw());
418 required_for_draw_tiles.insert(tile);
419 queue.Pop();
420 }
421 EXPECT_EQ(actual_required_for_draw_tiles, required_for_draw_tiles);
danakj 2015/01/08 23:24:40 moar ditto?
vmpstr 2015/01/09 20:21:40 Done.
328 } 422 }
329 423
330 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { 424 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) {
331 base::TimeTicks time_ticks; 425 base::TimeTicks time_ticks;
332 time_ticks += base::TimeDelta::FromMilliseconds(1); 426 time_ticks += base::TimeDelta::FromMilliseconds(1);
333 host_impl_.SetCurrentBeginFrameArgs( 427 host_impl_.SetCurrentBeginFrameArgs(
334 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 428 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
335 429
336 gfx::Size layer_bounds(1000, 1000); 430 gfx::Size layer_bounds(1000, 1000);
337 SetupDefaultTrees(layer_bounds); 431 SetupDefaultTrees(layer_bounds);
(...skipping 11 matching lines...) Expand all
349 443
350 // Set a small viewport, so we have soon and eventually tiles. 444 // Set a small viewport, so we have soon and eventually tiles.
351 host_impl_.SetViewportSize(gfx::Size(200, 200)); 445 host_impl_.SetViewportSize(gfx::Size(200, 200));
352 time_ticks += base::TimeDelta::FromMilliseconds(1); 446 time_ticks += base::TimeDelta::FromMilliseconds(1);
353 host_impl_.SetCurrentBeginFrameArgs( 447 host_impl_.SetCurrentBeginFrameArgs(
354 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 448 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
355 host_impl_.pending_tree()->UpdateDrawProperties(); 449 host_impl_.pending_tree()->UpdateDrawProperties();
356 450
357 RasterTilePriorityQueue queue; 451 RasterTilePriorityQueue queue;
358 host_impl_.SetRequiresHighResToDraw(); 452 host_impl_.SetRequiresHighResToDraw();
359 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 453 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY,
454 RasterTilePriorityQueue::Type::ALL);
360 EXPECT_FALSE(queue.IsEmpty()); 455 EXPECT_FALSE(queue.IsEmpty());
361 456
362 // Get all the tiles that are NOW or SOON and make sure they are ready to 457 // Get all the tiles that are NOW or SOON and make sure they are ready to
363 // draw. 458 // draw.
364 std::vector<Tile*> all_tiles; 459 std::vector<Tile*> all_tiles;
365 while (!queue.IsEmpty()) { 460 while (!queue.IsEmpty()) {
366 Tile* tile = queue.Top(); 461 Tile* tile = queue.Top();
367 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) 462 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY)
368 break; 463 break;
369 464
(...skipping 14 matching lines...) Expand all
384 host_impl_.SetViewportSize(layer_bounds); 479 host_impl_.SetViewportSize(layer_bounds);
385 SetupDefaultTrees(layer_bounds); 480 SetupDefaultTrees(layer_bounds);
386 481
387 EvictionTilePriorityQueue empty_queue; 482 EvictionTilePriorityQueue empty_queue;
388 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); 483 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES);
389 EXPECT_TRUE(empty_queue.IsEmpty()); 484 EXPECT_TRUE(empty_queue.IsEmpty());
390 std::set<Tile*> all_tiles; 485 std::set<Tile*> all_tiles;
391 size_t tile_count = 0; 486 size_t tile_count = 0;
392 487
393 RasterTilePriorityQueue raster_queue; 488 RasterTilePriorityQueue raster_queue;
394 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 489 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
490 RasterTilePriorityQueue::Type::ALL);
395 while (!raster_queue.IsEmpty()) { 491 while (!raster_queue.IsEmpty()) {
396 ++tile_count; 492 ++tile_count;
397 EXPECT_TRUE(raster_queue.Top()); 493 EXPECT_TRUE(raster_queue.Top());
398 all_tiles.insert(raster_queue.Top()); 494 all_tiles.insert(raster_queue.Top());
399 raster_queue.Pop(); 495 raster_queue.Pop();
400 } 496 }
401 497
402 EXPECT_EQ(tile_count, all_tiles.size()); 498 EXPECT_EQ(tile_count, all_tiles.size());
403 EXPECT_EQ(16u, tile_count); 499 EXPECT_EQ(16u, tile_count);
404 500
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 pending_child_layer->SetDrawsContent(true); 677 pending_child_layer->SetDrawsContent(true);
582 678
583 time_ticks += base::TimeDelta::FromMilliseconds(1); 679 time_ticks += base::TimeDelta::FromMilliseconds(1);
584 host_impl_.SetCurrentBeginFrameArgs( 680 host_impl_.SetCurrentBeginFrameArgs(
585 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 681 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
586 host_impl_.pending_tree()->UpdateDrawProperties(); 682 host_impl_.pending_tree()->UpdateDrawProperties();
587 683
588 std::set<Tile*> all_tiles; 684 std::set<Tile*> all_tiles;
589 size_t tile_count = 0; 685 size_t tile_count = 0;
590 RasterTilePriorityQueue raster_queue; 686 RasterTilePriorityQueue raster_queue;
591 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 687 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
688 RasterTilePriorityQueue::Type::ALL);
592 while (!raster_queue.IsEmpty()) { 689 while (!raster_queue.IsEmpty()) {
593 ++tile_count; 690 ++tile_count;
594 EXPECT_TRUE(raster_queue.Top()); 691 EXPECT_TRUE(raster_queue.Top());
595 all_tiles.insert(raster_queue.Top()); 692 all_tiles.insert(raster_queue.Top());
596 raster_queue.Pop(); 693 raster_queue.Pop();
597 } 694 }
598 EXPECT_EQ(tile_count, all_tiles.size()); 695 EXPECT_EQ(tile_count, all_tiles.size());
599 EXPECT_EQ(32u, tile_count); 696 EXPECT_EQ(32u, tile_count);
600 697
601 pending_layer_->ResetAllTilesPriorities(); 698 pending_layer_->ResetAllTilesPriorities();
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 EXPECT_EQ(tile_count, new_content_tiles.size()); 883 EXPECT_EQ(tile_count, new_content_tiles.size());
787 EXPECT_EQ(all_tiles, new_content_tiles); 884 EXPECT_EQ(all_tiles, new_content_tiles);
788 } 885 }
789 886
790 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 887 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
791 const gfx::Size layer_bounds(1000, 1000); 888 const gfx::Size layer_bounds(1000, 1000);
792 host_impl_.SetViewportSize(layer_bounds); 889 host_impl_.SetViewportSize(layer_bounds);
793 SetupDefaultTrees(layer_bounds); 890 SetupDefaultTrees(layer_bounds);
794 891
795 RasterTilePriorityQueue queue; 892 RasterTilePriorityQueue queue;
796 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 893 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
894 RasterTilePriorityQueue::Type::ALL);
797 EXPECT_FALSE(queue.IsEmpty()); 895 EXPECT_FALSE(queue.IsEmpty());
798 896
799 size_t tile_count = 0; 897 size_t tile_count = 0;
800 std::set<Tile*> all_tiles; 898 std::set<Tile*> all_tiles;
801 while (!queue.IsEmpty()) { 899 while (!queue.IsEmpty()) {
802 EXPECT_TRUE(queue.Top()); 900 EXPECT_TRUE(queue.Top());
803 all_tiles.insert(queue.Top()); 901 all_tiles.insert(queue.Top());
804 ++tile_count; 902 ++tile_count;
805 queue.Pop(); 903 queue.Pop();
806 } 904 }
807 905
808 EXPECT_EQ(tile_count, all_tiles.size()); 906 EXPECT_EQ(tile_count, all_tiles.size());
809 EXPECT_EQ(16u, tile_count); 907 EXPECT_EQ(16u, tile_count);
810 908
811 queue.Reset(); 909 queue.Reset();
812 for (int i = 1; i < 10; ++i) { 910 for (int i = 1; i < 10; ++i) {
813 scoped_ptr<FakePictureLayerImpl> pending_layer = 911 scoped_ptr<FakePictureLayerImpl> pending_layer =
814 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 912 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
815 pending_layer->SetDrawsContent(true); 913 pending_layer->SetDrawsContent(true);
816 pending_layer->set_has_valid_tile_priorities(true); 914 pending_layer->set_has_valid_tile_priorities(true);
817 pending_layer_->AddChild(pending_layer.Pass()); 915 pending_layer_->AddChild(pending_layer.Pass());
818 } 916 }
819 917
820 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 918 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES,
919 RasterTilePriorityQueue::Type::ALL);
821 EXPECT_FALSE(queue.IsEmpty()); 920 EXPECT_FALSE(queue.IsEmpty());
822 921
823 tile_count = 0; 922 tile_count = 0;
824 all_tiles.clear(); 923 all_tiles.clear();
825 while (!queue.IsEmpty()) { 924 while (!queue.IsEmpty()) {
826 EXPECT_TRUE(queue.Top()); 925 EXPECT_TRUE(queue.Top());
827 all_tiles.insert(queue.Top()); 926 all_tiles.insert(queue.Top());
828 ++tile_count; 927 ++tile_count;
829 queue.Pop(); 928 queue.Pop();
830 } 929 }
831 EXPECT_EQ(tile_count, all_tiles.size()); 930 EXPECT_EQ(tile_count, all_tiles.size());
832 EXPECT_EQ(16u, tile_count); 931 EXPECT_EQ(16u, tile_count);
833 } 932 }
834 933
835 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 934 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
836 const gfx::Size layer_bounds(1000, 1000); 935 const gfx::Size layer_bounds(1000, 1000);
837 host_impl_.SetViewportSize(layer_bounds); 936 host_impl_.SetViewportSize(layer_bounds);
838 SetupDefaultTrees(layer_bounds); 937 SetupDefaultTrees(layer_bounds);
839 938
840 RasterTilePriorityQueue raster_queue; 939 RasterTilePriorityQueue raster_queue;
841 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES); 940 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES,
941 RasterTilePriorityQueue::Type::ALL);
842 EXPECT_FALSE(raster_queue.IsEmpty()); 942 EXPECT_FALSE(raster_queue.IsEmpty());
843 943
844 size_t tile_count = 0; 944 size_t tile_count = 0;
845 std::set<Tile*> all_tiles; 945 std::set<Tile*> all_tiles;
846 while (!raster_queue.IsEmpty()) { 946 while (!raster_queue.IsEmpty()) {
847 EXPECT_TRUE(raster_queue.Top()); 947 EXPECT_TRUE(raster_queue.Top());
848 all_tiles.insert(raster_queue.Top()); 948 all_tiles.insert(raster_queue.Top());
849 ++tile_count; 949 ++tile_count;
850 raster_queue.Pop(); 950 raster_queue.Pop();
851 } 951 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 &client, settings.max_tiles_for_interest_area, 998 &client, settings.max_tiles_for_interest_area,
899 settings.skewport_target_time_in_seconds, 999 settings.skewport_target_time_in_seconds,
900 settings.skewport_extrapolation_limit_in_content_pixels); 1000 settings.skewport_extrapolation_limit_in_content_pixels);
901 1001
902 scoped_refptr<FakePicturePileImpl> pile = 1002 scoped_refptr<FakePicturePileImpl> pile =
903 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds); 1003 FakePicturePileImpl::CreateFilledPileWithDefaultTileSize(layer_bounds);
904 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile); 1004 PictureLayerTiling* tiling = tiling_set->AddTiling(1.0f, pile);
905 tiling->set_resolution(HIGH_RESOLUTION); 1005 tiling->set_resolution(HIGH_RESOLUTION);
906 1006
907 tiling_set->UpdateTilePriorities(viewport, 1.0f, 1.0, Occlusion(), true); 1007 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(); 1008 std::vector<Tile*> all_tiles = tiling->AllTilesForTesting();
913
914 // Sanity check. 1009 // Sanity check.
915 EXPECT_EQ(841u, all_tiles.size()); 1010 EXPECT_EQ(841u, all_tiles.size());
916 1011
917 // The explanation of each iteration is as follows: 1012 // The explanation of each iteration is as follows:
918 // 1. First iteration tests that we can get all of the tiles correctly. 1013 // 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 1014 // 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 1015 // iteration didn't change any tiles), as well set all tiles to be ready to
921 // draw. 1016 // draw.
922 // 3. Third iteration ensures that no tiles are returned, since they were all 1017 // 3. Third iteration ensures that no tiles are returned, since they were all
923 // marked as ready to draw. 1018 // marked as ready to draw.
924 for (int i = 0; i < 3; ++i) { 1019 for (int i = 0; i < 3; ++i) {
925 TilingSetRasterQueue queue(tiling_set.get(), false); 1020 scoped_ptr<TilingSetRasterQueue> queue(
1021 new TilingSetRasterQueueAll(tiling_set.get(), false));
926 1022
927 // There are 3 bins in TilePriority. 1023 // There are 3 bins in TilePriority.
928 bool have_tiles[3] = {}; 1024 bool have_tiles[3] = {};
929 1025
930 // On the third iteration, we should get no tiles since everything was 1026 // On the third iteration, we should get no tiles since everything was
931 // marked as ready to draw. 1027 // marked as ready to draw.
932 if (i == 2) { 1028 if (i == 2) {
933 EXPECT_TRUE(queue.IsEmpty()); 1029 EXPECT_TRUE(queue->IsEmpty());
934 continue; 1030 continue;
935 } 1031 }
936 1032
937 EXPECT_FALSE(queue.IsEmpty()); 1033 EXPECT_FALSE(queue->IsEmpty());
938 std::set<Tile*> unique_tiles; 1034 std::set<Tile*> unique_tiles;
939 unique_tiles.insert(queue.Top()); 1035 unique_tiles.insert(queue->Top());
940 Tile* last_tile = queue.Top(); 1036 Tile* last_tile = queue->Top();
941 have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true; 1037 have_tiles[last_tile->priority(ACTIVE_TREE).priority_bin] = true;
942 1038
943 // On the second iteration, mark everything as ready to draw (solid color). 1039 // On the second iteration, mark everything as ready to draw (solid color).
944 if (i == 1) { 1040 if (i == 1) {
945 TileDrawInfo& draw_info = last_tile->draw_info(); 1041 TileDrawInfo& draw_info = last_tile->draw_info();
946 draw_info.SetSolidColorForTesting(SK_ColorRED); 1042 draw_info.SetSolidColorForTesting(SK_ColorRED);
947 } 1043 }
948 queue.Pop(); 1044 queue->Pop();
949 int eventually_bin_order_correct_count = 0; 1045 int eventually_bin_order_correct_count = 0;
950 int eventually_bin_order_incorrect_count = 0; 1046 int eventually_bin_order_incorrect_count = 0;
951 while (!queue.IsEmpty()) { 1047 while (!queue->IsEmpty()) {
952 Tile* new_tile = queue.Top(); 1048 Tile* new_tile = queue->Top();
953 queue.Pop(); 1049 queue->Pop();
954 unique_tiles.insert(new_tile); 1050 unique_tiles.insert(new_tile);
955 1051
956 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1052 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
957 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1053 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
958 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1054 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
959 if (last_priority.priority_bin == new_priority.priority_bin) { 1055 if (last_priority.priority_bin == new_priority.priority_bin) {
960 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1056 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
961 bool order_correct = last_priority.distance_to_visible <= 1057 bool order_correct = last_priority.distance_to_visible <=
962 new_priority.distance_to_visible; 1058 new_priority.distance_to_visible;
963 eventually_bin_order_correct_count += order_correct; 1059 eventually_bin_order_correct_count += order_correct;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 true); 1120 true);
1025 1121
1026 gfx::Rect soon_rect = moved_viewport; 1122 gfx::Rect soon_rect = moved_viewport;
1027 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 1123 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1028 1124
1029 // There are 3 bins in TilePriority. 1125 // There are 3 bins in TilePriority.
1030 bool have_tiles[3] = {}; 1126 bool have_tiles[3] = {};
1031 Tile* last_tile = NULL; 1127 Tile* last_tile = NULL;
1032 int eventually_bin_order_correct_count = 0; 1128 int eventually_bin_order_correct_count = 0;
1033 int eventually_bin_order_incorrect_count = 0; 1129 int eventually_bin_order_incorrect_count = 0;
1034 for (TilingSetRasterQueue queue(tiling_set.get(), false); !queue.IsEmpty(); 1130 scoped_ptr<TilingSetRasterQueue> queue(
1035 queue.Pop()) { 1131 new TilingSetRasterQueueAll(tiling_set.get(), false));
1132 for (; !queue->IsEmpty(); queue->Pop()) {
1036 if (!last_tile) 1133 if (!last_tile)
1037 last_tile = queue.Top(); 1134 last_tile = queue->Top();
1038 1135
1039 Tile* new_tile = queue.Top(); 1136 Tile* new_tile = queue->Top();
1040 1137
1041 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1138 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
1042 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1139 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
1043 1140
1044 have_tiles[new_priority.priority_bin] = true; 1141 have_tiles[new_priority.priority_bin] = true;
1045 1142
1046 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1143 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
1047 if (last_priority.priority_bin == new_priority.priority_bin) { 1144 if (last_priority.priority_bin == new_priority.priority_bin) {
1048 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1145 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
1049 bool order_correct = last_priority.distance_to_visible <= 1146 bool order_correct = last_priority.distance_to_visible <=
(...skipping 14 matching lines...) Expand all
1064 EXPECT_GT(eventually_bin_order_correct_count, 1161 EXPECT_GT(eventually_bin_order_correct_count,
1065 eventually_bin_order_incorrect_count); 1162 eventually_bin_order_incorrect_count);
1066 1163
1067 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1164 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1068 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1165 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1069 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1166 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1070 } 1167 }
1071 1168
1072 } // namespace 1169 } // namespace
1073 } // namespace cc 1170 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698