| OLD | NEW |
| 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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 pending_layer->SetBounds(pending_layer->raster_source()->GetSize()); | 123 pending_layer->SetBounds(pending_layer->raster_source()->GetSize()); |
| 124 pending_tree->SetRootLayer(pending_layer.Pass()); | 124 pending_tree->SetRootLayer(pending_layer.Pass()); |
| 125 | 125 |
| 126 pending_layer_ = static_cast<FakePictureLayerImpl*>( | 126 pending_layer_ = static_cast<FakePictureLayerImpl*>( |
| 127 host_impl_.pending_tree()->LayerById(id_)); | 127 host_impl_.pending_tree()->LayerById(id_)); |
| 128 | 128 |
| 129 // Add tilings/tiles for the layer. | 129 // Add tilings/tiles for the layer. |
| 130 host_impl_.pending_tree()->UpdateDrawProperties(); | 130 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 131 } | 131 } |
| 132 | 132 |
| 133 scoped_ptr<RasterTilePriorityQueue> BuildRasterQueue( |
| 134 TreePriority tree_priority, |
| 135 RasterTilePriorityQueue::Type type) { |
| 136 global_state_.tree_priority = tree_priority; |
| 137 tile_manager()->SetGlobalStateForTesting(global_state_); |
| 138 return tile_manager()->BuildRasterQueue(type); |
| 139 } |
| 140 |
| 141 scoped_ptr<EvictionTilePriorityQueue> BuildEvictionQueue( |
| 142 TreePriority tree_priority) { |
| 143 global_state_.tree_priority = tree_priority; |
| 144 tile_manager()->SetGlobalStateForTesting(global_state_); |
| 145 return tile_manager()->BuildEvictionQueue(); |
| 146 } |
| 147 |
| 133 TileManager* tile_manager() { return host_impl_.tile_manager(); } | 148 TileManager* tile_manager() { return host_impl_.tile_manager(); } |
| 134 | 149 |
| 135 protected: | 150 protected: |
| 136 GlobalStateThatImpactsTilePriority global_state_; | 151 GlobalStateThatImpactsTilePriority global_state_; |
| 137 | 152 |
| 138 TestSharedBitmapManager shared_bitmap_manager_; | 153 TestSharedBitmapManager shared_bitmap_manager_; |
| 139 TileMemoryLimitPolicy memory_limit_policy_; | 154 TileMemoryLimitPolicy memory_limit_policy_; |
| 140 int max_tiles_; | 155 int max_tiles_; |
| 141 bool ready_to_activate_; | 156 bool ready_to_activate_; |
| 142 int id_; | 157 int id_; |
| 143 FakeImplProxy proxy_; | 158 FakeImplProxy proxy_; |
| 144 FakeLayerTreeHostImpl host_impl_; | 159 FakeLayerTreeHostImpl host_impl_; |
| 145 FakePictureLayerImpl* pending_layer_; | 160 FakePictureLayerImpl* pending_layer_; |
| 146 FakePictureLayerImpl* active_layer_; | 161 FakePictureLayerImpl* active_layer_; |
| 147 }; | 162 }; |
| 148 | 163 |
| 149 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { | 164 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { |
| 150 const gfx::Size layer_bounds(1000, 1000); | 165 const gfx::Size layer_bounds(1000, 1000); |
| 151 host_impl_.SetViewportSize(layer_bounds); | 166 host_impl_.SetViewportSize(layer_bounds); |
| 152 SetupDefaultTrees(layer_bounds); | 167 SetupDefaultTrees(layer_bounds); |
| 153 | 168 |
| 154 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( | 169 scoped_ptr<RasterTilePriorityQueue> queue(BuildRasterQueue( |
| 155 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 170 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 156 EXPECT_FALSE(queue->IsEmpty()); | 171 EXPECT_FALSE(queue->IsEmpty()); |
| 157 | 172 |
| 158 size_t tile_count = 0; | 173 size_t tile_count = 0; |
| 159 std::set<Tile*> all_tiles; | 174 std::set<Tile*> all_tiles; |
| 160 while (!queue->IsEmpty()) { | 175 while (!queue->IsEmpty()) { |
| 161 EXPECT_TRUE(queue->Top()); | 176 EXPECT_TRUE(queue->Top()); |
| 162 all_tiles.insert(queue->Top()); | 177 all_tiles.insert(queue->Top()); |
| 163 ++tile_count; | 178 ++tile_count; |
| 164 queue->Pop(); | 179 queue->Pop(); |
| 165 } | 180 } |
| 166 | 181 |
| 167 EXPECT_EQ(tile_count, all_tiles.size()); | 182 EXPECT_EQ(tile_count, all_tiles.size()); |
| 168 EXPECT_EQ(16u, tile_count); | 183 EXPECT_EQ(16u, tile_count); |
| 169 | 184 |
| 170 // Sanity check, all tiles should be visible. | 185 // Sanity check, all tiles should be visible. |
| 171 std::set<Tile*> smoothness_tiles; | 186 std::set<Tile*> smoothness_tiles; |
| 172 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, | 187 queue = BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 173 RasterTilePriorityQueue::Type::ALL); | 188 RasterTilePriorityQueue::Type::ALL); |
| 174 bool had_low_res = false; | 189 bool had_low_res = false; |
| 175 while (!queue->IsEmpty()) { | 190 while (!queue->IsEmpty()) { |
| 176 Tile* tile = queue->Top(); | 191 Tile* tile = queue->Top(); |
| 177 EXPECT_TRUE(tile); | 192 EXPECT_TRUE(tile); |
| 178 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); | 193 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); |
| 179 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); | 194 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); |
| 180 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) | 195 if (tile->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) |
| 181 had_low_res = true; | 196 had_low_res = true; |
| 182 else | 197 else |
| 183 smoothness_tiles.insert(tile); | 198 smoothness_tiles.insert(tile); |
| 184 queue->Pop(); | 199 queue->Pop(); |
| 185 } | 200 } |
| 186 EXPECT_EQ(all_tiles, smoothness_tiles); | 201 EXPECT_EQ(all_tiles, smoothness_tiles); |
| 187 EXPECT_TRUE(had_low_res); | 202 EXPECT_TRUE(had_low_res); |
| 188 | 203 |
| 189 // Check that everything is required for activation. | 204 // Check that everything is required for activation. |
| 190 queue = host_impl_.BuildRasterQueue( | 205 queue = |
| 191 SMOOTHNESS_TAKES_PRIORITY, | 206 BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 192 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); | 207 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); |
| 193 std::set<Tile*> required_for_activation_tiles; | 208 std::set<Tile*> required_for_activation_tiles; |
| 194 while (!queue->IsEmpty()) { | 209 while (!queue->IsEmpty()) { |
| 195 Tile* tile = queue->Top(); | 210 Tile* tile = queue->Top(); |
| 196 EXPECT_TRUE(tile->required_for_activation()); | 211 EXPECT_TRUE(tile->required_for_activation()); |
| 197 required_for_activation_tiles.insert(tile); | 212 required_for_activation_tiles.insert(tile); |
| 198 queue->Pop(); | 213 queue->Pop(); |
| 199 } | 214 } |
| 200 EXPECT_EQ(all_tiles, required_for_activation_tiles); | 215 EXPECT_EQ(all_tiles, required_for_activation_tiles); |
| 201 | 216 |
| 202 // Check that everything is required for draw. | 217 // Check that everything is required for draw. |
| 203 queue = host_impl_.BuildRasterQueue( | 218 queue = BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 204 SMOOTHNESS_TAKES_PRIORITY, | 219 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); |
| 205 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); | |
| 206 std::set<Tile*> required_for_draw_tiles; | 220 std::set<Tile*> required_for_draw_tiles; |
| 207 while (!queue->IsEmpty()) { | 221 while (!queue->IsEmpty()) { |
| 208 Tile* tile = queue->Top(); | 222 Tile* tile = queue->Top(); |
| 209 EXPECT_TRUE(tile->required_for_draw()); | 223 EXPECT_TRUE(tile->required_for_draw()); |
| 210 required_for_draw_tiles.insert(tile); | 224 required_for_draw_tiles.insert(tile); |
| 211 queue->Pop(); | 225 queue->Pop(); |
| 212 } | 226 } |
| 213 EXPECT_EQ(all_tiles, required_for_draw_tiles); | 227 EXPECT_EQ(all_tiles, required_for_draw_tiles); |
| 214 | 228 |
| 215 Region invalidation(gfx::Rect(0, 0, 500, 500)); | 229 Region invalidation(gfx::Rect(0, 0, 500, 500)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 std::vector<Tile*> active_low_res_tiles = | 272 std::vector<Tile*> active_low_res_tiles = |
| 259 active_layer_->LowResTiling()->AllTilesForTesting(); | 273 active_layer_->LowResTiling()->AllTilesForTesting(); |
| 260 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) | 274 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) |
| 261 all_tiles.insert(active_low_res_tiles[i]); | 275 all_tiles.insert(active_low_res_tiles[i]); |
| 262 | 276 |
| 263 Tile* last_tile = NULL; | 277 Tile* last_tile = NULL; |
| 264 smoothness_tiles.clear(); | 278 smoothness_tiles.clear(); |
| 265 tile_count = 0; | 279 tile_count = 0; |
| 266 size_t correct_order_tiles = 0u; | 280 size_t correct_order_tiles = 0u; |
| 267 // Here we expect to get increasing ACTIVE_TREE priority_bin. | 281 // Here we expect to get increasing ACTIVE_TREE priority_bin. |
| 268 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, | 282 queue = BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 269 RasterTilePriorityQueue::Type::ALL); | 283 RasterTilePriorityQueue::Type::ALL); |
| 270 std::set<Tile*> expected_required_for_draw_tiles; | 284 std::set<Tile*> expected_required_for_draw_tiles; |
| 271 std::set<Tile*> expected_required_for_activation_tiles; | 285 std::set<Tile*> expected_required_for_activation_tiles; |
| 272 while (!queue->IsEmpty()) { | 286 while (!queue->IsEmpty()) { |
| 273 Tile* tile = queue->Top(); | 287 Tile* tile = queue->Top(); |
| 274 EXPECT_TRUE(tile); | 288 EXPECT_TRUE(tile); |
| 275 | 289 |
| 276 if (!last_tile) | 290 if (!last_tile) |
| 277 last_tile = tile; | 291 last_tile = tile; |
| 278 | 292 |
| 279 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin, | 293 EXPECT_LE(last_tile->priority(ACTIVE_TREE).priority_bin, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 queue->Pop(); | 325 queue->Pop(); |
| 312 } | 326 } |
| 313 | 327 |
| 314 EXPECT_EQ(tile_count, smoothness_tiles.size()); | 328 EXPECT_EQ(tile_count, smoothness_tiles.size()); |
| 315 EXPECT_EQ(all_tiles, smoothness_tiles); | 329 EXPECT_EQ(all_tiles, smoothness_tiles); |
| 316 // Since we don't guarantee increasing distance due to spiral iterator, we | 330 // Since we don't guarantee increasing distance due to spiral iterator, we |
| 317 // should check that we're _mostly_ right. | 331 // should check that we're _mostly_ right. |
| 318 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); | 332 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); |
| 319 | 333 |
| 320 // Check that we have consistent required_for_activation tiles. | 334 // Check that we have consistent required_for_activation tiles. |
| 321 queue = host_impl_.BuildRasterQueue( | 335 queue = |
| 322 SMOOTHNESS_TAKES_PRIORITY, | 336 BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 323 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); | 337 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); |
| 324 required_for_activation_tiles.clear(); | 338 required_for_activation_tiles.clear(); |
| 325 while (!queue->IsEmpty()) { | 339 while (!queue->IsEmpty()) { |
| 326 Tile* tile = queue->Top(); | 340 Tile* tile = queue->Top(); |
| 327 EXPECT_TRUE(tile->required_for_activation()); | 341 EXPECT_TRUE(tile->required_for_activation()); |
| 328 required_for_activation_tiles.insert(tile); | 342 required_for_activation_tiles.insert(tile); |
| 329 queue->Pop(); | 343 queue->Pop(); |
| 330 } | 344 } |
| 331 EXPECT_EQ(expected_required_for_activation_tiles, | 345 EXPECT_EQ(expected_required_for_activation_tiles, |
| 332 required_for_activation_tiles); | 346 required_for_activation_tiles); |
| 333 EXPECT_NE(all_tiles, required_for_activation_tiles); | 347 EXPECT_NE(all_tiles, required_for_activation_tiles); |
| 334 | 348 |
| 335 // Check that we have consistent required_for_draw tiles. | 349 // Check that we have consistent required_for_draw tiles. |
| 336 queue = host_impl_.BuildRasterQueue( | 350 queue = BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, |
| 337 SMOOTHNESS_TAKES_PRIORITY, | 351 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); |
| 338 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); | |
| 339 required_for_draw_tiles.clear(); | 352 required_for_draw_tiles.clear(); |
| 340 while (!queue->IsEmpty()) { | 353 while (!queue->IsEmpty()) { |
| 341 Tile* tile = queue->Top(); | 354 Tile* tile = queue->Top(); |
| 342 EXPECT_TRUE(tile->required_for_draw()); | 355 EXPECT_TRUE(tile->required_for_draw()); |
| 343 required_for_draw_tiles.insert(tile); | 356 required_for_draw_tiles.insert(tile); |
| 344 queue->Pop(); | 357 queue->Pop(); |
| 345 } | 358 } |
| 346 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); | 359 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); |
| 347 EXPECT_NE(all_tiles, required_for_draw_tiles); | 360 EXPECT_NE(all_tiles, required_for_draw_tiles); |
| 348 | 361 |
| 349 std::set<Tile*> new_content_tiles; | 362 std::set<Tile*> new_content_tiles; |
| 350 last_tile = NULL; | 363 last_tile = NULL; |
| 351 size_t increasing_distance_tiles = 0u; | 364 size_t increasing_distance_tiles = 0u; |
| 352 // Here we expect to get increasing PENDING_TREE priority_bin. | 365 // Here we expect to get increasing PENDING_TREE priority_bin. |
| 353 queue = host_impl_.BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY, | 366 queue = BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY, |
| 354 RasterTilePriorityQueue::Type::ALL); | 367 RasterTilePriorityQueue::Type::ALL); |
| 355 tile_count = 0; | 368 tile_count = 0; |
| 356 while (!queue->IsEmpty()) { | 369 while (!queue->IsEmpty()) { |
| 357 Tile* tile = queue->Top(); | 370 Tile* tile = queue->Top(); |
| 358 EXPECT_TRUE(tile); | 371 EXPECT_TRUE(tile); |
| 359 | 372 |
| 360 if (!last_tile) | 373 if (!last_tile) |
| 361 last_tile = tile; | 374 last_tile = tile; |
| 362 | 375 |
| 363 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, | 376 EXPECT_LE(last_tile->priority(PENDING_TREE).priority_bin, |
| 364 tile->priority(PENDING_TREE).priority_bin); | 377 tile->priority(PENDING_TREE).priority_bin); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 382 queue->Pop(); | 395 queue->Pop(); |
| 383 } | 396 } |
| 384 | 397 |
| 385 EXPECT_EQ(tile_count, new_content_tiles.size()); | 398 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 386 EXPECT_EQ(high_res_tiles, new_content_tiles); | 399 EXPECT_EQ(high_res_tiles, new_content_tiles); |
| 387 // Since we don't guarantee increasing distance due to spiral iterator, we | 400 // Since we don't guarantee increasing distance due to spiral iterator, we |
| 388 // should check that we're _mostly_ right. | 401 // should check that we're _mostly_ right. |
| 389 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); | 402 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); |
| 390 | 403 |
| 391 // Check that we have consistent required_for_activation tiles. | 404 // Check that we have consistent required_for_activation tiles. |
| 392 queue = host_impl_.BuildRasterQueue( | 405 queue = |
| 393 NEW_CONTENT_TAKES_PRIORITY, | 406 BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY, |
| 394 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); | 407 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); |
| 395 required_for_activation_tiles.clear(); | 408 required_for_activation_tiles.clear(); |
| 396 while (!queue->IsEmpty()) { | 409 while (!queue->IsEmpty()) { |
| 397 Tile* tile = queue->Top(); | 410 Tile* tile = queue->Top(); |
| 398 EXPECT_TRUE(tile->required_for_activation()); | 411 EXPECT_TRUE(tile->required_for_activation()); |
| 399 required_for_activation_tiles.insert(tile); | 412 required_for_activation_tiles.insert(tile); |
| 400 queue->Pop(); | 413 queue->Pop(); |
| 401 } | 414 } |
| 402 EXPECT_EQ(expected_required_for_activation_tiles, | 415 EXPECT_EQ(expected_required_for_activation_tiles, |
| 403 required_for_activation_tiles); | 416 required_for_activation_tiles); |
| 404 EXPECT_NE(new_content_tiles, required_for_activation_tiles); | 417 EXPECT_NE(new_content_tiles, required_for_activation_tiles); |
| 405 | 418 |
| 406 // Check that we have consistent required_for_draw tiles. | 419 // Check that we have consistent required_for_draw tiles. |
| 407 queue = host_impl_.BuildRasterQueue( | 420 queue = BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY, |
| 408 NEW_CONTENT_TAKES_PRIORITY, | 421 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); |
| 409 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); | |
| 410 required_for_draw_tiles.clear(); | 422 required_for_draw_tiles.clear(); |
| 411 while (!queue->IsEmpty()) { | 423 while (!queue->IsEmpty()) { |
| 412 Tile* tile = queue->Top(); | 424 Tile* tile = queue->Top(); |
| 413 EXPECT_TRUE(tile->required_for_draw()); | 425 EXPECT_TRUE(tile->required_for_draw()); |
| 414 required_for_draw_tiles.insert(tile); | 426 required_for_draw_tiles.insert(tile); |
| 415 queue->Pop(); | 427 queue->Pop(); |
| 416 } | 428 } |
| 417 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); | 429 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); |
| 418 EXPECT_NE(new_content_tiles, required_for_draw_tiles); | 430 EXPECT_NE(new_content_tiles, required_for_draw_tiles); |
| 419 } | 431 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 for (int j = 0; j <= 3; ++j) { | 483 for (int j = 0; j <= 3; ++j) { |
| 472 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); | 484 expected_all_tiles.insert(pending_layer_->HighResTiling()->TileAt(i, j)); |
| 473 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); | 485 expected_all_tiles.insert(active_layer_->HighResTiling()->TileAt(i, j)); |
| 474 } | 486 } |
| 475 } | 487 } |
| 476 // Expect 15 shared tiles and 1 unshared tile. | 488 // Expect 15 shared tiles and 1 unshared tile. |
| 477 EXPECT_EQ(17u, expected_all_tiles.size()); | 489 EXPECT_EQ(17u, expected_all_tiles.size()); |
| 478 | 490 |
| 479 // 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 |
| 480 // return the same information as computed manually above. | 492 // return the same information as computed manually above. |
| 481 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( | 493 scoped_ptr<RasterTilePriorityQueue> queue(BuildRasterQueue( |
| 482 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 494 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 483 std::set<Tile*> actual_now_tiles; | 495 std::set<Tile*> actual_now_tiles; |
| 484 std::set<Tile*> actual_all_tiles; | 496 std::set<Tile*> actual_all_tiles; |
| 485 while (!queue->IsEmpty()) { | 497 while (!queue->IsEmpty()) { |
| 486 Tile* tile = queue->Top(); | 498 Tile* tile = queue->Top(); |
| 487 queue->Pop(); | 499 queue->Pop(); |
| 488 if (tile->combined_priority().priority_bin == TilePriority::NOW) | 500 if (tile->combined_priority().priority_bin == TilePriority::NOW) |
| 489 actual_now_tiles.insert(tile); | 501 actual_now_tiles.insert(tile); |
| 490 actual_all_tiles.insert(tile); | 502 actual_all_tiles.insert(tile); |
| 491 } | 503 } |
| 492 EXPECT_EQ(expected_now_tiles, actual_now_tiles); | 504 EXPECT_EQ(expected_now_tiles, actual_now_tiles); |
| 493 EXPECT_EQ(expected_all_tiles, actual_all_tiles); | 505 EXPECT_EQ(expected_all_tiles, actual_all_tiles); |
| 494 | 506 |
| 495 queue = host_impl_.BuildRasterQueue( | 507 queue = BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, |
| 496 SAME_PRIORITY_FOR_BOTH_TREES, | 508 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); |
| 497 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); | |
| 498 std::set<Tile*> actual_required_for_draw_tiles; | 509 std::set<Tile*> actual_required_for_draw_tiles; |
| 499 while (!queue->IsEmpty()) { | 510 while (!queue->IsEmpty()) { |
| 500 Tile* tile = queue->Top(); | 511 Tile* tile = queue->Top(); |
| 501 queue->Pop(); | 512 queue->Pop(); |
| 502 actual_required_for_draw_tiles.insert(tile); | 513 actual_required_for_draw_tiles.insert(tile); |
| 503 } | 514 } |
| 504 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); | 515 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); |
| 505 | 516 |
| 506 queue = host_impl_.BuildRasterQueue( | 517 queue = |
| 507 SAME_PRIORITY_FOR_BOTH_TREES, | 518 BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, |
| 508 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); | 519 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); |
| 509 std::set<Tile*> actual_required_for_activation_tiles; | 520 std::set<Tile*> actual_required_for_activation_tiles; |
| 510 while (!queue->IsEmpty()) { | 521 while (!queue->IsEmpty()) { |
| 511 Tile* tile = queue->Top(); | 522 Tile* tile = queue->Top(); |
| 512 queue->Pop(); | 523 queue->Pop(); |
| 513 actual_required_for_activation_tiles.insert(tile); | 524 actual_required_for_activation_tiles.insert(tile); |
| 514 } | 525 } |
| 515 EXPECT_EQ(expected_required_for_activation_tiles, | 526 EXPECT_EQ(expected_required_for_activation_tiles, |
| 516 actual_required_for_activation_tiles); | 527 actual_required_for_activation_tiles); |
| 517 } | 528 } |
| 518 | 529 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 537 pending_layer_->AddChild(pending_child.Pass()); | 548 pending_layer_->AddChild(pending_child.Pass()); |
| 538 | 549 |
| 539 // Set a small viewport, so we have soon and eventually tiles. | 550 // Set a small viewport, so we have soon and eventually tiles. |
| 540 host_impl_.SetViewportSize(gfx::Size(200, 200)); | 551 host_impl_.SetViewportSize(gfx::Size(200, 200)); |
| 541 time_ticks += base::TimeDelta::FromMilliseconds(1); | 552 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 542 host_impl_.SetCurrentBeginFrameArgs( | 553 host_impl_.SetCurrentBeginFrameArgs( |
| 543 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 554 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 544 host_impl_.pending_tree()->UpdateDrawProperties(); | 555 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 545 | 556 |
| 546 host_impl_.SetRequiresHighResToDraw(); | 557 host_impl_.SetRequiresHighResToDraw(); |
| 547 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( | 558 scoped_ptr<RasterTilePriorityQueue> queue(BuildRasterQueue( |
| 548 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL)); | 559 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL)); |
| 549 EXPECT_FALSE(queue->IsEmpty()); | 560 EXPECT_FALSE(queue->IsEmpty()); |
| 550 | 561 |
| 551 // Get all the tiles that are NOW or SOON and make sure they are ready to | 562 // Get all the tiles that are NOW or SOON and make sure they are ready to |
| 552 // draw. | 563 // draw. |
| 553 std::vector<Tile*> all_tiles; | 564 std::vector<Tile*> all_tiles; |
| 554 while (!queue->IsEmpty()) { | 565 while (!queue->IsEmpty()) { |
| 555 Tile* tile = queue->Top(); | 566 Tile* tile = queue->Top(); |
| 556 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) | 567 if (tile->combined_priority().priority_bin >= TilePriority::EVENTUALLY) |
| 557 break; | 568 break; |
| 558 | 569 |
| 559 all_tiles.push_back(tile); | 570 all_tiles.push_back(tile); |
| 560 queue->Pop(); | 571 queue->Pop(); |
| 561 } | 572 } |
| 562 | 573 |
| 563 tile_manager()->InitializeTilesWithResourcesForTesting( | 574 tile_manager()->InitializeTilesWithResourcesForTesting( |
| 564 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 575 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 565 | 576 |
| 566 // Ensure we can activate. | 577 // Ensure we can activate. |
| 567 EXPECT_TRUE(tile_manager()->IsReadyToActivate()); | 578 EXPECT_TRUE(tile_manager()->IsReadyToActivate()); |
| 568 } | 579 } |
| 569 | 580 |
| 570 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { | 581 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { |
| 571 const gfx::Size layer_bounds(1000, 1000); | 582 const gfx::Size layer_bounds(1000, 1000); |
| 572 host_impl_.SetViewportSize(layer_bounds); | 583 host_impl_.SetViewportSize(layer_bounds); |
| 573 SetupDefaultTrees(layer_bounds); | 584 SetupDefaultTrees(layer_bounds); |
| 574 | 585 |
| 575 scoped_ptr<EvictionTilePriorityQueue> empty_queue( | 586 scoped_ptr<EvictionTilePriorityQueue> empty_queue( |
| 576 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); | 587 BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); |
| 577 EXPECT_TRUE(empty_queue->IsEmpty()); | 588 EXPECT_TRUE(empty_queue->IsEmpty()); |
| 578 std::set<Tile*> all_tiles; | 589 std::set<Tile*> all_tiles; |
| 579 size_t tile_count = 0; | 590 size_t tile_count = 0; |
| 580 | 591 |
| 581 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( | 592 scoped_ptr<RasterTilePriorityQueue> raster_queue(BuildRasterQueue( |
| 582 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 593 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 583 while (!raster_queue->IsEmpty()) { | 594 while (!raster_queue->IsEmpty()) { |
| 584 ++tile_count; | 595 ++tile_count; |
| 585 EXPECT_TRUE(raster_queue->Top()); | 596 EXPECT_TRUE(raster_queue->Top()); |
| 586 all_tiles.insert(raster_queue->Top()); | 597 all_tiles.insert(raster_queue->Top()); |
| 587 raster_queue->Pop(); | 598 raster_queue->Pop(); |
| 588 } | 599 } |
| 589 | 600 |
| 590 EXPECT_EQ(tile_count, all_tiles.size()); | 601 EXPECT_EQ(tile_count, all_tiles.size()); |
| 591 EXPECT_EQ(16u, tile_count); | 602 EXPECT_EQ(16u, tile_count); |
| 592 | 603 |
| 593 tile_manager()->InitializeTilesWithResourcesForTesting( | 604 tile_manager()->InitializeTilesWithResourcesForTesting( |
| 594 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 605 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 595 | 606 |
| 596 scoped_ptr<EvictionTilePriorityQueue> queue( | 607 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 597 host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY)); | 608 BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY)); |
| 598 EXPECT_FALSE(queue->IsEmpty()); | 609 EXPECT_FALSE(queue->IsEmpty()); |
| 599 | 610 |
| 600 // Sanity check, all tiles should be visible. | 611 // Sanity check, all tiles should be visible. |
| 601 std::set<Tile*> smoothness_tiles; | 612 std::set<Tile*> smoothness_tiles; |
| 602 while (!queue->IsEmpty()) { | 613 while (!queue->IsEmpty()) { |
| 603 Tile* tile = queue->Top(); | 614 Tile* tile = queue->Top(); |
| 604 EXPECT_TRUE(tile); | 615 EXPECT_TRUE(tile); |
| 605 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); | 616 EXPECT_EQ(TilePriority::NOW, tile->priority(ACTIVE_TREE).priority_bin); |
| 606 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); | 617 EXPECT_EQ(TilePriority::NOW, tile->priority(PENDING_TREE).priority_bin); |
| 607 EXPECT_TRUE(tile->HasResource()); | 618 EXPECT_TRUE(tile->HasResource()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) | 667 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) |
| 657 all_tiles.insert(active_low_res_tiles[i]); | 668 all_tiles.insert(active_low_res_tiles[i]); |
| 658 | 669 |
| 659 tile_manager()->InitializeTilesWithResourcesForTesting( | 670 tile_manager()->InitializeTilesWithResourcesForTesting( |
| 660 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 671 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 661 | 672 |
| 662 Tile* last_tile = NULL; | 673 Tile* last_tile = NULL; |
| 663 smoothness_tiles.clear(); | 674 smoothness_tiles.clear(); |
| 664 tile_count = 0; | 675 tile_count = 0; |
| 665 // Here we expect to get increasing ACTIVE_TREE priority_bin. | 676 // Here we expect to get increasing ACTIVE_TREE priority_bin. |
| 666 queue = host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY); | 677 queue = BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY); |
| 667 int distance_increasing = 0; | 678 int distance_increasing = 0; |
| 668 int distance_decreasing = 0; | 679 int distance_decreasing = 0; |
| 669 while (!queue->IsEmpty()) { | 680 while (!queue->IsEmpty()) { |
| 670 Tile* tile = queue->Top(); | 681 Tile* tile = queue->Top(); |
| 671 EXPECT_TRUE(tile); | 682 EXPECT_TRUE(tile); |
| 672 EXPECT_TRUE(tile->HasResource()); | 683 EXPECT_TRUE(tile->HasResource()); |
| 673 | 684 |
| 674 if (!last_tile) | 685 if (!last_tile) |
| 675 last_tile = tile; | 686 last_tile = tile; |
| 676 | 687 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 697 } | 708 } |
| 698 | 709 |
| 699 EXPECT_EQ(3, distance_increasing); | 710 EXPECT_EQ(3, distance_increasing); |
| 700 EXPECT_EQ(16, distance_decreasing); | 711 EXPECT_EQ(16, distance_decreasing); |
| 701 EXPECT_EQ(tile_count, smoothness_tiles.size()); | 712 EXPECT_EQ(tile_count, smoothness_tiles.size()); |
| 702 EXPECT_EQ(all_tiles, smoothness_tiles); | 713 EXPECT_EQ(all_tiles, smoothness_tiles); |
| 703 | 714 |
| 704 std::set<Tile*> new_content_tiles; | 715 std::set<Tile*> new_content_tiles; |
| 705 last_tile = NULL; | 716 last_tile = NULL; |
| 706 // Here we expect to get increasing PENDING_TREE priority_bin. | 717 // Here we expect to get increasing PENDING_TREE priority_bin. |
| 707 queue = host_impl_.BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY); | 718 queue = BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY); |
| 708 distance_decreasing = 0; | 719 distance_decreasing = 0; |
| 709 distance_increasing = 0; | 720 distance_increasing = 0; |
| 710 while (!queue->IsEmpty()) { | 721 while (!queue->IsEmpty()) { |
| 711 Tile* tile = queue->Top(); | 722 Tile* tile = queue->Top(); |
| 712 EXPECT_TRUE(tile); | 723 EXPECT_TRUE(tile); |
| 713 | 724 |
| 714 if (!last_tile) | 725 if (!last_tile) |
| 715 last_tile = tile; | 726 last_tile = tile; |
| 716 | 727 |
| 717 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin, | 728 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); | 777 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); |
| 767 pending_child_layer->SetDrawsContent(true); | 778 pending_child_layer->SetDrawsContent(true); |
| 768 | 779 |
| 769 time_ticks += base::TimeDelta::FromMilliseconds(1); | 780 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 770 host_impl_.SetCurrentBeginFrameArgs( | 781 host_impl_.SetCurrentBeginFrameArgs( |
| 771 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 782 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 772 host_impl_.pending_tree()->UpdateDrawProperties(); | 783 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 773 | 784 |
| 774 std::set<Tile*> all_tiles; | 785 std::set<Tile*> all_tiles; |
| 775 size_t tile_count = 0; | 786 size_t tile_count = 0; |
| 776 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( | 787 scoped_ptr<RasterTilePriorityQueue> raster_queue(BuildRasterQueue( |
| 777 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 788 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 778 while (!raster_queue->IsEmpty()) { | 789 while (!raster_queue->IsEmpty()) { |
| 779 ++tile_count; | 790 ++tile_count; |
| 780 EXPECT_TRUE(raster_queue->Top()); | 791 EXPECT_TRUE(raster_queue->Top()); |
| 781 all_tiles.insert(raster_queue->Top()); | 792 all_tiles.insert(raster_queue->Top()); |
| 782 raster_queue->Pop(); | 793 raster_queue->Pop(); |
| 783 } | 794 } |
| 784 EXPECT_EQ(tile_count, all_tiles.size()); | 795 EXPECT_EQ(tile_count, all_tiles.size()); |
| 785 EXPECT_EQ(32u, tile_count); | 796 EXPECT_EQ(32u, tile_count); |
| 786 | 797 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 pending_child_low_res_tiles.end()); | 833 pending_child_low_res_tiles.end()); |
| 823 | 834 |
| 824 tile_manager()->InitializeTilesWithResourcesForTesting( | 835 tile_manager()->InitializeTilesWithResourcesForTesting( |
| 825 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 836 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 826 | 837 |
| 827 // Verify occlusion is considered by EvictionTilePriorityQueue. | 838 // Verify occlusion is considered by EvictionTilePriorityQueue. |
| 828 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; | 839 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; |
| 829 size_t occluded_count = 0u; | 840 size_t occluded_count = 0u; |
| 830 Tile* last_tile = NULL; | 841 Tile* last_tile = NULL; |
| 831 scoped_ptr<EvictionTilePriorityQueue> queue( | 842 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 832 host_impl_.BuildEvictionQueue(tree_priority)); | 843 BuildEvictionQueue(tree_priority)); |
| 833 while (!queue->IsEmpty()) { | 844 while (!queue->IsEmpty()) { |
| 834 Tile* tile = queue->Top(); | 845 Tile* tile = queue->Top(); |
| 835 if (!last_tile) | 846 if (!last_tile) |
| 836 last_tile = tile; | 847 last_tile = tile; |
| 837 | 848 |
| 838 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority); | 849 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority); |
| 839 | 850 |
| 840 // The only way we will encounter an occluded tile after an unoccluded | 851 // The only way we will encounter an occluded tile after an unoccluded |
| 841 // tile is if the priorty bin decreased, the tile is required for | 852 // tile is if the priorty bin decreased, the tile is required for |
| 842 // activation, or the scale changed. | 853 // activation, or the scale changed. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 EXPECT_TRUE(pending_layer_->HasValidTilePriorities()); | 959 EXPECT_TRUE(pending_layer_->HasValidTilePriorities()); |
| 949 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities()); | 960 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities()); |
| 950 | 961 |
| 951 // Verify that eviction queue returns tiles also from layers without valid | 962 // Verify that eviction queue returns tiles also from layers without valid |
| 952 // tile priorities and that the tile priority bin of those tiles is (at most) | 963 // tile priorities and that the tile priority bin of those tiles is (at most) |
| 953 // EVENTUALLY. | 964 // EVENTUALLY. |
| 954 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; | 965 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; |
| 955 std::set<Tile*> new_content_tiles; | 966 std::set<Tile*> new_content_tiles; |
| 956 size_t tile_count = 0; | 967 size_t tile_count = 0; |
| 957 scoped_ptr<EvictionTilePriorityQueue> queue( | 968 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 958 host_impl_.BuildEvictionQueue(tree_priority)); | 969 BuildEvictionQueue(tree_priority)); |
| 959 while (!queue->IsEmpty()) { | 970 while (!queue->IsEmpty()) { |
| 960 Tile* tile = queue->Top(); | 971 Tile* tile = queue->Top(); |
| 961 const TilePriority& pending_priority = tile->priority(PENDING_TREE); | 972 const TilePriority& pending_priority = tile->priority(PENDING_TREE); |
| 962 EXPECT_NE(std::numeric_limits<float>::infinity(), | 973 EXPECT_NE(std::numeric_limits<float>::infinity(), |
| 963 pending_priority.distance_to_visible); | 974 pending_priority.distance_to_visible); |
| 964 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) | 975 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) |
| 965 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); | 976 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); |
| 966 else | 977 else |
| 967 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); | 978 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); |
| 968 new_content_tiles.insert(tile); | 979 new_content_tiles.insert(tile); |
| 969 ++tile_count; | 980 ++tile_count; |
| 970 queue->Pop(); | 981 queue->Pop(); |
| 971 } | 982 } |
| 972 EXPECT_EQ(tile_count, new_content_tiles.size()); | 983 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 973 EXPECT_EQ(all_tiles, new_content_tiles); | 984 EXPECT_EQ(all_tiles, new_content_tiles); |
| 974 } | 985 } |
| 975 | 986 |
| 976 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { | 987 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { |
| 977 const gfx::Size layer_bounds(1000, 1000); | 988 const gfx::Size layer_bounds(1000, 1000); |
| 978 host_impl_.SetViewportSize(layer_bounds); | 989 host_impl_.SetViewportSize(layer_bounds); |
| 979 SetupDefaultTrees(layer_bounds); | 990 SetupDefaultTrees(layer_bounds); |
| 980 | 991 |
| 981 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( | 992 scoped_ptr<RasterTilePriorityQueue> queue(BuildRasterQueue( |
| 982 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 993 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 983 EXPECT_FALSE(queue->IsEmpty()); | 994 EXPECT_FALSE(queue->IsEmpty()); |
| 984 | 995 |
| 985 size_t tile_count = 0; | 996 size_t tile_count = 0; |
| 986 std::set<Tile*> all_tiles; | 997 std::set<Tile*> all_tiles; |
| 987 while (!queue->IsEmpty()) { | 998 while (!queue->IsEmpty()) { |
| 988 EXPECT_TRUE(queue->Top()); | 999 EXPECT_TRUE(queue->Top()); |
| 989 all_tiles.insert(queue->Top()); | 1000 all_tiles.insert(queue->Top()); |
| 990 ++tile_count; | 1001 ++tile_count; |
| 991 queue->Pop(); | 1002 queue->Pop(); |
| 992 } | 1003 } |
| 993 | 1004 |
| 994 EXPECT_EQ(tile_count, all_tiles.size()); | 1005 EXPECT_EQ(tile_count, all_tiles.size()); |
| 995 EXPECT_EQ(16u, tile_count); | 1006 EXPECT_EQ(16u, tile_count); |
| 996 | 1007 |
| 997 for (int i = 1; i < 10; ++i) { | 1008 for (int i = 1; i < 10; ++i) { |
| 998 scoped_ptr<FakePictureLayerImpl> pending_layer = | 1009 scoped_ptr<FakePictureLayerImpl> pending_layer = |
| 999 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); | 1010 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); |
| 1000 pending_layer->SetDrawsContent(true); | 1011 pending_layer->SetDrawsContent(true); |
| 1001 pending_layer->set_has_valid_tile_priorities(true); | 1012 pending_layer->set_has_valid_tile_priorities(true); |
| 1002 pending_layer_->AddChild(pending_layer.Pass()); | 1013 pending_layer_->AddChild(pending_layer.Pass()); |
| 1003 } | 1014 } |
| 1004 | 1015 |
| 1005 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, | 1016 queue = BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, |
| 1006 RasterTilePriorityQueue::Type::ALL); | 1017 RasterTilePriorityQueue::Type::ALL); |
| 1007 EXPECT_FALSE(queue->IsEmpty()); | 1018 EXPECT_FALSE(queue->IsEmpty()); |
| 1008 | 1019 |
| 1009 tile_count = 0; | 1020 tile_count = 0; |
| 1010 all_tiles.clear(); | 1021 all_tiles.clear(); |
| 1011 while (!queue->IsEmpty()) { | 1022 while (!queue->IsEmpty()) { |
| 1012 EXPECT_TRUE(queue->Top()); | 1023 EXPECT_TRUE(queue->Top()); |
| 1013 all_tiles.insert(queue->Top()); | 1024 all_tiles.insert(queue->Top()); |
| 1014 ++tile_count; | 1025 ++tile_count; |
| 1015 queue->Pop(); | 1026 queue->Pop(); |
| 1016 } | 1027 } |
| 1017 EXPECT_EQ(tile_count, all_tiles.size()); | 1028 EXPECT_EQ(tile_count, all_tiles.size()); |
| 1018 EXPECT_EQ(16u, tile_count); | 1029 EXPECT_EQ(16u, tile_count); |
| 1019 } | 1030 } |
| 1020 | 1031 |
| 1021 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { | 1032 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { |
| 1022 const gfx::Size layer_bounds(1000, 1000); | 1033 const gfx::Size layer_bounds(1000, 1000); |
| 1023 host_impl_.SetViewportSize(layer_bounds); | 1034 host_impl_.SetViewportSize(layer_bounds); |
| 1024 SetupDefaultTrees(layer_bounds); | 1035 SetupDefaultTrees(layer_bounds); |
| 1025 | 1036 |
| 1026 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( | 1037 scoped_ptr<RasterTilePriorityQueue> raster_queue(BuildRasterQueue( |
| 1027 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 1038 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 1028 EXPECT_FALSE(raster_queue->IsEmpty()); | 1039 EXPECT_FALSE(raster_queue->IsEmpty()); |
| 1029 | 1040 |
| 1030 size_t tile_count = 0; | 1041 size_t tile_count = 0; |
| 1031 std::set<Tile*> all_tiles; | 1042 std::set<Tile*> all_tiles; |
| 1032 while (!raster_queue->IsEmpty()) { | 1043 while (!raster_queue->IsEmpty()) { |
| 1033 EXPECT_TRUE(raster_queue->Top()); | 1044 EXPECT_TRUE(raster_queue->Top()); |
| 1034 all_tiles.insert(raster_queue->Top()); | 1045 all_tiles.insert(raster_queue->Top()); |
| 1035 ++tile_count; | 1046 ++tile_count; |
| 1036 raster_queue->Pop(); | 1047 raster_queue->Pop(); |
| 1037 } | 1048 } |
| 1038 EXPECT_EQ(tile_count, all_tiles.size()); | 1049 EXPECT_EQ(tile_count, all_tiles.size()); |
| 1039 EXPECT_EQ(16u, tile_count); | 1050 EXPECT_EQ(16u, tile_count); |
| 1040 | 1051 |
| 1041 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); | 1052 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); |
| 1042 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); | 1053 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); |
| 1043 | 1054 |
| 1044 for (int i = 1; i < 10; ++i) { | 1055 for (int i = 1; i < 10; ++i) { |
| 1045 scoped_ptr<FakePictureLayerImpl> pending_layer = | 1056 scoped_ptr<FakePictureLayerImpl> pending_layer = |
| 1046 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); | 1057 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); |
| 1047 pending_layer->SetDrawsContent(true); | 1058 pending_layer->SetDrawsContent(true); |
| 1048 pending_layer->set_has_valid_tile_priorities(true); | 1059 pending_layer->set_has_valid_tile_priorities(true); |
| 1049 pending_layer_->AddChild(pending_layer.Pass()); | 1060 pending_layer_->AddChild(pending_layer.Pass()); |
| 1050 } | 1061 } |
| 1051 | 1062 |
| 1052 scoped_ptr<EvictionTilePriorityQueue> queue( | 1063 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 1053 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); | 1064 BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); |
| 1054 EXPECT_FALSE(queue->IsEmpty()); | 1065 EXPECT_FALSE(queue->IsEmpty()); |
| 1055 | 1066 |
| 1056 tile_count = 0; | 1067 tile_count = 0; |
| 1057 all_tiles.clear(); | 1068 all_tiles.clear(); |
| 1058 while (!queue->IsEmpty()) { | 1069 while (!queue->IsEmpty()) { |
| 1059 EXPECT_TRUE(queue->Top()); | 1070 EXPECT_TRUE(queue->Top()); |
| 1060 all_tiles.insert(queue->Top()); | 1071 all_tiles.insert(queue->Top()); |
| 1061 ++tile_count; | 1072 ++tile_count; |
| 1062 queue->Pop(); | 1073 queue->Pop(); |
| 1063 } | 1074 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1247 EXPECT_GT(eventually_bin_order_correct_count, | 1258 EXPECT_GT(eventually_bin_order_correct_count, |
| 1248 eventually_bin_order_incorrect_count); | 1259 eventually_bin_order_incorrect_count); |
| 1249 | 1260 |
| 1250 EXPECT_TRUE(have_tiles[TilePriority::NOW]); | 1261 EXPECT_TRUE(have_tiles[TilePriority::NOW]); |
| 1251 EXPECT_TRUE(have_tiles[TilePriority::SOON]); | 1262 EXPECT_TRUE(have_tiles[TilePriority::SOON]); |
| 1252 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); | 1263 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); |
| 1253 } | 1264 } |
| 1254 | 1265 |
| 1255 } // namespace | 1266 } // namespace |
| 1256 } // namespace cc | 1267 } // namespace cc |
| OLD | NEW |