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

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

Issue 863013004: cc: Split RasterTilePriorityQueue into required and all based on type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/resources/tiling_set_raster_queue_all.h"
10 #include "cc/test/begin_frame_args_test.h" 10 #include "cc/test/begin_frame_args_test.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 FakeLayerTreeHostImpl host_impl_; 144 FakeLayerTreeHostImpl host_impl_;
145 FakePictureLayerImpl* pending_layer_; 145 FakePictureLayerImpl* pending_layer_;
146 FakePictureLayerImpl* active_layer_; 146 FakePictureLayerImpl* active_layer_;
147 }; 147 };
148 148
149 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { 149 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) {
150 const gfx::Size layer_bounds(1000, 1000); 150 const gfx::Size layer_bounds(1000, 1000);
151 host_impl_.SetViewportSize(layer_bounds); 151 host_impl_.SetViewportSize(layer_bounds);
152 SetupDefaultTrees(layer_bounds); 152 SetupDefaultTrees(layer_bounds);
153 153
154 RasterTilePriorityQueue queue; 154 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
155 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 155 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
156 RasterTilePriorityQueue::Type::ALL); 156 EXPECT_FALSE(queue->IsEmpty());
157 EXPECT_FALSE(queue.IsEmpty());
158 157
159 size_t tile_count = 0; 158 size_t tile_count = 0;
160 std::set<Tile*> all_tiles; 159 std::set<Tile*> all_tiles;
161 while (!queue.IsEmpty()) { 160 while (!queue->IsEmpty()) {
162 EXPECT_TRUE(queue.Top()); 161 EXPECT_TRUE(queue->Top());
163 all_tiles.insert(queue.Top()); 162 all_tiles.insert(queue->Top());
164 ++tile_count; 163 ++tile_count;
165 queue.Pop(); 164 queue->Pop();
166 } 165 }
167 166
168 EXPECT_EQ(tile_count, all_tiles.size()); 167 EXPECT_EQ(tile_count, all_tiles.size());
169 EXPECT_EQ(16u, tile_count); 168 EXPECT_EQ(16u, tile_count);
170 169
171 // Sanity check, all tiles should be visible. 170 // Sanity check, all tiles should be visible.
172 std::set<Tile*> smoothness_tiles; 171 std::set<Tile*> smoothness_tiles;
173 queue.Reset(); 172 queue.reset(host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
danakj 2015/01/22 20:24:16 why not queue =
vmpstr 2015/01/22 22:44:35 Done.
174 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 173 RasterTilePriorityQueue::Type::ALL)
175 RasterTilePriorityQueue::Type::ALL); 174 .release());
176 bool had_low_res = false; 175 bool had_low_res = false;
177 while (!queue.IsEmpty()) { 176 while (!queue->IsEmpty()) {
178 Tile* tile = queue.Top(); 177 Tile* tile = queue->Top();
179 EXPECT_TRUE(tile); 178 EXPECT_TRUE(tile);
180 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); 179 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin);
181 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); 180 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin);
182 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) 181 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION)
183 had_low_res = true; 182 had_low_res = true;
184 else 183 else
185 smoothness_tiles.insert(tile); 184 smoothness_tiles.insert(tile);
186 queue.Pop(); 185 queue->Pop();
187 } 186 }
188 EXPECT_EQ(all_tiles, smoothness_tiles); 187 EXPECT_EQ(all_tiles, smoothness_tiles);
189 EXPECT_TRUE(had_low_res); 188 EXPECT_TRUE(had_low_res);
190 189
191 // Check that everything is required for activation. 190 // Check that everything is required for activation.
192 queue.Reset(); 191 queue.reset(
danakj 2015/01/22 20:24:16 dittos throughout
vmpstr 2015/01/22 22:44:35 Done.
193 host_impl_.BuildRasterQueue( 192 host_impl_.BuildRasterQueue(
194 &queue, SMOOTHNESS_TAKES_PRIORITY, 193 SMOOTHNESS_TAKES_PRIORITY,
195 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 194 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)
195 .release());
196 std::set<Tile*> required_for_activation_tiles; 196 std::set<Tile*> required_for_activation_tiles;
197 while (!queue.IsEmpty()) { 197 while (!queue->IsEmpty()) {
198 Tile* tile = queue.Top(); 198 Tile* tile = queue->Top();
199 EXPECT_TRUE(tile->required_for_activation()); 199 EXPECT_TRUE(tile->required_for_activation());
200 required_for_activation_tiles.insert(tile); 200 required_for_activation_tiles.insert(tile);
201 queue.Pop(); 201 queue->Pop();
202 } 202 }
203 EXPECT_EQ(all_tiles, required_for_activation_tiles); 203 EXPECT_EQ(all_tiles, required_for_activation_tiles);
204 204
205 // Check that everything is required for draw. 205 // Check that everything is required for draw.
206 queue.Reset(); 206 queue.reset(host_impl_.BuildRasterQueue(
207 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 207 SMOOTHNESS_TAKES_PRIORITY,
208 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 208 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)
209 .release());
209 std::set<Tile*> required_for_draw_tiles; 210 std::set<Tile*> required_for_draw_tiles;
210 while (!queue.IsEmpty()) { 211 while (!queue->IsEmpty()) {
211 Tile* tile = queue.Top(); 212 Tile* tile = queue->Top();
212 EXPECT_TRUE(tile->required_for_draw()); 213 EXPECT_TRUE(tile->required_for_draw());
213 required_for_draw_tiles.insert(tile); 214 required_for_draw_tiles.insert(tile);
214 queue.Pop(); 215 queue->Pop();
215 } 216 }
216 EXPECT_EQ(all_tiles, required_for_draw_tiles); 217 EXPECT_EQ(all_tiles, required_for_draw_tiles);
217 218
218 Region invalidation(gfx::Rect(0, 0, 500, 500)); 219 Region invalidation(gfx::Rect(0, 0, 500, 500));
219 220
220 // Invalidate the pending tree. 221 // Invalidate the pending tree.
221 pending_layer_->set_invalidation(invalidation); 222 pending_layer_->set_invalidation(invalidation);
222 pending_layer_->HighResTiling()->Invalidate(invalidation); 223 pending_layer_->HighResTiling()->Invalidate(invalidation);
223 pending_layer_->LowResTiling()->Invalidate(invalidation); 224 pending_layer_->LowResTiling()->Invalidate(invalidation);
224 225
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 std::vector<Tile*> active_low_res_tiles = 262 std::vector<Tile*> active_low_res_tiles =
262 active_layer_->LowResTiling()->AllTilesForTesting(); 263 active_layer_->LowResTiling()->AllTilesForTesting();
263 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 264 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
264 all_tiles.insert(active_low_res_tiles[i]); 265 all_tiles.insert(active_low_res_tiles[i]);
265 266
266 Tile* last_tile = NULL; 267 Tile* last_tile = NULL;
267 smoothness_tiles.clear(); 268 smoothness_tiles.clear();
268 tile_count = 0; 269 tile_count = 0;
269 size_t correct_order_tiles = 0u; 270 size_t correct_order_tiles = 0u;
270 // Here we expect to get increasing ACTIVE_TREE priority_bin. 271 // Here we expect to get increasing ACTIVE_TREE priority_bin.
271 queue.Reset(); 272 queue.reset(host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
272 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 273 RasterTilePriorityQueue::Type::ALL)
273 RasterTilePriorityQueue::Type::ALL); 274 .release());
274 std::set<Tile*> expected_required_for_draw_tiles; 275 std::set<Tile*> expected_required_for_draw_tiles;
275 std::set<Tile*> expected_required_for_activation_tiles; 276 std::set<Tile*> expected_required_for_activation_tiles;
276 while (!queue.IsEmpty()) { 277 while (!queue->IsEmpty()) {
277 Tile* tile = queue.Top(); 278 Tile* tile = queue->Top();
278 EXPECT_TRUE(tile); 279 EXPECT_TRUE(tile);
279 280
280 if (!last_tile) 281 if (!last_tile)
281 last_tile = tile; 282 last_tile = tile;
282 283
283 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin, 284 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin,
284 tile->priority(ACTIVE_TREE).priority_bin); 285 tile->priority(ACTIVE_TREE).priority_bin);
285 bool skip_updating_last_tile = false; 286 bool skip_updating_last_tile = false;
286 if (last_tile->priority(ACTIVE_TREE).priority_bin == 287 if (last_tile->priority(ACTIVE_TREE).priority_bin ==
287 tile->priority(ACTIVE_TREE).priority_bin) { 288 tile->priority(ACTIVE_TREE).priority_bin) {
(...skipping 17 matching lines...) Expand all
305 } 306 }
306 307
307 if (!skip_updating_last_tile) 308 if (!skip_updating_last_tile)
308 last_tile = tile; 309 last_tile = tile;
309 ++tile_count; 310 ++tile_count;
310 smoothness_tiles.insert(tile); 311 smoothness_tiles.insert(tile);
311 if (tile->required_for_draw()) 312 if (tile->required_for_draw())
312 expected_required_for_draw_tiles.insert(tile); 313 expected_required_for_draw_tiles.insert(tile);
313 if (tile->required_for_activation()) 314 if (tile->required_for_activation())
314 expected_required_for_activation_tiles.insert(tile); 315 expected_required_for_activation_tiles.insert(tile);
315 queue.Pop(); 316 queue->Pop();
316 } 317 }
317 318
318 EXPECT_EQ(tile_count, smoothness_tiles.size()); 319 EXPECT_EQ(tile_count, smoothness_tiles.size());
319 EXPECT_EQ(all_tiles, smoothness_tiles); 320 EXPECT_EQ(all_tiles, smoothness_tiles);
320 // Since we don't guarantee increasing distance due to spiral iterator, we 321 // Since we don't guarantee increasing distance due to spiral iterator, we
321 // should check that we're _mostly_ right. 322 // should check that we're _mostly_ right.
322 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); 323 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4);
323 324
324 // Check that we have consistent required_for_activation tiles. 325 // Check that we have consistent required_for_activation tiles.
325 queue.Reset(); 326 queue.reset(
326 host_impl_.BuildRasterQueue( 327 host_impl_.BuildRasterQueue(
327 &queue, SMOOTHNESS_TAKES_PRIORITY, 328 SMOOTHNESS_TAKES_PRIORITY,
328 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 329 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)
330 .release());
329 required_for_activation_tiles.clear(); 331 required_for_activation_tiles.clear();
330 while (!queue.IsEmpty()) { 332 while (!queue->IsEmpty()) {
331 Tile* tile = queue.Top(); 333 Tile* tile = queue->Top();
332 EXPECT_TRUE(tile->required_for_activation()); 334 EXPECT_TRUE(tile->required_for_activation());
333 required_for_activation_tiles.insert(tile); 335 required_for_activation_tiles.insert(tile);
334 queue.Pop(); 336 queue->Pop();
335 } 337 }
336 EXPECT_EQ(expected_required_for_activation_tiles, 338 EXPECT_EQ(expected_required_for_activation_tiles,
337 required_for_activation_tiles); 339 required_for_activation_tiles);
338 EXPECT_NE(all_tiles, required_for_activation_tiles); 340 EXPECT_NE(all_tiles, required_for_activation_tiles);
339 341
340 // Check that we have consistent required_for_draw tiles. 342 // Check that we have consistent required_for_draw tiles.
341 queue.Reset(); 343 queue.reset(host_impl_.BuildRasterQueue(
342 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 344 SMOOTHNESS_TAKES_PRIORITY,
343 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 345 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)
346 .release());
344 required_for_draw_tiles.clear(); 347 required_for_draw_tiles.clear();
345 while (!queue.IsEmpty()) { 348 while (!queue->IsEmpty()) {
346 Tile* tile = queue.Top(); 349 Tile* tile = queue->Top();
347 EXPECT_TRUE(tile->required_for_draw()); 350 EXPECT_TRUE(tile->required_for_draw());
348 required_for_draw_tiles.insert(tile); 351 required_for_draw_tiles.insert(tile);
349 queue.Pop(); 352 queue->Pop();
350 } 353 }
351 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 354 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
352 EXPECT_NE(all_tiles, required_for_draw_tiles); 355 EXPECT_NE(all_tiles, required_for_draw_tiles);
353 356
354 std::set<Tile*> new_content_tiles; 357 std::set<Tile*> new_content_tiles;
355 last_tile = NULL; 358 last_tile = NULL;
356 size_t increasing_distance_tiles = 0u; 359 size_t increasing_distance_tiles = 0u;
357 // Here we expect to get increasing PENDING_TREE priority_bin. 360 // Here we expect to get increasing PENDING_TREE priority_bin.
358 queue.Reset(); 361 queue.reset(host_impl_.BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY,
359 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, 362 RasterTilePriorityQueue::Type::ALL)
360 RasterTilePriorityQueue::Type::ALL); 363 .release());
361 tile_count = 0; 364 tile_count = 0;
362 while (!queue.IsEmpty()) { 365 while (!queue->IsEmpty()) {
363 Tile* tile = queue.Top(); 366 Tile* tile = queue->Top();
364 EXPECT_TRUE(tile); 367 EXPECT_TRUE(tile);
365 368
366 if (!last_tile) 369 if (!last_tile)
367 last_tile = tile; 370 last_tile = tile;
368 371
369 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, 372 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin,
370 tile->priority(PENDING_TREE).priority_bin); 373 tile->priority(PENDING_TREE).priority_bin);
371 if (last_tile->priority(PENDING_TREE).priority_bin == 374 if (last_tile->priority(PENDING_TREE).priority_bin ==
372 tile->priority(PENDING_TREE).priority_bin) { 375 tile->priority(PENDING_TREE).priority_bin) {
373 increasing_distance_tiles += 376 increasing_distance_tiles +=
374 last_tile->priority(PENDING_TREE).distance_to_visible <= 377 last_tile->priority(PENDING_TREE).distance_to_visible <=
375 tile->priority(PENDING_TREE).distance_to_visible; 378 tile->priority(PENDING_TREE).distance_to_visible;
376 } 379 }
377 380
378 if (tile->priority(PENDING_TREE).priority_bin == TilePriority::NOW && 381 if (tile->priority(PENDING_TREE).priority_bin == TilePriority::NOW &&
379 last_tile->priority(PENDING_TREE).resolution != 382 last_tile->priority(PENDING_TREE).resolution !=
380 tile->priority(PENDING_TREE).resolution) { 383 tile->priority(PENDING_TREE).resolution) {
381 // High resolution should come first. 384 // High resolution should come first.
382 EXPECT_EQ(HIGH_RESOLUTION, last_tile->priority(PENDING_TREE).resolution); 385 EXPECT_EQ(HIGH_RESOLUTION, last_tile->priority(PENDING_TREE).resolution);
383 } 386 }
384 387
385 last_tile = tile; 388 last_tile = tile;
386 new_content_tiles.insert(tile); 389 new_content_tiles.insert(tile);
387 ++tile_count; 390 ++tile_count;
388 queue.Pop(); 391 queue->Pop();
389 } 392 }
390 393
391 EXPECT_EQ(tile_count, new_content_tiles.size()); 394 EXPECT_EQ(tile_count, new_content_tiles.size());
392 EXPECT_EQ(high_res_tiles, new_content_tiles); 395 EXPECT_EQ(high_res_tiles, new_content_tiles);
393 // Since we don't guarantee increasing distance due to spiral iterator, we 396 // Since we don't guarantee increasing distance due to spiral iterator, we
394 // should check that we're _mostly_ right. 397 // should check that we're _mostly_ right.
395 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); 398 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4);
396 399
397 // Check that we have consistent required_for_activation tiles. 400 // Check that we have consistent required_for_activation tiles.
398 queue.Reset(); 401 queue.reset(
399 host_impl_.BuildRasterQueue( 402 host_impl_.BuildRasterQueue(
400 &queue, NEW_CONTENT_TAKES_PRIORITY, 403 NEW_CONTENT_TAKES_PRIORITY,
401 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 404 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)
405 .release());
402 required_for_activation_tiles.clear(); 406 required_for_activation_tiles.clear();
403 while (!queue.IsEmpty()) { 407 while (!queue->IsEmpty()) {
404 Tile* tile = queue.Top(); 408 Tile* tile = queue->Top();
405 EXPECT_TRUE(tile->required_for_activation()); 409 EXPECT_TRUE(tile->required_for_activation());
406 required_for_activation_tiles.insert(tile); 410 required_for_activation_tiles.insert(tile);
407 queue.Pop(); 411 queue->Pop();
408 } 412 }
409 EXPECT_EQ(expected_required_for_activation_tiles, 413 EXPECT_EQ(expected_required_for_activation_tiles,
410 required_for_activation_tiles); 414 required_for_activation_tiles);
411 EXPECT_NE(new_content_tiles, required_for_activation_tiles); 415 EXPECT_NE(new_content_tiles, required_for_activation_tiles);
412 416
413 // Check that we have consistent required_for_draw tiles. 417 // Check that we have consistent required_for_draw tiles.
414 queue.Reset(); 418 queue.reset(host_impl_.BuildRasterQueue(
415 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, 419 NEW_CONTENT_TAKES_PRIORITY,
416 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 420 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)
421 .release());
417 required_for_draw_tiles.clear(); 422 required_for_draw_tiles.clear();
418 while (!queue.IsEmpty()) { 423 while (!queue->IsEmpty()) {
419 Tile* tile = queue.Top(); 424 Tile* tile = queue->Top();
420 EXPECT_TRUE(tile->required_for_draw()); 425 EXPECT_TRUE(tile->required_for_draw());
421 required_for_draw_tiles.insert(tile); 426 required_for_draw_tiles.insert(tile);
422 queue.Pop(); 427 queue->Pop();
423 } 428 }
424 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 429 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
425 EXPECT_NE(new_content_tiles, required_for_draw_tiles); 430 EXPECT_NE(new_content_tiles, required_for_draw_tiles);
426 } 431 }
427 432
428 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) { 433 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) {
429 const gfx::Size layer_bounds(1000, 1000); 434 const gfx::Size layer_bounds(1000, 1000);
430 host_impl_.SetViewportSize(gfx::Size(500, 500)); 435 host_impl_.SetViewportSize(gfx::Size(500, 500));
431 SetupDefaultTrees(layer_bounds); 436 SetupDefaultTrees(layer_bounds);
432 437
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 for (int j = 0; j <= 3; ++j) { 483 for (int j = 0; j <= 3; ++j) {
479 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); 484 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j));
480 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); 485 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j));
481 } 486 }
482 } 487 }
483 // Expect 15 shared tiles and 1 unshared tile. 488 // Expect 15 shared tiles and 1 unshared tile.
484 EXPECT_EQ(17u, expected_all_tiles.size()); 489 EXPECT_EQ(17u, expected_all_tiles.size());
485 490
486 // The actual test will now build different queues and verify that the queues 491 // The actual test will now build different queues and verify that the queues
487 // return the same information as computed manually above. 492 // return the same information as computed manually above.
488 RasterTilePriorityQueue queue; 493 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
489 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 494 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
490 RasterTilePriorityQueue::Type::ALL);
491 std::set<Tile*> actual_now_tiles; 495 std::set<Tile*> actual_now_tiles;
492 std::set<Tile*> actual_all_tiles; 496 std::set<Tile*> actual_all_tiles;
493 while (!queue.IsEmpty()) { 497 while (!queue->IsEmpty()) {
494 Tile* tile = queue.Top(); 498 Tile* tile = queue->Top();
495 queue.Pop(); 499 queue->Pop();
496 if (tile->combined_priority().priority_bin == TilePriority::NOW) 500 if (tile->combined_priority().priority_bin == TilePriority::NOW)
497 actual_now_tiles.insert(tile); 501 actual_now_tiles.insert(tile);
498 actual_all_tiles.insert(tile); 502 actual_all_tiles.insert(tile);
499 } 503 }
500 EXPECT_EQ(expected_now_tiles, actual_now_tiles); 504 EXPECT_EQ(expected_now_tiles, actual_now_tiles);
501 EXPECT_EQ(expected_all_tiles, actual_all_tiles); 505 EXPECT_EQ(expected_all_tiles, actual_all_tiles);
502 506
503 queue.Reset(); 507 queue.reset(host_impl_.BuildRasterQueue(
504 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 508 SAME_PRIORITY_FOR_BOTH_TREES,
505 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 509 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW)
510 .release());
506 std::set<Tile*> actual_required_for_draw_tiles; 511 std::set<Tile*> actual_required_for_draw_tiles;
507 while (!queue.IsEmpty()) { 512 while (!queue->IsEmpty()) {
508 Tile* tile = queue.Top(); 513 Tile* tile = queue->Top();
509 queue.Pop(); 514 queue->Pop();
510 actual_required_for_draw_tiles.insert(tile); 515 actual_required_for_draw_tiles.insert(tile);
511 } 516 }
512 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); 517 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles);
513 518
514 queue.Reset(); 519 queue.reset(
515 host_impl_.BuildRasterQueue( 520 host_impl_.BuildRasterQueue(
516 &queue, SAME_PRIORITY_FOR_BOTH_TREES, 521 SAME_PRIORITY_FOR_BOTH_TREES,
517 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 522 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)
523 .release());
518 std::set<Tile*> actual_required_for_activation_tiles; 524 std::set<Tile*> actual_required_for_activation_tiles;
519 while (!queue.IsEmpty()) { 525 while (!queue->IsEmpty()) {
520 Tile* tile = queue.Top(); 526 Tile* tile = queue->Top();
521 queue.Pop(); 527 queue->Pop();
522 actual_required_for_activation_tiles.insert(tile); 528 actual_required_for_activation_tiles.insert(tile);
523 } 529 }
524 EXPECT_EQ(expected_required_for_activation_tiles, 530 EXPECT_EQ(expected_required_for_activation_tiles,
525 actual_required_for_activation_tiles); 531 actual_required_for_activation_tiles);
526 } 532 }
527 533
528 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { 534 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) {
529 base::TimeTicks time_ticks; 535 base::TimeTicks time_ticks;
530 time_ticks += base::TimeDelta::FromMilliseconds(1); 536 time_ticks += base::TimeDelta::FromMilliseconds(1);
531 host_impl_.SetCurrentBeginFrameArgs( 537 host_impl_.SetCurrentBeginFrameArgs(
(...skipping 13 matching lines...) Expand all
545 pending_child_raw->SetDrawsContent(true); 551 pending_child_raw->SetDrawsContent(true);
546 pending_layer_->AddChild(pending_child.Pass()); 552 pending_layer_->AddChild(pending_child.Pass());
547 553
548 // Set a small viewport, so we have soon and eventually tiles. 554 // Set a small viewport, so we have soon and eventually tiles.
549 host_impl_.SetViewportSize(gfx::Size(200, 200)); 555 host_impl_.SetViewportSize(gfx::Size(200, 200));
550 time_ticks += base::TimeDelta::FromMilliseconds(1); 556 time_ticks += base::TimeDelta::FromMilliseconds(1);
551 host_impl_.SetCurrentBeginFrameArgs( 557 host_impl_.SetCurrentBeginFrameArgs(
552 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 558 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
553 host_impl_.pending_tree()->UpdateDrawProperties(); 559 host_impl_.pending_tree()->UpdateDrawProperties();
554 560
555 RasterTilePriorityQueue queue;
556 host_impl_.SetRequiresHighResToDraw(); 561 host_impl_.SetRequiresHighResToDraw();
557 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 562 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
558 RasterTilePriorityQueue::Type::ALL); 563 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL));
559 EXPECT_FALSE(queue.IsEmpty()); 564 EXPECT_FALSE(queue->IsEmpty());
560 565
561 // Get all the tiles that are NOW or SOON and make sure they are ready to 566 // Get all the tiles that are NOW or SOON and make sure they are ready to
562 // draw. 567 // draw.
563 std::vector<Tile*> all_tiles; 568 std::vector<Tile*> all_tiles;
564 while (!queue.IsEmpty()) { 569 while (!queue->IsEmpty()) {
565 Tile* tile = queue.Top(); 570 Tile* tile = queue->Top();
566 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) 571 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY)
567 break; 572 break;
568 573
569 all_tiles.push_back(tile); 574 all_tiles.push_back(tile);
570 queue.Pop(); 575 queue->Pop();
571 } 576 }
572 577
573 tile_manager()->InitializeTilesWithResourcesForTesting( 578 tile_manager()->InitializeTilesWithResourcesForTesting(
574 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 579 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
575 580
576 // Ensure we can activate. 581 // Ensure we can activate.
577 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); 582 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
578 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw()); 583 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw());
579 } 584 }
580 585
581 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { 586 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) {
582 const gfx::Size layer_bounds(1000, 1000); 587 const gfx::Size layer_bounds(1000, 1000);
583 host_impl_.SetViewportSize(layer_bounds); 588 host_impl_.SetViewportSize(layer_bounds);
584 SetupDefaultTrees(layer_bounds); 589 SetupDefaultTrees(layer_bounds);
585 590
586 EvictionTilePriorityQueue empty_queue; 591 EvictionTilePriorityQueue empty_queue;
587 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); 592 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES);
588 EXPECT_TRUE(empty_queue.IsEmpty()); 593 EXPECT_TRUE(empty_queue.IsEmpty());
589 std::set<Tile*> all_tiles; 594 std::set<Tile*> all_tiles;
590 size_t tile_count = 0; 595 size_t tile_count = 0;
591 596
592 RasterTilePriorityQueue raster_queue; 597 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
593 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 598 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
594 RasterTilePriorityQueue::Type::ALL); 599 while (!raster_queue->IsEmpty()) {
595 while (!raster_queue.IsEmpty()) {
596 ++tile_count; 600 ++tile_count;
597 EXPECT_TRUE(raster_queue.Top()); 601 EXPECT_TRUE(raster_queue->Top());
598 all_tiles.insert(raster_queue.Top()); 602 all_tiles.insert(raster_queue->Top());
599 raster_queue.Pop(); 603 raster_queue->Pop();
600 } 604 }
601 605
602 EXPECT_EQ(tile_count, all_tiles.size()); 606 EXPECT_EQ(tile_count, all_tiles.size());
603 EXPECT_EQ(16u, tile_count); 607 EXPECT_EQ(16u, tile_count);
604 608
605 tile_manager()->InitializeTilesWithResourcesForTesting( 609 tile_manager()->InitializeTilesWithResourcesForTesting(
606 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 610 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
607 611
608 EvictionTilePriorityQueue queue; 612 EvictionTilePriorityQueue queue;
609 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 613 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); 784 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]);
781 pending_child_layer->SetDrawsContent(true); 785 pending_child_layer->SetDrawsContent(true);
782 786
783 time_ticks += base::TimeDelta::FromMilliseconds(1); 787 time_ticks += base::TimeDelta::FromMilliseconds(1);
784 host_impl_.SetCurrentBeginFrameArgs( 788 host_impl_.SetCurrentBeginFrameArgs(
785 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 789 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
786 host_impl_.pending_tree()->UpdateDrawProperties(); 790 host_impl_.pending_tree()->UpdateDrawProperties();
787 791
788 std::set<Tile*> all_tiles; 792 std::set<Tile*> all_tiles;
789 size_t tile_count = 0; 793 size_t tile_count = 0;
790 RasterTilePriorityQueue raster_queue; 794 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
791 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 795 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
792 RasterTilePriorityQueue::Type::ALL); 796 while (!raster_queue->IsEmpty()) {
793 while (!raster_queue.IsEmpty()) {
794 ++tile_count; 797 ++tile_count;
795 EXPECT_TRUE(raster_queue.Top()); 798 EXPECT_TRUE(raster_queue->Top());
796 all_tiles.insert(raster_queue.Top()); 799 all_tiles.insert(raster_queue->Top());
797 raster_queue.Pop(); 800 raster_queue->Pop();
798 } 801 }
799 EXPECT_EQ(tile_count, all_tiles.size()); 802 EXPECT_EQ(tile_count, all_tiles.size());
800 EXPECT_EQ(32u, tile_count); 803 EXPECT_EQ(32u, tile_count);
801 804
802 pending_layer_->ResetAllTilesPriorities(); 805 pending_layer_->ResetAllTilesPriorities();
803 806
804 // Renew all of the tile priorities. 807 // Renew all of the tile priorities.
805 gfx::Rect viewport(layer_bounds); 808 gfx::Rect viewport(layer_bounds);
806 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 809 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
807 Occlusion()); 810 Occlusion());
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 } 989 }
987 EXPECT_EQ(tile_count, new_content_tiles.size()); 990 EXPECT_EQ(tile_count, new_content_tiles.size());
988 EXPECT_EQ(all_tiles, new_content_tiles); 991 EXPECT_EQ(all_tiles, new_content_tiles);
989 } 992 }
990 993
991 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 994 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
992 const gfx::Size layer_bounds(1000, 1000); 995 const gfx::Size layer_bounds(1000, 1000);
993 host_impl_.SetViewportSize(layer_bounds); 996 host_impl_.SetViewportSize(layer_bounds);
994 SetupDefaultTrees(layer_bounds); 997 SetupDefaultTrees(layer_bounds);
995 998
996 RasterTilePriorityQueue queue; 999 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
997 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 1000 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
998 RasterTilePriorityQueue::Type::ALL); 1001 EXPECT_FALSE(queue->IsEmpty());
999 EXPECT_FALSE(queue.IsEmpty());
1000 1002
1001 size_t tile_count = 0; 1003 size_t tile_count = 0;
1002 std::set<Tile*> all_tiles; 1004 std::set<Tile*> all_tiles;
1003 while (!queue.IsEmpty()) { 1005 while (!queue->IsEmpty()) {
1004 EXPECT_TRUE(queue.Top()); 1006 EXPECT_TRUE(queue->Top());
1005 all_tiles.insert(queue.Top()); 1007 all_tiles.insert(queue->Top());
1006 ++tile_count; 1008 ++tile_count;
1007 queue.Pop(); 1009 queue->Pop();
1008 } 1010 }
1009 1011
1010 EXPECT_EQ(tile_count, all_tiles.size()); 1012 EXPECT_EQ(tile_count, all_tiles.size());
1011 EXPECT_EQ(16u, tile_count); 1013 EXPECT_EQ(16u, tile_count);
1012 1014
1013 queue.Reset();
1014 for (int i = 1; i < 10; ++i) { 1015 for (int i = 1; i < 10; ++i) {
1015 scoped_ptr<FakePictureLayerImpl> pending_layer = 1016 scoped_ptr<FakePictureLayerImpl> pending_layer =
1016 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1017 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1017 pending_layer->SetDrawsContent(true); 1018 pending_layer->SetDrawsContent(true);
1018 pending_layer->set_has_valid_tile_priorities(true); 1019 pending_layer->set_has_valid_tile_priorities(true);
1019 pending_layer_->AddChild(pending_layer.Pass()); 1020 pending_layer_->AddChild(pending_layer.Pass());
1020 } 1021 }
1021 1022
1022 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 1023 queue.reset(host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES,
1023 RasterTilePriorityQueue::Type::ALL); 1024 RasterTilePriorityQueue::Type::ALL)
1024 EXPECT_FALSE(queue.IsEmpty()); 1025 .release());
1026 EXPECT_FALSE(queue->IsEmpty());
1025 1027
1026 tile_count = 0; 1028 tile_count = 0;
1027 all_tiles.clear(); 1029 all_tiles.clear();
1028 while (!queue.IsEmpty()) { 1030 while (!queue->IsEmpty()) {
1029 EXPECT_TRUE(queue.Top()); 1031 EXPECT_TRUE(queue->Top());
1030 all_tiles.insert(queue.Top()); 1032 all_tiles.insert(queue->Top());
1031 ++tile_count; 1033 ++tile_count;
1032 queue.Pop(); 1034 queue->Pop();
1033 } 1035 }
1034 EXPECT_EQ(tile_count, all_tiles.size()); 1036 EXPECT_EQ(tile_count, all_tiles.size());
1035 EXPECT_EQ(16u, tile_count); 1037 EXPECT_EQ(16u, tile_count);
1036 } 1038 }
1037 1039
1038 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 1040 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
1039 const gfx::Size layer_bounds(1000, 1000); 1041 const gfx::Size layer_bounds(1000, 1000);
1040 host_impl_.SetViewportSize(layer_bounds); 1042 host_impl_.SetViewportSize(layer_bounds);
1041 SetupDefaultTrees(layer_bounds); 1043 SetupDefaultTrees(layer_bounds);
1042 1044
1043 RasterTilePriorityQueue raster_queue; 1045 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
1044 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 1046 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1045 RasterTilePriorityQueue::Type::ALL); 1047 EXPECT_FALSE(raster_queue->IsEmpty());
1046 EXPECT_FALSE(raster_queue.IsEmpty());
1047 1048
1048 size_t tile_count = 0; 1049 size_t tile_count = 0;
1049 std::set<Tile*> all_tiles; 1050 std::set<Tile*> all_tiles;
1050 while (!raster_queue.IsEmpty()) { 1051 while (!raster_queue->IsEmpty()) {
1051 EXPECT_TRUE(raster_queue.Top()); 1052 EXPECT_TRUE(raster_queue->Top());
1052 all_tiles.insert(raster_queue.Top()); 1053 all_tiles.insert(raster_queue->Top());
1053 ++tile_count; 1054 ++tile_count;
1054 raster_queue.Pop(); 1055 raster_queue->Pop();
1055 } 1056 }
1056 EXPECT_EQ(tile_count, all_tiles.size()); 1057 EXPECT_EQ(tile_count, all_tiles.size());
1057 EXPECT_EQ(16u, tile_count); 1058 EXPECT_EQ(16u, tile_count);
1058 1059
1059 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); 1060 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end());
1060 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); 1061 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
1061 1062
1062 EvictionTilePriorityQueue queue; 1063 EvictionTilePriorityQueue queue;
1063 for (int i = 1; i < 10; ++i) { 1064 for (int i = 1; i < 10; ++i) {
1064 scoped_ptr<FakePictureLayerImpl> pending_layer = 1065 scoped_ptr<FakePictureLayerImpl> pending_layer =
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 EXPECT_GT(eventually_bin_order_correct_count, 1266 EXPECT_GT(eventually_bin_order_correct_count,
1266 eventually_bin_order_incorrect_count); 1267 eventually_bin_order_incorrect_count);
1267 1268
1268 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1269 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1269 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1270 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1270 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1271 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1271 } 1272 }
1272 1273
1273 } // namespace 1274 } // namespace
1274 } // namespace cc 1275 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698