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

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

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo Created 5 years, 10 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/tile_priority.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/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 = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
174 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 173 RasterTilePriorityQueue::Type::ALL);
175 RasterTilePriorityQueue::Type::ALL);
176 bool had_low_res = false; 174 bool had_low_res = false;
177 while (!queue.IsEmpty()) { 175 while (!queue->IsEmpty()) {
178 Tile* tile = queue.Top(); 176 Tile* tile = queue->Top();
179 EXPECT_TRUE(tile); 177 EXPECT_TRUE(tile);
180 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); 178 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin);
181 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); 179 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin);
182 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) 180 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION)
183 had_low_res = true; 181 had_low_res = true;
184 else 182 else
185 smoothness_tiles.insert(tile); 183 smoothness_tiles.insert(tile);
186 queue.Pop(); 184 queue->Pop();
187 } 185 }
188 EXPECT_EQ(all_tiles, smoothness_tiles); 186 EXPECT_EQ(all_tiles, smoothness_tiles);
189 EXPECT_TRUE(had_low_res); 187 EXPECT_TRUE(had_low_res);
190 188
191 // Check that everything is required for activation. 189 // Check that everything is required for activation.
192 queue.Reset(); 190 queue = host_impl_.BuildRasterQueue(
193 host_impl_.BuildRasterQueue( 191 SMOOTHNESS_TAKES_PRIORITY,
194 &queue, SMOOTHNESS_TAKES_PRIORITY,
195 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 192 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
196 std::set<Tile*> required_for_activation_tiles; 193 std::set<Tile*> required_for_activation_tiles;
197 while (!queue.IsEmpty()) { 194 while (!queue->IsEmpty()) {
198 Tile* tile = queue.Top(); 195 Tile* tile = queue->Top();
199 EXPECT_TRUE(tile->required_for_activation()); 196 EXPECT_TRUE(tile->required_for_activation());
200 required_for_activation_tiles.insert(tile); 197 required_for_activation_tiles.insert(tile);
201 queue.Pop(); 198 queue->Pop();
202 } 199 }
203 EXPECT_EQ(all_tiles, required_for_activation_tiles); 200 EXPECT_EQ(all_tiles, required_for_activation_tiles);
204 201
205 // Check that everything is required for draw. 202 // Check that everything is required for draw.
206 queue.Reset(); 203 queue = host_impl_.BuildRasterQueue(
207 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 204 SMOOTHNESS_TAKES_PRIORITY,
208 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 205 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
209 std::set<Tile*> required_for_draw_tiles; 206 std::set<Tile*> required_for_draw_tiles;
210 while (!queue.IsEmpty()) { 207 while (!queue->IsEmpty()) {
211 Tile* tile = queue.Top(); 208 Tile* tile = queue->Top();
212 EXPECT_TRUE(tile->required_for_draw()); 209 EXPECT_TRUE(tile->required_for_draw());
213 required_for_draw_tiles.insert(tile); 210 required_for_draw_tiles.insert(tile);
214 queue.Pop(); 211 queue->Pop();
215 } 212 }
216 EXPECT_EQ(all_tiles, required_for_draw_tiles); 213 EXPECT_EQ(all_tiles, required_for_draw_tiles);
217 214
218 Region invalidation(gfx::Rect(0, 0, 500, 500)); 215 Region invalidation(gfx::Rect(0, 0, 500, 500));
219 216
220 // Invalidate the pending tree. 217 // Invalidate the pending tree.
221 pending_layer_->set_invalidation(invalidation); 218 pending_layer_->set_invalidation(invalidation);
222 pending_layer_->HighResTiling()->Invalidate(invalidation); 219 pending_layer_->HighResTiling()->Invalidate(invalidation);
223 pending_layer_->LowResTiling()->Invalidate(invalidation); 220 pending_layer_->LowResTiling()->Invalidate(invalidation);
224 221
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 std::vector<Tile*> active_low_res_tiles = 258 std::vector<Tile*> active_low_res_tiles =
262 active_layer_->LowResTiling()->AllTilesForTesting(); 259 active_layer_->LowResTiling()->AllTilesForTesting();
263 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 260 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
264 all_tiles.insert(active_low_res_tiles[i]); 261 all_tiles.insert(active_low_res_tiles[i]);
265 262
266 Tile* last_tile = NULL; 263 Tile* last_tile = NULL;
267 smoothness_tiles.clear(); 264 smoothness_tiles.clear();
268 tile_count = 0; 265 tile_count = 0;
269 size_t correct_order_tiles = 0u; 266 size_t correct_order_tiles = 0u;
270 // Here we expect to get increasing ACTIVE_TREE priority_bin. 267 // Here we expect to get increasing ACTIVE_TREE priority_bin.
271 queue.Reset(); 268 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
272 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 269 RasterTilePriorityQueue::Type::ALL);
273 RasterTilePriorityQueue::Type::ALL);
274 std::set<Tile*> expected_required_for_draw_tiles; 270 std::set<Tile*> expected_required_for_draw_tiles;
275 std::set<Tile*> expected_required_for_activation_tiles; 271 std::set<Tile*> expected_required_for_activation_tiles;
276 while (!queue.IsEmpty()) { 272 while (!queue->IsEmpty()) {
277 Tile* tile = queue.Top(); 273 Tile* tile = queue->Top();
278 EXPECT_TRUE(tile); 274 EXPECT_TRUE(tile);
279 275
280 if (!last_tile) 276 if (!last_tile)
281 last_tile = tile; 277 last_tile = tile;
282 278
283 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin, 279 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin,
284 tile->priority(ACTIVE_TREE).priority_bin); 280 tile->priority(ACTIVE_TREE).priority_bin);
285 bool skip_updating_last_tile = false; 281 bool skip_updating_last_tile = false;
286 if (last_tile->priority(ACTIVE_TREE).priority_bin == 282 if (last_tile->priority(ACTIVE_TREE).priority_bin ==
287 tile->priority(ACTIVE_TREE).priority_bin) { 283 tile->priority(ACTIVE_TREE).priority_bin) {
(...skipping 17 matching lines...) Expand all
305 } 301 }
306 302
307 if (!skip_updating_last_tile) 303 if (!skip_updating_last_tile)
308 last_tile = tile; 304 last_tile = tile;
309 ++tile_count; 305 ++tile_count;
310 smoothness_tiles.insert(tile); 306 smoothness_tiles.insert(tile);
311 if (tile->required_for_draw()) 307 if (tile->required_for_draw())
312 expected_required_for_draw_tiles.insert(tile); 308 expected_required_for_draw_tiles.insert(tile);
313 if (tile->required_for_activation()) 309 if (tile->required_for_activation())
314 expected_required_for_activation_tiles.insert(tile); 310 expected_required_for_activation_tiles.insert(tile);
315 queue.Pop(); 311 queue->Pop();
316 } 312 }
317 313
318 EXPECT_EQ(tile_count, smoothness_tiles.size()); 314 EXPECT_EQ(tile_count, smoothness_tiles.size());
319 EXPECT_EQ(all_tiles, smoothness_tiles); 315 EXPECT_EQ(all_tiles, smoothness_tiles);
320 // Since we don't guarantee increasing distance due to spiral iterator, we 316 // Since we don't guarantee increasing distance due to spiral iterator, we
321 // should check that we're _mostly_ right. 317 // should check that we're _mostly_ right.
322 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); 318 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4);
323 319
324 // Check that we have consistent required_for_activation tiles. 320 // Check that we have consistent required_for_activation tiles.
325 queue.Reset(); 321 queue = host_impl_.BuildRasterQueue(
326 host_impl_.BuildRasterQueue( 322 SMOOTHNESS_TAKES_PRIORITY,
327 &queue, SMOOTHNESS_TAKES_PRIORITY,
328 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 323 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
329 required_for_activation_tiles.clear(); 324 required_for_activation_tiles.clear();
330 while (!queue.IsEmpty()) { 325 while (!queue->IsEmpty()) {
331 Tile* tile = queue.Top(); 326 Tile* tile = queue->Top();
332 EXPECT_TRUE(tile->required_for_activation()); 327 EXPECT_TRUE(tile->required_for_activation());
333 required_for_activation_tiles.insert(tile); 328 required_for_activation_tiles.insert(tile);
334 queue.Pop(); 329 queue->Pop();
335 } 330 }
336 EXPECT_EQ(expected_required_for_activation_tiles, 331 EXPECT_EQ(expected_required_for_activation_tiles,
337 required_for_activation_tiles); 332 required_for_activation_tiles);
338 EXPECT_NE(all_tiles, required_for_activation_tiles); 333 EXPECT_NE(all_tiles, required_for_activation_tiles);
339 334
340 // Check that we have consistent required_for_draw tiles. 335 // Check that we have consistent required_for_draw tiles.
341 queue.Reset(); 336 queue = host_impl_.BuildRasterQueue(
342 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 337 SMOOTHNESS_TAKES_PRIORITY,
343 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 338 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
344 required_for_draw_tiles.clear(); 339 required_for_draw_tiles.clear();
345 while (!queue.IsEmpty()) { 340 while (!queue->IsEmpty()) {
346 Tile* tile = queue.Top(); 341 Tile* tile = queue->Top();
347 EXPECT_TRUE(tile->required_for_draw()); 342 EXPECT_TRUE(tile->required_for_draw());
348 required_for_draw_tiles.insert(tile); 343 required_for_draw_tiles.insert(tile);
349 queue.Pop(); 344 queue->Pop();
350 } 345 }
351 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 346 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
352 EXPECT_NE(all_tiles, required_for_draw_tiles); 347 EXPECT_NE(all_tiles, required_for_draw_tiles);
353 348
354 std::set<Tile*> new_content_tiles; 349 std::set<Tile*> new_content_tiles;
355 last_tile = NULL; 350 last_tile = NULL;
356 size_t increasing_distance_tiles = 0u; 351 size_t increasing_distance_tiles = 0u;
357 // Here we expect to get increasing PENDING_TREE priority_bin. 352 // Here we expect to get increasing PENDING_TREE priority_bin.
358 queue.Reset(); 353 queue = host_impl_.BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY,
359 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, 354 RasterTilePriorityQueue::Type::ALL);
360 RasterTilePriorityQueue::Type::ALL);
361 tile_count = 0; 355 tile_count = 0;
362 while (!queue.IsEmpty()) { 356 while (!queue->IsEmpty()) {
363 Tile* tile = queue.Top(); 357 Tile* tile = queue->Top();
364 EXPECT_TRUE(tile); 358 EXPECT_TRUE(tile);
365 359
366 if (!last_tile) 360 if (!last_tile)
367 last_tile = tile; 361 last_tile = tile;
368 362
369 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, 363 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin,
370 tile->priority(PENDING_TREE).priority_bin); 364 tile->priority(PENDING_TREE).priority_bin);
371 if (last_tile->priority(PENDING_TREE).priority_bin == 365 if (last_tile->priority(PENDING_TREE).priority_bin ==
372 tile->priority(PENDING_TREE).priority_bin) { 366 tile->priority(PENDING_TREE).priority_bin) {
373 increasing_distance_tiles += 367 increasing_distance_tiles +=
374 last_tile->priority(PENDING_TREE).distance_to_visible <= 368 last_tile->priority(PENDING_TREE).distance_to_visible <=
375 tile->priority(PENDING_TREE).distance_to_visible; 369 tile->priority(PENDING_TREE).distance_to_visible;
376 } 370 }
377 371
378 if (tile->priority(PENDING_TREE).priority_bin == TilePriority::NOW && 372 if (tile->priority(PENDING_TREE).priority_bin == TilePriority::NOW &&
379 last_tile->priority(PENDING_TREE).resolution != 373 last_tile->priority(PENDING_TREE).resolution !=
380 tile->priority(PENDING_TREE).resolution) { 374 tile->priority(PENDING_TREE).resolution) {
381 // High resolution should come first. 375 // High resolution should come first.
382 EXPECT_EQ(HIGH_RESOLUTION, last_tile->priority(PENDING_TREE).resolution); 376 EXPECT_EQ(HIGH_RESOLUTION, last_tile->priority(PENDING_TREE).resolution);
383 } 377 }
384 378
385 last_tile = tile; 379 last_tile = tile;
386 new_content_tiles.insert(tile); 380 new_content_tiles.insert(tile);
387 ++tile_count; 381 ++tile_count;
388 queue.Pop(); 382 queue->Pop();
389 } 383 }
390 384
391 EXPECT_EQ(tile_count, new_content_tiles.size()); 385 EXPECT_EQ(tile_count, new_content_tiles.size());
392 EXPECT_EQ(high_res_tiles, new_content_tiles); 386 EXPECT_EQ(high_res_tiles, new_content_tiles);
393 // Since we don't guarantee increasing distance due to spiral iterator, we 387 // Since we don't guarantee increasing distance due to spiral iterator, we
394 // should check that we're _mostly_ right. 388 // should check that we're _mostly_ right.
395 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); 389 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4);
396 390
397 // Check that we have consistent required_for_activation tiles. 391 // Check that we have consistent required_for_activation tiles.
398 queue.Reset(); 392 queue = host_impl_.BuildRasterQueue(
399 host_impl_.BuildRasterQueue( 393 NEW_CONTENT_TAKES_PRIORITY,
400 &queue, NEW_CONTENT_TAKES_PRIORITY,
401 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 394 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
402 required_for_activation_tiles.clear(); 395 required_for_activation_tiles.clear();
403 while (!queue.IsEmpty()) { 396 while (!queue->IsEmpty()) {
404 Tile* tile = queue.Top(); 397 Tile* tile = queue->Top();
405 EXPECT_TRUE(tile->required_for_activation()); 398 EXPECT_TRUE(tile->required_for_activation());
406 required_for_activation_tiles.insert(tile); 399 required_for_activation_tiles.insert(tile);
407 queue.Pop(); 400 queue->Pop();
408 } 401 }
409 EXPECT_EQ(expected_required_for_activation_tiles, 402 EXPECT_EQ(expected_required_for_activation_tiles,
410 required_for_activation_tiles); 403 required_for_activation_tiles);
411 EXPECT_NE(new_content_tiles, required_for_activation_tiles); 404 EXPECT_NE(new_content_tiles, required_for_activation_tiles);
412 405
413 // Check that we have consistent required_for_draw tiles. 406 // Check that we have consistent required_for_draw tiles.
414 queue.Reset(); 407 queue = host_impl_.BuildRasterQueue(
415 host_impl_.BuildRasterQueue(&queue, NEW_CONTENT_TAKES_PRIORITY, 408 NEW_CONTENT_TAKES_PRIORITY,
416 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 409 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
417 required_for_draw_tiles.clear(); 410 required_for_draw_tiles.clear();
418 while (!queue.IsEmpty()) { 411 while (!queue->IsEmpty()) {
419 Tile* tile = queue.Top(); 412 Tile* tile = queue->Top();
420 EXPECT_TRUE(tile->required_for_draw()); 413 EXPECT_TRUE(tile->required_for_draw());
421 required_for_draw_tiles.insert(tile); 414 required_for_draw_tiles.insert(tile);
422 queue.Pop(); 415 queue->Pop();
423 } 416 }
424 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 417 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
425 EXPECT_NE(new_content_tiles, required_for_draw_tiles); 418 EXPECT_NE(new_content_tiles, required_for_draw_tiles);
426 } 419 }
427 420
428 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) { 421 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) {
429 const gfx::Size layer_bounds(1000, 1000); 422 const gfx::Size layer_bounds(1000, 1000);
430 host_impl_.SetViewportSize(gfx::Size(500, 500)); 423 host_impl_.SetViewportSize(gfx::Size(500, 500));
431 SetupDefaultTrees(layer_bounds); 424 SetupDefaultTrees(layer_bounds);
432 425
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 for (int j = 0; j <= 3; ++j) { 471 for (int j = 0; j <= 3; ++j) {
479 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); 472 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j));
480 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); 473 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j));
481 } 474 }
482 } 475 }
483 // Expect 15 shared tiles and 1 unshared tile. 476 // Expect 15 shared tiles and 1 unshared tile.
484 EXPECT_EQ(17u, expected_all_tiles.size()); 477 EXPECT_EQ(17u, expected_all_tiles.size());
485 478
486 // The actual test will now build different queues and verify that the queues 479 // The actual test will now build different queues and verify that the queues
487 // return the same information as computed manually above. 480 // return the same information as computed manually above.
488 RasterTilePriorityQueue queue; 481 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
489 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 482 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
490 RasterTilePriorityQueue::Type::ALL);
491 std::set<Tile*> actual_now_tiles; 483 std::set<Tile*> actual_now_tiles;
492 std::set<Tile*> actual_all_tiles; 484 std::set<Tile*> actual_all_tiles;
493 while (!queue.IsEmpty()) { 485 while (!queue->IsEmpty()) {
494 Tile* tile = queue.Top(); 486 Tile* tile = queue->Top();
495 queue.Pop(); 487 queue->Pop();
496 if (tile->combined_priority().priority_bin == TilePriority::NOW) 488 if (tile->combined_priority().priority_bin == TilePriority::NOW)
497 actual_now_tiles.insert(tile); 489 actual_now_tiles.insert(tile);
498 actual_all_tiles.insert(tile); 490 actual_all_tiles.insert(tile);
499 } 491 }
500 EXPECT_EQ(expected_now_tiles, actual_now_tiles); 492 EXPECT_EQ(expected_now_tiles, actual_now_tiles);
501 EXPECT_EQ(expected_all_tiles, actual_all_tiles); 493 EXPECT_EQ(expected_all_tiles, actual_all_tiles);
502 494
503 queue.Reset(); 495 queue = host_impl_.BuildRasterQueue(
504 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 496 SAME_PRIORITY_FOR_BOTH_TREES,
505 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 497 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
506 std::set<Tile*> actual_required_for_draw_tiles; 498 std::set<Tile*> actual_required_for_draw_tiles;
507 while (!queue.IsEmpty()) { 499 while (!queue->IsEmpty()) {
508 Tile* tile = queue.Top(); 500 Tile* tile = queue->Top();
509 queue.Pop(); 501 queue->Pop();
510 actual_required_for_draw_tiles.insert(tile); 502 actual_required_for_draw_tiles.insert(tile);
511 } 503 }
512 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); 504 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles);
513 505
514 queue.Reset(); 506 queue = host_impl_.BuildRasterQueue(
515 host_impl_.BuildRasterQueue( 507 SAME_PRIORITY_FOR_BOTH_TREES,
516 &queue, SAME_PRIORITY_FOR_BOTH_TREES,
517 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 508 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
518 std::set<Tile*> actual_required_for_activation_tiles; 509 std::set<Tile*> actual_required_for_activation_tiles;
519 while (!queue.IsEmpty()) { 510 while (!queue->IsEmpty()) {
520 Tile* tile = queue.Top(); 511 Tile* tile = queue->Top();
521 queue.Pop(); 512 queue->Pop();
522 actual_required_for_activation_tiles.insert(tile); 513 actual_required_for_activation_tiles.insert(tile);
523 } 514 }
524 EXPECT_EQ(expected_required_for_activation_tiles, 515 EXPECT_EQ(expected_required_for_activation_tiles,
525 actual_required_for_activation_tiles); 516 actual_required_for_activation_tiles);
526 } 517 }
527 518
528 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { 519 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) {
529 base::TimeTicks time_ticks; 520 base::TimeTicks time_ticks;
530 time_ticks += base::TimeDelta::FromMilliseconds(1); 521 time_ticks += base::TimeDelta::FromMilliseconds(1);
531 host_impl_.SetCurrentBeginFrameArgs( 522 host_impl_.SetCurrentBeginFrameArgs(
(...skipping 13 matching lines...) Expand all
545 pending_child_raw->SetDrawsContent(true); 536 pending_child_raw->SetDrawsContent(true);
546 pending_layer_->AddChild(pending_child.Pass()); 537 pending_layer_->AddChild(pending_child.Pass());
547 538
548 // Set a small viewport, so we have soon and eventually tiles. 539 // Set a small viewport, so we have soon and eventually tiles.
549 host_impl_.SetViewportSize(gfx::Size(200, 200)); 540 host_impl_.SetViewportSize(gfx::Size(200, 200));
550 time_ticks += base::TimeDelta::FromMilliseconds(1); 541 time_ticks += base::TimeDelta::FromMilliseconds(1);
551 host_impl_.SetCurrentBeginFrameArgs( 542 host_impl_.SetCurrentBeginFrameArgs(
552 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 543 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
553 host_impl_.pending_tree()->UpdateDrawProperties(); 544 host_impl_.pending_tree()->UpdateDrawProperties();
554 545
555 RasterTilePriorityQueue queue;
556 host_impl_.SetRequiresHighResToDraw(); 546 host_impl_.SetRequiresHighResToDraw();
557 host_impl_.BuildRasterQueue(&queue, SMOOTHNESS_TAKES_PRIORITY, 547 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
558 RasterTilePriorityQueue::Type::ALL); 548 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL));
559 EXPECT_FALSE(queue.IsEmpty()); 549 EXPECT_FALSE(queue->IsEmpty());
560 550
561 // Get all the tiles that are NOW or SOON and make sure they are ready to 551 // Get all the tiles that are NOW or SOON and make sure they are ready to
562 // draw. 552 // draw.
563 std::vector<Tile*> all_tiles; 553 std::vector<Tile*> all_tiles;
564 while (!queue.IsEmpty()) { 554 while (!queue->IsEmpty()) {
565 Tile* tile = queue.Top(); 555 Tile* tile = queue->Top();
566 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) 556 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY)
567 break; 557 break;
568 558
569 all_tiles.push_back(tile); 559 all_tiles.push_back(tile);
570 queue.Pop(); 560 queue->Pop();
571 } 561 }
572 562
573 tile_manager()->InitializeTilesWithResourcesForTesting( 563 tile_manager()->InitializeTilesWithResourcesForTesting(
574 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 564 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
575 565
576 // Ensure we can activate. 566 // Ensure we can activate.
577 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); 567 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
578 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw()); 568 EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw());
579 } 569 }
580 570
581 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { 571 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) {
582 const gfx::Size layer_bounds(1000, 1000); 572 const gfx::Size layer_bounds(1000, 1000);
583 host_impl_.SetViewportSize(layer_bounds); 573 host_impl_.SetViewportSize(layer_bounds);
584 SetupDefaultTrees(layer_bounds); 574 SetupDefaultTrees(layer_bounds);
585 575
586 EvictionTilePriorityQueue empty_queue; 576 scoped_ptr<EvictionTilePriorityQueue> empty_queue(
587 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); 577 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES));
588 EXPECT_TRUE(empty_queue.IsEmpty()); 578 EXPECT_TRUE(empty_queue->IsEmpty());
589 std::set<Tile*> all_tiles; 579 std::set<Tile*> all_tiles;
590 size_t tile_count = 0; 580 size_t tile_count = 0;
591 581
592 RasterTilePriorityQueue raster_queue; 582 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
593 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 583 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
594 RasterTilePriorityQueue::Type::ALL); 584 while (!raster_queue->IsEmpty()) {
595 while (!raster_queue.IsEmpty()) {
596 ++tile_count; 585 ++tile_count;
597 EXPECT_TRUE(raster_queue.Top()); 586 EXPECT_TRUE(raster_queue->Top());
598 all_tiles.insert(raster_queue.Top()); 587 all_tiles.insert(raster_queue->Top());
599 raster_queue.Pop(); 588 raster_queue->Pop();
600 } 589 }
601 590
602 EXPECT_EQ(tile_count, all_tiles.size()); 591 EXPECT_EQ(tile_count, all_tiles.size());
603 EXPECT_EQ(16u, tile_count); 592 EXPECT_EQ(16u, tile_count);
604 593
605 tile_manager()->InitializeTilesWithResourcesForTesting( 594 tile_manager()->InitializeTilesWithResourcesForTesting(
606 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 595 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
607 596
608 EvictionTilePriorityQueue queue; 597 scoped_ptr<EvictionTilePriorityQueue> queue(
609 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 598 host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY));
610 EXPECT_FALSE(queue.IsEmpty()); 599 EXPECT_FALSE(queue->IsEmpty());
611 600
612 // Sanity check, all tiles should be visible. 601 // Sanity check, all tiles should be visible.
613 std::set<Tile*> smoothness_tiles; 602 std::set<Tile*> smoothness_tiles;
614 while (!queue.IsEmpty()) { 603 while (!queue->IsEmpty()) {
615 Tile* tile = queue.Top(); 604 Tile* tile = queue->Top();
616 EXPECT_TRUE(tile); 605 EXPECT_TRUE(tile);
617 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); 606 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin);
618 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); 607 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin);
619 EXPECT_TRUE(tile->HasResource()); 608 EXPECT_TRUE(tile->HasResource());
620 smoothness_tiles.insert(tile); 609 smoothness_tiles.insert(tile);
621 queue.Pop(); 610 queue->Pop();
622 } 611 }
623 EXPECT_EQ(all_tiles, smoothness_tiles); 612 EXPECT_EQ(all_tiles, smoothness_tiles);
624 613
625 tile_manager()->ReleaseTileResourcesForTesting( 614 tile_manager()->ReleaseTileResourcesForTesting(
626 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 615 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
627 616
628 Region invalidation(gfx::Rect(0, 0, 500, 500)); 617 Region invalidation(gfx::Rect(0, 0, 500, 500));
629 618
630 // Invalidate the pending tree. 619 // Invalidate the pending tree.
631 pending_layer_->set_invalidation(invalidation); 620 pending_layer_->set_invalidation(invalidation);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 657 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
669 all_tiles.insert(active_low_res_tiles[i]); 658 all_tiles.insert(active_low_res_tiles[i]);
670 659
671 tile_manager()->InitializeTilesWithResourcesForTesting( 660 tile_manager()->InitializeTilesWithResourcesForTesting(
672 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 661 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
673 662
674 Tile* last_tile = NULL; 663 Tile* last_tile = NULL;
675 smoothness_tiles.clear(); 664 smoothness_tiles.clear();
676 tile_count = 0; 665 tile_count = 0;
677 // Here we expect to get increasing ACTIVE_TREE priority_bin. 666 // Here we expect to get increasing ACTIVE_TREE priority_bin.
678 queue.Reset(); 667 queue = host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY);
679 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY);
680 int distance_increasing = 0; 668 int distance_increasing = 0;
681 int distance_decreasing = 0; 669 int distance_decreasing = 0;
682 while (!queue.IsEmpty()) { 670 while (!queue->IsEmpty()) {
683 Tile* tile = queue.Top(); 671 Tile* tile = queue->Top();
684 EXPECT_TRUE(tile); 672 EXPECT_TRUE(tile);
685 EXPECT_TRUE(tile->HasResource()); 673 EXPECT_TRUE(tile->HasResource());
686 674
687 if (!last_tile) 675 if (!last_tile)
688 last_tile = tile; 676 last_tile = tile;
689 677
690 EXPECT_GE(last_tile->priority(ACTIVE_TREE).priority_bin, 678 EXPECT_GE(last_tile->priority(ACTIVE_TREE).priority_bin,
691 tile->priority(ACTIVE_TREE).priority_bin); 679 tile->priority(ACTIVE_TREE).priority_bin);
692 if (last_tile->priority(ACTIVE_TREE).priority_bin == 680 if (last_tile->priority(ACTIVE_TREE).priority_bin ==
693 tile->priority(ACTIVE_TREE).priority_bin) { 681 tile->priority(ACTIVE_TREE).priority_bin) {
694 EXPECT_LE(last_tile->required_for_activation(), 682 EXPECT_LE(last_tile->required_for_activation(),
695 tile->required_for_activation()); 683 tile->required_for_activation());
696 if (last_tile->required_for_activation() == 684 if (last_tile->required_for_activation() ==
697 tile->required_for_activation()) { 685 tile->required_for_activation()) {
698 if (last_tile->priority(ACTIVE_TREE).distance_to_visible >= 686 if (last_tile->priority(ACTIVE_TREE).distance_to_visible >=
699 tile->priority(ACTIVE_TREE).distance_to_visible) 687 tile->priority(ACTIVE_TREE).distance_to_visible)
700 ++distance_decreasing; 688 ++distance_decreasing;
701 else 689 else
702 ++distance_increasing; 690 ++distance_increasing;
703 } 691 }
704 } 692 }
705 693
706 last_tile = tile; 694 last_tile = tile;
707 ++tile_count; 695 ++tile_count;
708 smoothness_tiles.insert(tile); 696 smoothness_tiles.insert(tile);
709 queue.Pop(); 697 queue->Pop();
710 } 698 }
711 699
712 EXPECT_EQ(3, distance_increasing); 700 EXPECT_EQ(3, distance_increasing);
713 EXPECT_EQ(16, distance_decreasing); 701 EXPECT_EQ(16, distance_decreasing);
714 EXPECT_EQ(tile_count, smoothness_tiles.size()); 702 EXPECT_EQ(tile_count, smoothness_tiles.size());
715 EXPECT_EQ(all_tiles, smoothness_tiles); 703 EXPECT_EQ(all_tiles, smoothness_tiles);
716 704
717 std::set<Tile*> new_content_tiles; 705 std::set<Tile*> new_content_tiles;
718 last_tile = NULL; 706 last_tile = NULL;
719 // Here we expect to get increasing PENDING_TREE priority_bin. 707 // Here we expect to get increasing PENDING_TREE priority_bin.
720 queue.Reset(); 708 queue = host_impl_.BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY);
721 host_impl_.BuildEvictionQueue(&queue, NEW_CONTENT_TAKES_PRIORITY);
722 distance_decreasing = 0; 709 distance_decreasing = 0;
723 distance_increasing = 0; 710 distance_increasing = 0;
724 while (!queue.IsEmpty()) { 711 while (!queue->IsEmpty()) {
725 Tile* tile = queue.Top(); 712 Tile* tile = queue->Top();
726 EXPECT_TRUE(tile); 713 EXPECT_TRUE(tile);
727 714
728 if (!last_tile) 715 if (!last_tile)
729 last_tile = tile; 716 last_tile = tile;
730 717
731 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin, 718 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin,
732 tile->priority(PENDING_TREE).priority_bin); 719 tile->priority(PENDING_TREE).priority_bin);
733 if (last_tile->priority(PENDING_TREE).priority_bin == 720 if (last_tile->priority(PENDING_TREE).priority_bin ==
734 tile->priority(PENDING_TREE).priority_bin) { 721 tile->priority(PENDING_TREE).priority_bin) {
735 EXPECT_LE(last_tile->required_for_activation(), 722 EXPECT_LE(last_tile->required_for_activation(),
736 tile->required_for_activation()); 723 tile->required_for_activation());
737 if (last_tile->required_for_activation() == 724 if (last_tile->required_for_activation() ==
738 tile->required_for_activation()) { 725 tile->required_for_activation()) {
739 if (last_tile->priority(PENDING_TREE).distance_to_visible >= 726 if (last_tile->priority(PENDING_TREE).distance_to_visible >=
740 tile->priority(PENDING_TREE).distance_to_visible) 727 tile->priority(PENDING_TREE).distance_to_visible)
741 ++distance_decreasing; 728 ++distance_decreasing;
742 else 729 else
743 ++distance_increasing; 730 ++distance_increasing;
744 } 731 }
745 } 732 }
746 733
747 last_tile = tile; 734 last_tile = tile;
748 new_content_tiles.insert(tile); 735 new_content_tiles.insert(tile);
749 queue.Pop(); 736 queue->Pop();
750 } 737 }
751 738
752 EXPECT_EQ(3, distance_increasing); 739 EXPECT_EQ(3, distance_increasing);
753 EXPECT_EQ(16, distance_decreasing); 740 EXPECT_EQ(16, distance_decreasing);
754 EXPECT_EQ(tile_count, new_content_tiles.size()); 741 EXPECT_EQ(tile_count, new_content_tiles.size());
755 EXPECT_EQ(all_tiles, new_content_tiles); 742 EXPECT_EQ(all_tiles, new_content_tiles);
756 } 743 }
757 744
758 TEST_F(TileManagerTilePriorityQueueTest, 745 TEST_F(TileManagerTilePriorityQueueTest,
759 EvictionTilePriorityQueueWithOcclusion) { 746 EvictionTilePriorityQueueWithOcclusion) {
(...skipping 20 matching lines...) Expand all
780 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); 767 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]);
781 pending_child_layer->SetDrawsContent(true); 768 pending_child_layer->SetDrawsContent(true);
782 769
783 time_ticks += base::TimeDelta::FromMilliseconds(1); 770 time_ticks += base::TimeDelta::FromMilliseconds(1);
784 host_impl_.SetCurrentBeginFrameArgs( 771 host_impl_.SetCurrentBeginFrameArgs(
785 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 772 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
786 host_impl_.pending_tree()->UpdateDrawProperties(); 773 host_impl_.pending_tree()->UpdateDrawProperties();
787 774
788 std::set<Tile*> all_tiles; 775 std::set<Tile*> all_tiles;
789 size_t tile_count = 0; 776 size_t tile_count = 0;
790 RasterTilePriorityQueue raster_queue; 777 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
791 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 778 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
792 RasterTilePriorityQueue::Type::ALL); 779 while (!raster_queue->IsEmpty()) {
793 while (!raster_queue.IsEmpty()) {
794 ++tile_count; 780 ++tile_count;
795 EXPECT_TRUE(raster_queue.Top()); 781 EXPECT_TRUE(raster_queue->Top());
796 all_tiles.insert(raster_queue.Top()); 782 all_tiles.insert(raster_queue->Top());
797 raster_queue.Pop(); 783 raster_queue->Pop();
798 } 784 }
799 EXPECT_EQ(tile_count, all_tiles.size()); 785 EXPECT_EQ(tile_count, all_tiles.size());
800 EXPECT_EQ(32u, tile_count); 786 EXPECT_EQ(32u, tile_count);
801 787
802 pending_layer_->ResetAllTilesPriorities(); 788 pending_layer_->ResetAllTilesPriorities();
803 789
804 // Renew all of the tile priorities. 790 // Renew all of the tile priorities.
805 gfx::Rect viewport(layer_bounds); 791 gfx::Rect viewport(layer_bounds);
806 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 792 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
807 Occlusion()); 793 Occlusion());
(...skipping 28 matching lines...) Expand all
836 all_tiles.insert(pending_child_low_res_tiles.begin(), 822 all_tiles.insert(pending_child_low_res_tiles.begin(),
837 pending_child_low_res_tiles.end()); 823 pending_child_low_res_tiles.end());
838 824
839 tile_manager()->InitializeTilesWithResourcesForTesting( 825 tile_manager()->InitializeTilesWithResourcesForTesting(
840 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 826 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
841 827
842 // Verify occlusion is considered by EvictionTilePriorityQueue. 828 // Verify occlusion is considered by EvictionTilePriorityQueue.
843 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; 829 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
844 size_t occluded_count = 0u; 830 size_t occluded_count = 0u;
845 Tile* last_tile = NULL; 831 Tile* last_tile = NULL;
846 EvictionTilePriorityQueue queue; 832 scoped_ptr<EvictionTilePriorityQueue> queue(
847 host_impl_.BuildEvictionQueue(&queue, tree_priority); 833 host_impl_.BuildEvictionQueue(tree_priority));
848 while (!queue.IsEmpty()) { 834 while (!queue->IsEmpty()) {
849 Tile* tile = queue.Top(); 835 Tile* tile = queue->Top();
850 if (!last_tile) 836 if (!last_tile)
851 last_tile = tile; 837 last_tile = tile;
852 838
853 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority); 839 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority);
854 840
855 // The only way we will encounter an occluded tile after an unoccluded 841 // The only way we will encounter an occluded tile after an unoccluded
856 // tile is if the priorty bin decreased, the tile is required for 842 // tile is if the priorty bin decreased, the tile is required for
857 // activation, or the scale changed. 843 // activation, or the scale changed.
858 if (tile_is_occluded) { 844 if (tile_is_occluded) {
859 occluded_count++; 845 occluded_count++;
860 846
861 bool last_tile_is_occluded = 847 bool last_tile_is_occluded =
862 last_tile->is_occluded_for_tree_priority(tree_priority); 848 last_tile->is_occluded_for_tree_priority(tree_priority);
863 if (!last_tile_is_occluded) { 849 if (!last_tile_is_occluded) {
864 TilePriority::PriorityBin tile_priority_bin = 850 TilePriority::PriorityBin tile_priority_bin =
865 tile->priority_for_tree_priority(tree_priority).priority_bin; 851 tile->priority_for_tree_priority(tree_priority).priority_bin;
866 TilePriority::PriorityBin last_tile_priority_bin = 852 TilePriority::PriorityBin last_tile_priority_bin =
867 last_tile->priority_for_tree_priority(tree_priority).priority_bin; 853 last_tile->priority_for_tree_priority(tree_priority).priority_bin;
868 854
869 EXPECT_TRUE((tile_priority_bin < last_tile_priority_bin) || 855 EXPECT_TRUE((tile_priority_bin < last_tile_priority_bin) ||
870 tile->required_for_activation() || 856 tile->required_for_activation() ||
871 (tile->contents_scale() != last_tile->contents_scale())); 857 (tile->contents_scale() != last_tile->contents_scale()));
872 } 858 }
873 } 859 }
874 last_tile = tile; 860 last_tile = tile;
875 queue.Pop(); 861 queue->Pop();
876 } 862 }
877 size_t expected_occluded_count = 863 size_t expected_occluded_count =
878 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size(); 864 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size();
879 EXPECT_EQ(expected_occluded_count, occluded_count); 865 EXPECT_EQ(expected_occluded_count, occluded_count);
880 } 866 }
881 867
882 TEST_F(TileManagerTilePriorityQueueTest, 868 TEST_F(TileManagerTilePriorityQueueTest,
883 EvictionTilePriorityQueueWithTransparentLayer) { 869 EvictionTilePriorityQueueWithTransparentLayer) {
884 base::TimeTicks time_ticks; 870 base::TimeTicks time_ticks;
885 time_ticks += base::TimeDelta::FromMilliseconds(1); 871 time_ticks += base::TimeDelta::FromMilliseconds(1);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 948
963 EXPECT_TRUE(pending_layer_->HasValidTilePriorities()); 949 EXPECT_TRUE(pending_layer_->HasValidTilePriorities());
964 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities()); 950 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities());
965 951
966 // Verify that eviction queue returns tiles also from layers without valid 952 // Verify that eviction queue returns tiles also from layers without valid
967 // tile priorities and that the tile priority bin of those tiles is (at most) 953 // tile priorities and that the tile priority bin of those tiles is (at most)
968 // EVENTUALLY. 954 // EVENTUALLY.
969 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; 955 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
970 std::set<Tile*> new_content_tiles; 956 std::set<Tile*> new_content_tiles;
971 size_t tile_count = 0; 957 size_t tile_count = 0;
972 EvictionTilePriorityQueue queue; 958 scoped_ptr<EvictionTilePriorityQueue> queue(
973 host_impl_.BuildEvictionQueue(&queue, tree_priority); 959 host_impl_.BuildEvictionQueue(tree_priority));
974 while (!queue.IsEmpty()) { 960 while (!queue->IsEmpty()) {
975 Tile* tile = queue.Top(); 961 Tile* tile = queue->Top();
976 const TilePriority& pending_priority = tile->priority(PENDING_TREE); 962 const TilePriority& pending_priority = tile->priority(PENDING_TREE);
977 EXPECT_NE(std::numeric_limits<float>::infinity(), 963 EXPECT_NE(std::numeric_limits<float>::infinity(),
978 pending_priority.distance_to_visible); 964 pending_priority.distance_to_visible);
979 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) 965 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end())
980 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); 966 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin);
981 else 967 else
982 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); 968 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin);
983 new_content_tiles.insert(tile); 969 new_content_tiles.insert(tile);
984 ++tile_count; 970 ++tile_count;
985 queue.Pop(); 971 queue->Pop();
986 } 972 }
987 EXPECT_EQ(tile_count, new_content_tiles.size()); 973 EXPECT_EQ(tile_count, new_content_tiles.size());
988 EXPECT_EQ(all_tiles, new_content_tiles); 974 EXPECT_EQ(all_tiles, new_content_tiles);
989 } 975 }
990 976
991 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 977 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
992 const gfx::Size layer_bounds(1000, 1000); 978 const gfx::Size layer_bounds(1000, 1000);
993 host_impl_.SetViewportSize(layer_bounds); 979 host_impl_.SetViewportSize(layer_bounds);
994 SetupDefaultTrees(layer_bounds); 980 SetupDefaultTrees(layer_bounds);
995 981
996 RasterTilePriorityQueue queue; 982 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
997 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 983 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
998 RasterTilePriorityQueue::Type::ALL); 984 EXPECT_FALSE(queue->IsEmpty());
999 EXPECT_FALSE(queue.IsEmpty());
1000 985
1001 size_t tile_count = 0; 986 size_t tile_count = 0;
1002 std::set<Tile*> all_tiles; 987 std::set<Tile*> all_tiles;
1003 while (!queue.IsEmpty()) { 988 while (!queue->IsEmpty()) {
1004 EXPECT_TRUE(queue.Top()); 989 EXPECT_TRUE(queue->Top());
1005 all_tiles.insert(queue.Top()); 990 all_tiles.insert(queue->Top());
1006 ++tile_count; 991 ++tile_count;
1007 queue.Pop(); 992 queue->Pop();
1008 } 993 }
1009 994
1010 EXPECT_EQ(tile_count, all_tiles.size()); 995 EXPECT_EQ(tile_count, all_tiles.size());
1011 EXPECT_EQ(16u, tile_count); 996 EXPECT_EQ(16u, tile_count);
1012 997
1013 queue.Reset();
1014 for (int i = 1; i < 10; ++i) { 998 for (int i = 1; i < 10; ++i) {
1015 scoped_ptr<FakePictureLayerImpl> pending_layer = 999 scoped_ptr<FakePictureLayerImpl> pending_layer =
1016 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1000 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1017 pending_layer->SetDrawsContent(true); 1001 pending_layer->SetDrawsContent(true);
1018 pending_layer->set_has_valid_tile_priorities(true); 1002 pending_layer->set_has_valid_tile_priorities(true);
1019 pending_layer_->AddChild(pending_layer.Pass()); 1003 pending_layer_->AddChild(pending_layer.Pass());
1020 } 1004 }
1021 1005
1022 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 1006 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES,
1023 RasterTilePriorityQueue::Type::ALL); 1007 RasterTilePriorityQueue::Type::ALL);
1024 EXPECT_FALSE(queue.IsEmpty()); 1008 EXPECT_FALSE(queue->IsEmpty());
1025 1009
1026 tile_count = 0; 1010 tile_count = 0;
1027 all_tiles.clear(); 1011 all_tiles.clear();
1028 while (!queue.IsEmpty()) { 1012 while (!queue->IsEmpty()) {
1029 EXPECT_TRUE(queue.Top()); 1013 EXPECT_TRUE(queue->Top());
1030 all_tiles.insert(queue.Top()); 1014 all_tiles.insert(queue->Top());
1031 ++tile_count; 1015 ++tile_count;
1032 queue.Pop(); 1016 queue->Pop();
1033 } 1017 }
1034 EXPECT_EQ(tile_count, all_tiles.size()); 1018 EXPECT_EQ(tile_count, all_tiles.size());
1035 EXPECT_EQ(16u, tile_count); 1019 EXPECT_EQ(16u, tile_count);
1036 } 1020 }
1037 1021
1038 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 1022 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
1039 const gfx::Size layer_bounds(1000, 1000); 1023 const gfx::Size layer_bounds(1000, 1000);
1040 host_impl_.SetViewportSize(layer_bounds); 1024 host_impl_.SetViewportSize(layer_bounds);
1041 SetupDefaultTrees(layer_bounds); 1025 SetupDefaultTrees(layer_bounds);
1042 1026
1043 RasterTilePriorityQueue raster_queue; 1027 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
1044 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 1028 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1045 RasterTilePriorityQueue::Type::ALL); 1029 EXPECT_FALSE(raster_queue->IsEmpty());
1046 EXPECT_FALSE(raster_queue.IsEmpty());
1047 1030
1048 size_t tile_count = 0; 1031 size_t tile_count = 0;
1049 std::set<Tile*> all_tiles; 1032 std::set<Tile*> all_tiles;
1050 while (!raster_queue.IsEmpty()) { 1033 while (!raster_queue->IsEmpty()) {
1051 EXPECT_TRUE(raster_queue.Top()); 1034 EXPECT_TRUE(raster_queue->Top());
1052 all_tiles.insert(raster_queue.Top()); 1035 all_tiles.insert(raster_queue->Top());
1053 ++tile_count; 1036 ++tile_count;
1054 raster_queue.Pop(); 1037 raster_queue->Pop();
1055 } 1038 }
1056 EXPECT_EQ(tile_count, all_tiles.size()); 1039 EXPECT_EQ(tile_count, all_tiles.size());
1057 EXPECT_EQ(16u, tile_count); 1040 EXPECT_EQ(16u, tile_count);
1058 1041
1059 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); 1042 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end());
1060 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); 1043 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
1061 1044
1062 EvictionTilePriorityQueue queue;
1063 for (int i = 1; i < 10; ++i) { 1045 for (int i = 1; i < 10; ++i) {
1064 scoped_ptr<FakePictureLayerImpl> pending_layer = 1046 scoped_ptr<FakePictureLayerImpl> pending_layer =
1065 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1047 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1066 pending_layer->SetDrawsContent(true); 1048 pending_layer->SetDrawsContent(true);
1067 pending_layer->set_has_valid_tile_priorities(true); 1049 pending_layer->set_has_valid_tile_priorities(true);
1068 pending_layer_->AddChild(pending_layer.Pass()); 1050 pending_layer_->AddChild(pending_layer.Pass());
1069 } 1051 }
1070 1052
1071 host_impl_.BuildEvictionQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES); 1053 scoped_ptr<EvictionTilePriorityQueue> queue(
1072 EXPECT_FALSE(queue.IsEmpty()); 1054 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES));
1055 EXPECT_FALSE(queue->IsEmpty());
1073 1056
1074 tile_count = 0; 1057 tile_count = 0;
1075 all_tiles.clear(); 1058 all_tiles.clear();
1076 while (!queue.IsEmpty()) { 1059 while (!queue->IsEmpty()) {
1077 EXPECT_TRUE(queue.Top()); 1060 EXPECT_TRUE(queue->Top());
1078 all_tiles.insert(queue.Top()); 1061 all_tiles.insert(queue->Top());
1079 ++tile_count; 1062 ++tile_count;
1080 queue.Pop(); 1063 queue->Pop();
1081 } 1064 }
1082 EXPECT_EQ(tile_count, all_tiles.size()); 1065 EXPECT_EQ(tile_count, all_tiles.size());
1083 EXPECT_EQ(16u, tile_count); 1066 EXPECT_EQ(16u, tile_count);
1084 } 1067 }
1085 1068
1086 TEST_F(TileManagerTilePriorityQueueTest, 1069 TEST_F(TileManagerTilePriorityQueueTest,
1087 RasterTilePriorityQueueStaticViewport) { 1070 RasterTilePriorityQueueStaticViewport) {
1088 FakePictureLayerTilingClient client; 1071 FakePictureLayerTilingClient client;
1089 1072
1090 gfx::Rect viewport(50, 50, 100, 100); 1073 gfx::Rect viewport(50, 50, 100, 100);
(...skipping 23 matching lines...) Expand all
1114 EXPECT_EQ(841u, all_tiles.size()); 1097 EXPECT_EQ(841u, all_tiles.size());
1115 1098
1116 // The explanation of each iteration is as follows: 1099 // The explanation of each iteration is as follows:
1117 // 1. First iteration tests that we can get all of the tiles correctly. 1100 // 1. First iteration tests that we can get all of the tiles correctly.
1118 // 2. Second iteration ensures that we can get all of the tiles again (first 1101 // 2. Second iteration ensures that we can get all of the tiles again (first
1119 // iteration didn't change any tiles), as well set all tiles to be ready to 1102 // iteration didn't change any tiles), as well set all tiles to be ready to
1120 // draw. 1103 // draw.
1121 // 3. Third iteration ensures that no tiles are returned, since they were all 1104 // 3. Third iteration ensures that no tiles are returned, since they were all
1122 // marked as ready to draw. 1105 // marked as ready to draw.
1123 for (int i = 0; i < 3; ++i) { 1106 for (int i = 0; i < 3; ++i) {
1124 scoped_ptr<TilingSetRasterQueue> queue( 1107 scoped_ptr<TilingSetRasterQueueAll> queue(
1125 new TilingSetRasterQueueAll(tiling_set.get(), false)); 1108 new TilingSetRasterQueueAll(tiling_set.get(), false));
1126 1109
1127 // There are 3 bins in TilePriority. 1110 // There are 3 bins in TilePriority.
1128 bool have_tiles[3] = {}; 1111 bool have_tiles[3] = {};
1129 1112
1130 // On the third iteration, we should get no tiles since everything was 1113 // On the third iteration, we should get no tiles since everything was
1131 // marked as ready to draw. 1114 // marked as ready to draw.
1132 if (i == 2) { 1115 if (i == 2) {
1133 EXPECT_TRUE(queue->IsEmpty()); 1116 EXPECT_TRUE(queue->IsEmpty());
1134 continue; 1117 continue;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 true); 1207 true);
1225 1208
1226 gfx::Rect soon_rect = moved_viewport; 1209 gfx::Rect soon_rect = moved_viewport;
1227 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); 1210 soon_rect.Inset(-312.f, -312.f, -312.f, -312.f);
1228 1211
1229 // There are 3 bins in TilePriority. 1212 // There are 3 bins in TilePriority.
1230 bool have_tiles[3] = {}; 1213 bool have_tiles[3] = {};
1231 Tile* last_tile = NULL; 1214 Tile* last_tile = NULL;
1232 int eventually_bin_order_correct_count = 0; 1215 int eventually_bin_order_correct_count = 0;
1233 int eventually_bin_order_incorrect_count = 0; 1216 int eventually_bin_order_incorrect_count = 0;
1234 scoped_ptr<TilingSetRasterQueue> queue( 1217 scoped_ptr<TilingSetRasterQueueAll> queue(
1235 new TilingSetRasterQueueAll(tiling_set.get(), false)); 1218 new TilingSetRasterQueueAll(tiling_set.get(), false));
1236 for (; !queue->IsEmpty(); queue->Pop()) { 1219 for (; !queue->IsEmpty(); queue->Pop()) {
1237 if (!last_tile) 1220 if (!last_tile)
1238 last_tile = queue->Top(); 1221 last_tile = queue->Top();
1239 1222
1240 Tile* new_tile = queue->Top(); 1223 Tile* new_tile = queue->Top();
1241 1224
1242 TilePriority last_priority = last_tile->priority(ACTIVE_TREE); 1225 TilePriority last_priority = last_tile->priority(ACTIVE_TREE);
1243 TilePriority new_priority = new_tile->priority(ACTIVE_TREE); 1226 TilePriority new_priority = new_tile->priority(ACTIVE_TREE);
1244 1227
(...skipping 20 matching lines...) Expand all
1265 EXPECT_GT(eventually_bin_order_correct_count, 1248 EXPECT_GT(eventually_bin_order_correct_count,
1266 eventually_bin_order_incorrect_count); 1249 eventually_bin_order_incorrect_count);
1267 1250
1268 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1251 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1269 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1252 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1270 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1253 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1271 } 1254 }
1272 1255
1273 } // namespace 1256 } // namespace
1274 } // namespace cc 1257 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tile_priority.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698