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 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |