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

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: compile fix Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_raster_queue.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/eviction_tile_priority_queue.h" 5 #include "cc/resources/eviction_tile_priority_queue.h"
6 #include "cc/resources/raster_tile_priority_queue.h" 6 #include "cc/resources/raster_tile_priority_queue.h"
7 #include "cc/resources/tile.h" 7 #include "cc/resources/tile.h"
8 #include "cc/resources/tile_priority.h" 8 #include "cc/resources/tile_priority.h"
9 #include "cc/resources/tiling_set_raster_queue_all.h" 9 #include "cc/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 EvictionTilePriorityQueue empty_queue;
587 host_impl_.BuildEvictionQueue(&empty_queue, SAME_PRIORITY_FOR_BOTH_TREES); 577 host_impl_.BuildEvictionQueue(&empty_queue, 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 EvictionTilePriorityQueue queue;
609 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 598 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]); 769 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]);
781 pending_child_layer->SetDrawsContent(true); 770 pending_child_layer->SetDrawsContent(true);
782 771
783 time_ticks += base::TimeDelta::FromMilliseconds(1); 772 time_ticks += base::TimeDelta::FromMilliseconds(1);
784 host_impl_.SetCurrentBeginFrameArgs( 773 host_impl_.SetCurrentBeginFrameArgs(
785 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); 774 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks));
786 host_impl_.pending_tree()->UpdateDrawProperties(); 775 host_impl_.pending_tree()->UpdateDrawProperties();
787 776
788 std::set<Tile*> all_tiles; 777 std::set<Tile*> all_tiles;
789 size_t tile_count = 0; 778 size_t tile_count = 0;
790 RasterTilePriorityQueue raster_queue; 779 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
791 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 780 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
792 RasterTilePriorityQueue::Type::ALL); 781 while (!raster_queue->IsEmpty()) {
793 while (!raster_queue.IsEmpty()) {
794 ++tile_count; 782 ++tile_count;
795 EXPECT_TRUE(raster_queue.Top()); 783 EXPECT_TRUE(raster_queue->Top());
796 all_tiles.insert(raster_queue.Top()); 784 all_tiles.insert(raster_queue->Top());
797 raster_queue.Pop(); 785 raster_queue->Pop();
798 } 786 }
799 EXPECT_EQ(tile_count, all_tiles.size()); 787 EXPECT_EQ(tile_count, all_tiles.size());
800 EXPECT_EQ(32u, tile_count); 788 EXPECT_EQ(32u, tile_count);
801 789
802 pending_layer_->ResetAllTilesPriorities(); 790 pending_layer_->ResetAllTilesPriorities();
803 791
804 // Renew all of the tile priorities. 792 // Renew all of the tile priorities.
805 gfx::Rect viewport(layer_bounds); 793 gfx::Rect viewport(layer_bounds);
806 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 794 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
807 Occlusion()); 795 Occlusion());
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 } 974 }
987 EXPECT_EQ(tile_count, new_content_tiles.size()); 975 EXPECT_EQ(tile_count, new_content_tiles.size());
988 EXPECT_EQ(all_tiles, new_content_tiles); 976 EXPECT_EQ(all_tiles, new_content_tiles);
989 } 977 }
990 978
991 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 979 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
992 const gfx::Size layer_bounds(1000, 1000); 980 const gfx::Size layer_bounds(1000, 1000);
993 host_impl_.SetViewportSize(layer_bounds); 981 host_impl_.SetViewportSize(layer_bounds);
994 SetupDefaultTrees(layer_bounds); 982 SetupDefaultTrees(layer_bounds);
995 983
996 RasterTilePriorityQueue queue; 984 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
997 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 985 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
998 RasterTilePriorityQueue::Type::ALL); 986 EXPECT_FALSE(queue->IsEmpty());
999 EXPECT_FALSE(queue.IsEmpty());
1000 987
1001 size_t tile_count = 0; 988 size_t tile_count = 0;
1002 std::set<Tile*> all_tiles; 989 std::set<Tile*> all_tiles;
1003 while (!queue.IsEmpty()) { 990 while (!queue->IsEmpty()) {
1004 EXPECT_TRUE(queue.Top()); 991 EXPECT_TRUE(queue->Top());
1005 all_tiles.insert(queue.Top()); 992 all_tiles.insert(queue->Top());
1006 ++tile_count; 993 ++tile_count;
1007 queue.Pop(); 994 queue->Pop();
1008 } 995 }
1009 996
1010 EXPECT_EQ(tile_count, all_tiles.size()); 997 EXPECT_EQ(tile_count, all_tiles.size());
1011 EXPECT_EQ(16u, tile_count); 998 EXPECT_EQ(16u, tile_count);
1012 999
1013 queue.Reset();
1014 for (int i = 1; i < 10; ++i) { 1000 for (int i = 1; i < 10; ++i) {
1015 scoped_ptr<FakePictureLayerImpl> pending_layer = 1001 scoped_ptr<FakePictureLayerImpl> pending_layer =
1016 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1002 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1017 pending_layer->SetDrawsContent(true); 1003 pending_layer->SetDrawsContent(true);
1018 pending_layer->set_has_valid_tile_priorities(true); 1004 pending_layer->set_has_valid_tile_priorities(true);
1019 pending_layer_->AddChild(pending_layer.Pass()); 1005 pending_layer_->AddChild(pending_layer.Pass());
1020 } 1006 }
1021 1007
1022 host_impl_.BuildRasterQueue(&queue, SAME_PRIORITY_FOR_BOTH_TREES, 1008 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES,
1023 RasterTilePriorityQueue::Type::ALL); 1009 RasterTilePriorityQueue::Type::ALL);
1024 EXPECT_FALSE(queue.IsEmpty()); 1010 EXPECT_FALSE(queue->IsEmpty());
1025 1011
1026 tile_count = 0; 1012 tile_count = 0;
1027 all_tiles.clear(); 1013 all_tiles.clear();
1028 while (!queue.IsEmpty()) { 1014 while (!queue->IsEmpty()) {
1029 EXPECT_TRUE(queue.Top()); 1015 EXPECT_TRUE(queue->Top());
1030 all_tiles.insert(queue.Top()); 1016 all_tiles.insert(queue->Top());
1031 ++tile_count; 1017 ++tile_count;
1032 queue.Pop(); 1018 queue->Pop();
1033 } 1019 }
1034 EXPECT_EQ(tile_count, all_tiles.size()); 1020 EXPECT_EQ(tile_count, all_tiles.size());
1035 EXPECT_EQ(16u, tile_count); 1021 EXPECT_EQ(16u, tile_count);
1036 } 1022 }
1037 1023
1038 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 1024 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
1039 const gfx::Size layer_bounds(1000, 1000); 1025 const gfx::Size layer_bounds(1000, 1000);
1040 host_impl_.SetViewportSize(layer_bounds); 1026 host_impl_.SetViewportSize(layer_bounds);
1041 SetupDefaultTrees(layer_bounds); 1027 SetupDefaultTrees(layer_bounds);
1042 1028
1043 RasterTilePriorityQueue raster_queue; 1029 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
1044 host_impl_.BuildRasterQueue(&raster_queue, SAME_PRIORITY_FOR_BOTH_TREES, 1030 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1045 RasterTilePriorityQueue::Type::ALL); 1031 EXPECT_FALSE(raster_queue->IsEmpty());
1046 EXPECT_FALSE(raster_queue.IsEmpty());
1047 1032
1048 size_t tile_count = 0; 1033 size_t tile_count = 0;
1049 std::set<Tile*> all_tiles; 1034 std::set<Tile*> all_tiles;
1050 while (!raster_queue.IsEmpty()) { 1035 while (!raster_queue->IsEmpty()) {
1051 EXPECT_TRUE(raster_queue.Top()); 1036 EXPECT_TRUE(raster_queue->Top());
1052 all_tiles.insert(raster_queue.Top()); 1037 all_tiles.insert(raster_queue->Top());
1053 ++tile_count; 1038 ++tile_count;
1054 raster_queue.Pop(); 1039 raster_queue->Pop();
1055 } 1040 }
1056 EXPECT_EQ(tile_count, all_tiles.size()); 1041 EXPECT_EQ(tile_count, all_tiles.size());
1057 EXPECT_EQ(16u, tile_count); 1042 EXPECT_EQ(16u, tile_count);
1058 1043
1059 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); 1044 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end());
1060 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); 1045 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
1061 1046
1062 EvictionTilePriorityQueue queue; 1047 EvictionTilePriorityQueue queue;
1063 for (int i = 1; i < 10; ++i) { 1048 for (int i = 1; i < 10; ++i) {
1064 scoped_ptr<FakePictureLayerImpl> pending_layer = 1049 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, 1250 EXPECT_GT(eventually_bin_order_correct_count,
1266 eventually_bin_order_incorrect_count); 1251 eventually_bin_order_incorrect_count);
1267 1252
1268 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1253 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1269 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1254 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1270 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1255 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1271 } 1256 }
1272 1257
1273 } // namespace 1258 } // namespace
1274 } // namespace cc 1259 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_raster_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698