| 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 21 matching lines...) Expand all Loading... |
| 698 | 709 |
| 699 // Ensure that the distance is decreasing many more times than increasing. | 710 // Ensure that the distance is decreasing many more times than increasing. |
| 700 EXPECT_EQ(3, distance_increasing); | 711 EXPECT_EQ(3, distance_increasing); |
| 701 EXPECT_EQ(17, distance_decreasing); | 712 EXPECT_EQ(17, distance_decreasing); |
| 702 EXPECT_EQ(tile_count, smoothness_tiles.size()); | 713 EXPECT_EQ(tile_count, smoothness_tiles.size()); |
| 703 EXPECT_EQ(all_tiles, smoothness_tiles); | 714 EXPECT_EQ(all_tiles, smoothness_tiles); |
| 704 | 715 |
| 705 std::set<Tile*> new_content_tiles; | 716 std::set<Tile*> new_content_tiles; |
| 706 last_tile = NULL; | 717 last_tile = NULL; |
| 707 // Here we expect to get increasing PENDING_TREE priority_bin. | 718 // Here we expect to get increasing PENDING_TREE priority_bin. |
| 708 queue = host_impl_.BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY); | 719 queue = BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY); |
| 709 distance_decreasing = 0; | 720 distance_decreasing = 0; |
| 710 distance_increasing = 0; | 721 distance_increasing = 0; |
| 711 while (!queue->IsEmpty()) { | 722 while (!queue->IsEmpty()) { |
| 712 Tile* tile = queue->Top(); | 723 Tile* tile = queue->Top(); |
| 713 EXPECT_TRUE(tile); | 724 EXPECT_TRUE(tile); |
| 714 | 725 |
| 715 if (!last_tile) | 726 if (!last_tile) |
| 716 last_tile = tile; | 727 last_tile = tile; |
| 717 | 728 |
| 718 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin, | 729 EXPECT_GE(last_tile->priority(PENDING_TREE).priority_bin, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); | 779 static_cast<FakePictureLayerImpl*>(pending_layer_->children()[0]); |
| 769 pending_child_layer->SetDrawsContent(true); | 780 pending_child_layer->SetDrawsContent(true); |
| 770 | 781 |
| 771 time_ticks += base::TimeDelta::FromMilliseconds(1); | 782 time_ticks += base::TimeDelta::FromMilliseconds(1); |
| 772 host_impl_.SetCurrentBeginFrameArgs( | 783 host_impl_.SetCurrentBeginFrameArgs( |
| 773 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); | 784 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, time_ticks)); |
| 774 host_impl_.pending_tree()->UpdateDrawProperties(); | 785 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 775 | 786 |
| 776 std::set<Tile*> all_tiles; | 787 std::set<Tile*> all_tiles; |
| 777 size_t tile_count = 0; | 788 size_t tile_count = 0; |
| 778 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( | 789 scoped_ptr<RasterTilePriorityQueue> raster_queue(BuildRasterQueue( |
| 779 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 790 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 780 while (!raster_queue->IsEmpty()) { | 791 while (!raster_queue->IsEmpty()) { |
| 781 ++tile_count; | 792 ++tile_count; |
| 782 EXPECT_TRUE(raster_queue->Top()); | 793 EXPECT_TRUE(raster_queue->Top()); |
| 783 all_tiles.insert(raster_queue->Top()); | 794 all_tiles.insert(raster_queue->Top()); |
| 784 raster_queue->Pop(); | 795 raster_queue->Pop(); |
| 785 } | 796 } |
| 786 EXPECT_EQ(tile_count, all_tiles.size()); | 797 EXPECT_EQ(tile_count, all_tiles.size()); |
| 787 EXPECT_EQ(32u, tile_count); | 798 EXPECT_EQ(32u, tile_count); |
| 788 | 799 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 pending_child_low_res_tiles.end()); | 835 pending_child_low_res_tiles.end()); |
| 825 | 836 |
| 826 tile_manager()->InitializeTilesWithResourcesForTesting( | 837 tile_manager()->InitializeTilesWithResourcesForTesting( |
| 827 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); | 838 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); |
| 828 | 839 |
| 829 // Verify occlusion is considered by EvictionTilePriorityQueue. | 840 // Verify occlusion is considered by EvictionTilePriorityQueue. |
| 830 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; | 841 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; |
| 831 size_t occluded_count = 0u; | 842 size_t occluded_count = 0u; |
| 832 Tile* last_tile = NULL; | 843 Tile* last_tile = NULL; |
| 833 scoped_ptr<EvictionTilePriorityQueue> queue( | 844 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 834 host_impl_.BuildEvictionQueue(tree_priority)); | 845 BuildEvictionQueue(tree_priority)); |
| 835 while (!queue->IsEmpty()) { | 846 while (!queue->IsEmpty()) { |
| 836 Tile* tile = queue->Top(); | 847 Tile* tile = queue->Top(); |
| 837 if (!last_tile) | 848 if (!last_tile) |
| 838 last_tile = tile; | 849 last_tile = tile; |
| 839 | 850 |
| 840 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority); | 851 bool tile_is_occluded = tile->is_occluded_for_tree_priority(tree_priority); |
| 841 | 852 |
| 842 // The only way we will encounter an occluded tile after an unoccluded | 853 // The only way we will encounter an occluded tile after an unoccluded |
| 843 // tile is if the priorty bin decreased, the tile is required for | 854 // tile is if the priorty bin decreased, the tile is required for |
| 844 // activation, or the scale changed. | 855 // activation, or the scale changed. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 950 EXPECT_TRUE(pending_layer_->HasValidTilePriorities()); | 961 EXPECT_TRUE(pending_layer_->HasValidTilePriorities()); |
| 951 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities()); | 962 EXPECT_FALSE(pending_child_layer->HasValidTilePriorities()); |
| 952 | 963 |
| 953 // Verify that eviction queue returns tiles also from layers without valid | 964 // Verify that eviction queue returns tiles also from layers without valid |
| 954 // tile priorities and that the tile priority bin of those tiles is (at most) | 965 // tile priorities and that the tile priority bin of those tiles is (at most) |
| 955 // EVENTUALLY. | 966 // EVENTUALLY. |
| 956 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; | 967 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; |
| 957 std::set<Tile*> new_content_tiles; | 968 std::set<Tile*> new_content_tiles; |
| 958 size_t tile_count = 0; | 969 size_t tile_count = 0; |
| 959 scoped_ptr<EvictionTilePriorityQueue> queue( | 970 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 960 host_impl_.BuildEvictionQueue(tree_priority)); | 971 BuildEvictionQueue(tree_priority)); |
| 961 while (!queue->IsEmpty()) { | 972 while (!queue->IsEmpty()) { |
| 962 Tile* tile = queue->Top(); | 973 Tile* tile = queue->Top(); |
| 963 const TilePriority& pending_priority = tile->priority(PENDING_TREE); | 974 const TilePriority& pending_priority = tile->priority(PENDING_TREE); |
| 964 EXPECT_NE(std::numeric_limits<float>::infinity(), | 975 EXPECT_NE(std::numeric_limits<float>::infinity(), |
| 965 pending_priority.distance_to_visible); | 976 pending_priority.distance_to_visible); |
| 966 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) | 977 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) |
| 967 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); | 978 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); |
| 968 else | 979 else |
| 969 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); | 980 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); |
| 970 new_content_tiles.insert(tile); | 981 new_content_tiles.insert(tile); |
| 971 ++tile_count; | 982 ++tile_count; |
| 972 queue->Pop(); | 983 queue->Pop(); |
| 973 } | 984 } |
| 974 EXPECT_EQ(tile_count, new_content_tiles.size()); | 985 EXPECT_EQ(tile_count, new_content_tiles.size()); |
| 975 EXPECT_EQ(all_tiles, new_content_tiles); | 986 EXPECT_EQ(all_tiles, new_content_tiles); |
| 976 } | 987 } |
| 977 | 988 |
| 978 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { | 989 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { |
| 979 const gfx::Size layer_bounds(1000, 1000); | 990 const gfx::Size layer_bounds(1000, 1000); |
| 980 host_impl_.SetViewportSize(layer_bounds); | 991 host_impl_.SetViewportSize(layer_bounds); |
| 981 SetupDefaultTrees(layer_bounds); | 992 SetupDefaultTrees(layer_bounds); |
| 982 | 993 |
| 983 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( | 994 scoped_ptr<RasterTilePriorityQueue> queue(BuildRasterQueue( |
| 984 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 995 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 985 EXPECT_FALSE(queue->IsEmpty()); | 996 EXPECT_FALSE(queue->IsEmpty()); |
| 986 | 997 |
| 987 size_t tile_count = 0; | 998 size_t tile_count = 0; |
| 988 std::set<Tile*> all_tiles; | 999 std::set<Tile*> all_tiles; |
| 989 while (!queue->IsEmpty()) { | 1000 while (!queue->IsEmpty()) { |
| 990 EXPECT_TRUE(queue->Top()); | 1001 EXPECT_TRUE(queue->Top()); |
| 991 all_tiles.insert(queue->Top()); | 1002 all_tiles.insert(queue->Top()); |
| 992 ++tile_count; | 1003 ++tile_count; |
| 993 queue->Pop(); | 1004 queue->Pop(); |
| 994 } | 1005 } |
| 995 | 1006 |
| 996 EXPECT_EQ(tile_count, all_tiles.size()); | 1007 EXPECT_EQ(tile_count, all_tiles.size()); |
| 997 EXPECT_EQ(16u, tile_count); | 1008 EXPECT_EQ(16u, tile_count); |
| 998 | 1009 |
| 999 for (int i = 1; i < 10; ++i) { | 1010 for (int i = 1; i < 10; ++i) { |
| 1000 scoped_ptr<FakePictureLayerImpl> pending_layer = | 1011 scoped_ptr<FakePictureLayerImpl> pending_layer = |
| 1001 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); | 1012 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); |
| 1002 pending_layer->SetDrawsContent(true); | 1013 pending_layer->SetDrawsContent(true); |
| 1003 pending_layer->set_has_valid_tile_priorities(true); | 1014 pending_layer->set_has_valid_tile_priorities(true); |
| 1004 pending_layer_->AddChild(pending_layer.Pass()); | 1015 pending_layer_->AddChild(pending_layer.Pass()); |
| 1005 } | 1016 } |
| 1006 | 1017 |
| 1007 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, | 1018 queue = BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, |
| 1008 RasterTilePriorityQueue::Type::ALL); | 1019 RasterTilePriorityQueue::Type::ALL); |
| 1009 EXPECT_FALSE(queue->IsEmpty()); | 1020 EXPECT_FALSE(queue->IsEmpty()); |
| 1010 | 1021 |
| 1011 tile_count = 0; | 1022 tile_count = 0; |
| 1012 all_tiles.clear(); | 1023 all_tiles.clear(); |
| 1013 while (!queue->IsEmpty()) { | 1024 while (!queue->IsEmpty()) { |
| 1014 EXPECT_TRUE(queue->Top()); | 1025 EXPECT_TRUE(queue->Top()); |
| 1015 all_tiles.insert(queue->Top()); | 1026 all_tiles.insert(queue->Top()); |
| 1016 ++tile_count; | 1027 ++tile_count; |
| 1017 queue->Pop(); | 1028 queue->Pop(); |
| 1018 } | 1029 } |
| 1019 EXPECT_EQ(tile_count, all_tiles.size()); | 1030 EXPECT_EQ(tile_count, all_tiles.size()); |
| 1020 EXPECT_EQ(16u, tile_count); | 1031 EXPECT_EQ(16u, tile_count); |
| 1021 } | 1032 } |
| 1022 | 1033 |
| 1023 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { | 1034 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { |
| 1024 const gfx::Size layer_bounds(1000, 1000); | 1035 const gfx::Size layer_bounds(1000, 1000); |
| 1025 host_impl_.SetViewportSize(layer_bounds); | 1036 host_impl_.SetViewportSize(layer_bounds); |
| 1026 SetupDefaultTrees(layer_bounds); | 1037 SetupDefaultTrees(layer_bounds); |
| 1027 | 1038 |
| 1028 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( | 1039 scoped_ptr<RasterTilePriorityQueue> raster_queue(BuildRasterQueue( |
| 1029 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); | 1040 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); |
| 1030 EXPECT_FALSE(raster_queue->IsEmpty()); | 1041 EXPECT_FALSE(raster_queue->IsEmpty()); |
| 1031 | 1042 |
| 1032 size_t tile_count = 0; | 1043 size_t tile_count = 0; |
| 1033 std::set<Tile*> all_tiles; | 1044 std::set<Tile*> all_tiles; |
| 1034 while (!raster_queue->IsEmpty()) { | 1045 while (!raster_queue->IsEmpty()) { |
| 1035 EXPECT_TRUE(raster_queue->Top()); | 1046 EXPECT_TRUE(raster_queue->Top()); |
| 1036 all_tiles.insert(raster_queue->Top()); | 1047 all_tiles.insert(raster_queue->Top()); |
| 1037 ++tile_count; | 1048 ++tile_count; |
| 1038 raster_queue->Pop(); | 1049 raster_queue->Pop(); |
| 1039 } | 1050 } |
| 1040 EXPECT_EQ(tile_count, all_tiles.size()); | 1051 EXPECT_EQ(tile_count, all_tiles.size()); |
| 1041 EXPECT_EQ(16u, tile_count); | 1052 EXPECT_EQ(16u, tile_count); |
| 1042 | 1053 |
| 1043 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); | 1054 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); |
| 1044 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); | 1055 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); |
| 1045 | 1056 |
| 1046 for (int i = 1; i < 10; ++i) { | 1057 for (int i = 1; i < 10; ++i) { |
| 1047 scoped_ptr<FakePictureLayerImpl> pending_layer = | 1058 scoped_ptr<FakePictureLayerImpl> pending_layer = |
| 1048 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); | 1059 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); |
| 1049 pending_layer->SetDrawsContent(true); | 1060 pending_layer->SetDrawsContent(true); |
| 1050 pending_layer->set_has_valid_tile_priorities(true); | 1061 pending_layer->set_has_valid_tile_priorities(true); |
| 1051 pending_layer_->AddChild(pending_layer.Pass()); | 1062 pending_layer_->AddChild(pending_layer.Pass()); |
| 1052 } | 1063 } |
| 1053 | 1064 |
| 1054 scoped_ptr<EvictionTilePriorityQueue> queue( | 1065 scoped_ptr<EvictionTilePriorityQueue> queue( |
| 1055 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); | 1066 BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); |
| 1056 EXPECT_FALSE(queue->IsEmpty()); | 1067 EXPECT_FALSE(queue->IsEmpty()); |
| 1057 | 1068 |
| 1058 tile_count = 0; | 1069 tile_count = 0; |
| 1059 all_tiles.clear(); | 1070 all_tiles.clear(); |
| 1060 while (!queue->IsEmpty()) { | 1071 while (!queue->IsEmpty()) { |
| 1061 EXPECT_TRUE(queue->Top()); | 1072 EXPECT_TRUE(queue->Top()); |
| 1062 all_tiles.insert(queue->Top()); | 1073 all_tiles.insert(queue->Top()); |
| 1063 ++tile_count; | 1074 ++tile_count; |
| 1064 queue->Pop(); | 1075 queue->Pop(); |
| 1065 } | 1076 } |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 EXPECT_GT(eventually_bin_order_correct_count, | 1263 EXPECT_GT(eventually_bin_order_correct_count, |
| 1253 eventually_bin_order_incorrect_count); | 1264 eventually_bin_order_incorrect_count); |
| 1254 | 1265 |
| 1255 EXPECT_TRUE(have_tiles[TilePriority::NOW]); | 1266 EXPECT_TRUE(have_tiles[TilePriority::NOW]); |
| 1256 EXPECT_TRUE(have_tiles[TilePriority::SOON]); | 1267 EXPECT_TRUE(have_tiles[TilePriority::SOON]); |
| 1257 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); | 1268 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); |
| 1258 } | 1269 } |
| 1259 | 1270 |
| 1260 } // namespace | 1271 } // namespace |
| 1261 } // namespace cc | 1272 } // namespace cc |
| OLD | NEW |