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

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

Issue 1130123003: cc: Separate the priority from the tile and put in new PrioritizedTile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_eviction_queue.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/thread_task_runner_handle.h" 5 #include "base/thread_task_runner_handle.h"
6 #include "cc/resources/eviction_tile_priority_queue.h" 6 #include "cc/resources/eviction_tile_priority_queue.h"
7 #include "cc/resources/raster_tile_priority_queue.h" 7 #include "cc/resources/raster_tile_priority_queue.h"
8 #include "cc/resources/resource_pool.h" 8 #include "cc/resources/resource_pool.h"
9 #include "cc/resources/tile.h" 9 #include "cc/resources/tile.h"
10 #include "cc/resources/tile_priority.h" 10 #include "cc/resources/tile_priority.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 host_impl_.SetViewportSize(layer_bounds); 159 host_impl_.SetViewportSize(layer_bounds);
160 SetupDefaultTrees(layer_bounds); 160 SetupDefaultTrees(layer_bounds);
161 161
162 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 162 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
163 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 163 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
164 EXPECT_FALSE(queue->IsEmpty()); 164 EXPECT_FALSE(queue->IsEmpty());
165 165
166 size_t tile_count = 0; 166 size_t tile_count = 0;
167 std::set<Tile*> all_tiles; 167 std::set<Tile*> all_tiles;
168 while (!queue->IsEmpty()) { 168 while (!queue->IsEmpty()) {
169 EXPECT_TRUE(queue->Top()); 169 EXPECT_TRUE(queue->Top().tile());
170 all_tiles.insert(queue->Top()); 170 all_tiles.insert(queue->Top().tile());
171 ++tile_count; 171 ++tile_count;
172 queue->Pop(); 172 queue->Pop();
173 } 173 }
174 174
175 EXPECT_EQ(tile_count, all_tiles.size()); 175 EXPECT_EQ(tile_count, all_tiles.size());
176 EXPECT_EQ(16u, tile_count); 176 EXPECT_EQ(16u, tile_count);
177 177
178 // Sanity check, all tiles should be visible. 178 // Sanity check, all tiles should be visible.
179 std::set<Tile*> smoothness_tiles; 179 std::set<Tile*> smoothness_tiles;
180 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, 180 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
181 RasterTilePriorityQueue::Type::ALL); 181 RasterTilePriorityQueue::Type::ALL);
182 bool had_low_res = false; 182 bool had_low_res = false;
183 while (!queue->IsEmpty()) { 183 while (!queue->IsEmpty()) {
184 Tile* tile = queue->Top(); 184 PrioritizedTile prioritized_tile = queue->Top();
185 EXPECT_TRUE(tile); 185 EXPECT_TRUE(prioritized_tile.tile());
186 EXPECT_EQ(TilePriority::NOW, tile->priority().priority_bin); 186 EXPECT_EQ(TilePriority::NOW, prioritized_tile.priority().priority_bin);
187 if (tile->priority().resolution == LOW_RESOLUTION) 187 if (prioritized_tile.priority().resolution == LOW_RESOLUTION)
188 had_low_res = true; 188 had_low_res = true;
189 else 189 else
190 smoothness_tiles.insert(tile); 190 smoothness_tiles.insert(prioritized_tile.tile());
191 queue->Pop(); 191 queue->Pop();
192 } 192 }
193 EXPECT_EQ(all_tiles, smoothness_tiles); 193 EXPECT_EQ(all_tiles, smoothness_tiles);
194 EXPECT_TRUE(had_low_res); 194 EXPECT_TRUE(had_low_res);
195 195
196 // Check that everything is required for activation. 196 // Check that everything is required for activation.
197 queue = host_impl_.BuildRasterQueue( 197 queue = host_impl_.BuildRasterQueue(
198 SMOOTHNESS_TAKES_PRIORITY, 198 SMOOTHNESS_TAKES_PRIORITY,
199 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 199 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
200 std::set<Tile*> required_for_activation_tiles; 200 std::set<Tile*> required_for_activation_tiles;
201 while (!queue->IsEmpty()) { 201 while (!queue->IsEmpty()) {
202 Tile* tile = queue->Top(); 202 PrioritizedTile prioritized_tile = queue->Top();
203 EXPECT_TRUE(tile->required_for_activation()); 203 EXPECT_TRUE(prioritized_tile.tile()->required_for_activation());
204 required_for_activation_tiles.insert(tile); 204 required_for_activation_tiles.insert(prioritized_tile.tile());
205 queue->Pop(); 205 queue->Pop();
206 } 206 }
207 EXPECT_EQ(all_tiles, required_for_activation_tiles); 207 EXPECT_EQ(all_tiles, required_for_activation_tiles);
208 208
209 // Check that everything is required for draw. 209 // Check that everything is required for draw.
210 queue = host_impl_.BuildRasterQueue( 210 queue = host_impl_.BuildRasterQueue(
211 SMOOTHNESS_TAKES_PRIORITY, 211 SMOOTHNESS_TAKES_PRIORITY,
212 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 212 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
213 std::set<Tile*> required_for_draw_tiles; 213 std::set<Tile*> required_for_draw_tiles;
214 while (!queue->IsEmpty()) { 214 while (!queue->IsEmpty()) {
215 Tile* tile = queue->Top(); 215 PrioritizedTile prioritized_tile = queue->Top();
216 EXPECT_TRUE(tile->required_for_draw()); 216 EXPECT_TRUE(prioritized_tile.tile()->required_for_draw());
217 required_for_draw_tiles.insert(tile); 217 required_for_draw_tiles.insert(prioritized_tile.tile());
218 queue->Pop(); 218 queue->Pop();
219 } 219 }
220 EXPECT_EQ(all_tiles, required_for_draw_tiles); 220 EXPECT_EQ(all_tiles, required_for_draw_tiles);
221 221
222 Region invalidation(gfx::Rect(0, 0, 500, 500)); 222 Region invalidation(gfx::Rect(0, 0, 500, 500));
223 223
224 // Invalidate the pending tree. 224 // Invalidate the pending tree.
225 pending_layer_->set_invalidation(invalidation); 225 pending_layer_->set_invalidation(invalidation);
226 pending_layer_->HighResTiling()->Invalidate(invalidation); 226 pending_layer_->HighResTiling()->Invalidate(invalidation);
227 pending_layer_->LowResTiling()->Invalidate(invalidation); 227 pending_layer_->LowResTiling()->Invalidate(invalidation);
228 228
229 active_layer_->ResetAllTilesPriorities();
230 pending_layer_->ResetAllTilesPriorities();
231
232 // Renew all of the tile priorities. 229 // Renew all of the tile priorities.
233 gfx::Rect viewport(50, 50, 100, 100); 230 gfx::Rect viewport(50, 50, 100, 100);
234 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 231 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
235 Occlusion()); 232 Occlusion());
236 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 233 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
237 Occlusion()); 234 Occlusion());
238 active_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 235 active_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
239 Occlusion()); 236 Occlusion());
240 active_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 237 active_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
241 Occlusion()); 238 Occlusion());
(...skipping 18 matching lines...) Expand all
260 for (size_t i = 0; i < active_high_res_tiles.size(); ++i) { 257 for (size_t i = 0; i < active_high_res_tiles.size(); ++i) {
261 all_tiles.insert(active_high_res_tiles[i]); 258 all_tiles.insert(active_high_res_tiles[i]);
262 high_res_tiles.insert(active_high_res_tiles[i]); 259 high_res_tiles.insert(active_high_res_tiles[i]);
263 } 260 }
264 261
265 std::vector<Tile*> active_low_res_tiles = 262 std::vector<Tile*> active_low_res_tiles =
266 active_layer_->LowResTiling()->AllTilesForTesting(); 263 active_layer_->LowResTiling()->AllTilesForTesting();
267 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 264 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
268 all_tiles.insert(active_low_res_tiles[i]); 265 all_tiles.insert(active_low_res_tiles[i]);
269 266
270 Tile* last_tile = NULL; 267 PrioritizedTile last_tile;
271 smoothness_tiles.clear(); 268 smoothness_tiles.clear();
272 tile_count = 0; 269 tile_count = 0;
273 size_t correct_order_tiles = 0u; 270 size_t correct_order_tiles = 0u;
274 // Here we expect to get increasing ACTIVE_TREE priority_bin. 271 // Here we expect to get increasing ACTIVE_TREE priority_bin.
275 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY, 272 queue = host_impl_.BuildRasterQueue(SMOOTHNESS_TAKES_PRIORITY,
276 RasterTilePriorityQueue::Type::ALL); 273 RasterTilePriorityQueue::Type::ALL);
277 std::set<Tile*> expected_required_for_draw_tiles; 274 std::set<Tile*> expected_required_for_draw_tiles;
278 std::set<Tile*> expected_required_for_activation_tiles; 275 std::set<Tile*> expected_required_for_activation_tiles;
279 while (!queue->IsEmpty()) { 276 while (!queue->IsEmpty()) {
280 Tile* tile = queue->Top(); 277 PrioritizedTile prioritized_tile = queue->Top();
281 EXPECT_TRUE(tile); 278 EXPECT_TRUE(prioritized_tile.tile());
282 279
283 if (!last_tile) 280 if (!last_tile.tile())
284 last_tile = tile; 281 last_tile = prioritized_tile;
285 282
286 EXPECT_LE(last_tile->priority().priority_bin, 283 EXPECT_LE(last_tile.priority().priority_bin,
287 tile->priority().priority_bin); 284 prioritized_tile.priority().priority_bin);
288 bool skip_updating_last_tile = false; 285 bool skip_updating_last_tile = false;
289 if (last_tile->priority().priority_bin == tile->priority().priority_bin) { 286 if (last_tile.priority().priority_bin ==
290 correct_order_tiles += last_tile->priority().distance_to_visible <= 287 prioritized_tile.priority().priority_bin) {
291 tile->priority().distance_to_visible; 288 correct_order_tiles += last_tile.priority().distance_to_visible <=
292 } else if (tile->priority().priority_bin == TilePriority::NOW) { 289 prioritized_tile.priority().distance_to_visible;
290 } else if (prioritized_tile.priority().priority_bin == TilePriority::NOW) {
293 // Since we'd return pending tree now tiles before the eventually tiles on 291 // Since we'd return pending tree now tiles before the eventually tiles on
294 // the active tree, update the value. 292 // the active tree, update the value.
295 ++correct_order_tiles; 293 ++correct_order_tiles;
296 skip_updating_last_tile = true; 294 skip_updating_last_tile = true;
297 } 295 }
298 296
299 if (tile->priority().priority_bin == TilePriority::NOW && 297 if (prioritized_tile.priority().priority_bin == TilePriority::NOW &&
300 last_tile->priority().resolution != tile->priority().resolution) { 298 last_tile.priority().resolution !=
299 prioritized_tile.priority().resolution) {
301 // Low resolution should come first. 300 // Low resolution should come first.
302 EXPECT_EQ(LOW_RESOLUTION, last_tile->priority().resolution); 301 EXPECT_EQ(LOW_RESOLUTION, last_tile.priority().resolution);
303 } 302 }
304 303
305 if (!skip_updating_last_tile) 304 if (!skip_updating_last_tile)
306 last_tile = tile; 305 last_tile = prioritized_tile;
307 ++tile_count; 306 ++tile_count;
308 smoothness_tiles.insert(tile); 307 smoothness_tiles.insert(prioritized_tile.tile());
309 if (tile->required_for_draw()) 308 if (prioritized_tile.tile()->required_for_draw())
310 expected_required_for_draw_tiles.insert(tile); 309 expected_required_for_draw_tiles.insert(prioritized_tile.tile());
311 if (tile->required_for_activation()) 310 if (prioritized_tile.tile()->required_for_activation())
312 expected_required_for_activation_tiles.insert(tile); 311 expected_required_for_activation_tiles.insert(prioritized_tile.tile());
313 queue->Pop(); 312 queue->Pop();
314 } 313 }
315 314
316 EXPECT_EQ(tile_count, smoothness_tiles.size()); 315 EXPECT_EQ(tile_count, smoothness_tiles.size());
317 EXPECT_EQ(all_tiles, smoothness_tiles); 316 EXPECT_EQ(all_tiles, smoothness_tiles);
318 // Since we don't guarantee increasing distance due to spiral iterator, we 317 // Since we don't guarantee increasing distance due to spiral iterator, we
319 // should check that we're _mostly_ right. 318 // should check that we're _mostly_ right.
320 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4); 319 EXPECT_GT(correct_order_tiles, 3 * tile_count / 4);
321 320
322 // Check that we have consistent required_for_activation tiles. 321 // Check that we have consistent required_for_activation tiles.
323 queue = host_impl_.BuildRasterQueue( 322 queue = host_impl_.BuildRasterQueue(
324 SMOOTHNESS_TAKES_PRIORITY, 323 SMOOTHNESS_TAKES_PRIORITY,
325 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 324 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
326 required_for_activation_tiles.clear(); 325 required_for_activation_tiles.clear();
327 while (!queue->IsEmpty()) { 326 while (!queue->IsEmpty()) {
328 Tile* tile = queue->Top(); 327 PrioritizedTile prioritized_tile = queue->Top();
329 EXPECT_TRUE(tile->required_for_activation()); 328 EXPECT_TRUE(prioritized_tile.tile()->required_for_activation());
330 required_for_activation_tiles.insert(tile); 329 required_for_activation_tiles.insert(prioritized_tile.tile());
331 queue->Pop(); 330 queue->Pop();
332 } 331 }
333 EXPECT_EQ(expected_required_for_activation_tiles, 332 EXPECT_EQ(expected_required_for_activation_tiles,
334 required_for_activation_tiles); 333 required_for_activation_tiles);
335 EXPECT_NE(all_tiles, required_for_activation_tiles); 334 EXPECT_NE(all_tiles, required_for_activation_tiles);
336 335
337 // Check that we have consistent required_for_draw tiles. 336 // Check that we have consistent required_for_draw tiles.
338 queue = host_impl_.BuildRasterQueue( 337 queue = host_impl_.BuildRasterQueue(
339 SMOOTHNESS_TAKES_PRIORITY, 338 SMOOTHNESS_TAKES_PRIORITY,
340 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 339 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
341 required_for_draw_tiles.clear(); 340 required_for_draw_tiles.clear();
342 while (!queue->IsEmpty()) { 341 while (!queue->IsEmpty()) {
343 Tile* tile = queue->Top(); 342 PrioritizedTile prioritized_tile = queue->Top();
344 EXPECT_TRUE(tile->required_for_draw()); 343 EXPECT_TRUE(prioritized_tile.tile()->required_for_draw());
345 required_for_draw_tiles.insert(tile); 344 required_for_draw_tiles.insert(prioritized_tile.tile());
346 queue->Pop(); 345 queue->Pop();
347 } 346 }
348 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 347 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
349 EXPECT_NE(all_tiles, required_for_draw_tiles); 348 EXPECT_NE(all_tiles, required_for_draw_tiles);
350 349
351 std::set<Tile*> new_content_tiles; 350 std::set<Tile*> new_content_tiles;
352 last_tile = NULL; 351 last_tile = PrioritizedTile();
353 size_t increasing_distance_tiles = 0u; 352 size_t increasing_distance_tiles = 0u;
354 // Here we expect to get increasing PENDING_TREE priority_bin. 353 // Here we expect to get increasing PENDING_TREE priority_bin.
355 queue = host_impl_.BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY, 354 queue = host_impl_.BuildRasterQueue(NEW_CONTENT_TAKES_PRIORITY,
356 RasterTilePriorityQueue::Type::ALL); 355 RasterTilePriorityQueue::Type::ALL);
357 tile_count = 0; 356 tile_count = 0;
358 while (!queue->IsEmpty()) { 357 while (!queue->IsEmpty()) {
359 Tile* tile = queue->Top(); 358 PrioritizedTile prioritized_tile = queue->Top();
360 EXPECT_TRUE(tile); 359 EXPECT_TRUE(prioritized_tile.tile());
361 360
362 if (!last_tile) 361 if (!last_tile.tile())
363 last_tile = tile; 362 last_tile = prioritized_tile;
364 363
365 EXPECT_LE(last_tile->priority().priority_bin, 364 EXPECT_LE(last_tile.priority().priority_bin,
366 tile->priority().priority_bin); 365 prioritized_tile.priority().priority_bin);
367 if (last_tile->priority().priority_bin == tile->priority().priority_bin) { 366 if (last_tile.priority().priority_bin ==
368 increasing_distance_tiles += last_tile->priority().distance_to_visible <= 367 prioritized_tile.priority().priority_bin) {
369 tile->priority().distance_to_visible; 368 increasing_distance_tiles +=
369 last_tile.priority().distance_to_visible <=
370 prioritized_tile.priority().distance_to_visible;
370 } 371 }
371 372
372 if (tile->priority().priority_bin == TilePriority::NOW && 373 if (prioritized_tile.priority().priority_bin == TilePriority::NOW &&
373 last_tile->priority().resolution != tile->priority().resolution) { 374 last_tile.priority().resolution !=
375 prioritized_tile.priority().resolution) {
374 // High resolution should come first. 376 // High resolution should come first.
375 EXPECT_EQ(HIGH_RESOLUTION, last_tile->priority().resolution); 377 EXPECT_EQ(HIGH_RESOLUTION, last_tile.priority().resolution);
376 } 378 }
377 379
378 last_tile = tile; 380 last_tile = prioritized_tile;
379 new_content_tiles.insert(tile); 381 new_content_tiles.insert(prioritized_tile.tile());
380 ++tile_count; 382 ++tile_count;
381 queue->Pop(); 383 queue->Pop();
382 } 384 }
383 385
384 EXPECT_EQ(tile_count, new_content_tiles.size()); 386 EXPECT_EQ(tile_count, new_content_tiles.size());
385 EXPECT_EQ(high_res_tiles, new_content_tiles); 387 EXPECT_EQ(high_res_tiles, new_content_tiles);
386 // Since we don't guarantee increasing distance due to spiral iterator, we 388 // Since we don't guarantee increasing distance due to spiral iterator, we
387 // should check that we're _mostly_ right. 389 // should check that we're _mostly_ right.
388 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4); 390 EXPECT_GE(increasing_distance_tiles, 3 * tile_count / 4);
389 391
390 // Check that we have consistent required_for_activation tiles. 392 // Check that we have consistent required_for_activation tiles.
391 queue = host_impl_.BuildRasterQueue( 393 queue = host_impl_.BuildRasterQueue(
392 NEW_CONTENT_TAKES_PRIORITY, 394 NEW_CONTENT_TAKES_PRIORITY,
393 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 395 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
394 required_for_activation_tiles.clear(); 396 required_for_activation_tiles.clear();
395 while (!queue->IsEmpty()) { 397 while (!queue->IsEmpty()) {
396 Tile* tile = queue->Top(); 398 PrioritizedTile prioritized_tile = queue->Top();
397 EXPECT_TRUE(tile->required_for_activation()); 399 EXPECT_TRUE(prioritized_tile.tile()->required_for_activation());
398 required_for_activation_tiles.insert(tile); 400 required_for_activation_tiles.insert(prioritized_tile.tile());
399 queue->Pop(); 401 queue->Pop();
400 } 402 }
401 EXPECT_EQ(expected_required_for_activation_tiles, 403 EXPECT_EQ(expected_required_for_activation_tiles,
402 required_for_activation_tiles); 404 required_for_activation_tiles);
403 EXPECT_NE(new_content_tiles, required_for_activation_tiles); 405 EXPECT_NE(new_content_tiles, required_for_activation_tiles);
404 406
405 // Check that we have consistent required_for_draw tiles. 407 // Check that we have consistent required_for_draw tiles.
406 queue = host_impl_.BuildRasterQueue( 408 queue = host_impl_.BuildRasterQueue(
407 NEW_CONTENT_TAKES_PRIORITY, 409 NEW_CONTENT_TAKES_PRIORITY,
408 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 410 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
409 required_for_draw_tiles.clear(); 411 required_for_draw_tiles.clear();
410 while (!queue->IsEmpty()) { 412 while (!queue->IsEmpty()) {
411 Tile* tile = queue->Top(); 413 PrioritizedTile prioritized_tile = queue->Top();
412 EXPECT_TRUE(tile->required_for_draw()); 414 EXPECT_TRUE(prioritized_tile.tile()->required_for_draw());
413 required_for_draw_tiles.insert(tile); 415 required_for_draw_tiles.insert(prioritized_tile.tile());
414 queue->Pop(); 416 queue->Pop();
415 } 417 }
416 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles); 418 EXPECT_EQ(expected_required_for_draw_tiles, required_for_draw_tiles);
417 EXPECT_NE(new_content_tiles, required_for_draw_tiles); 419 EXPECT_NE(new_content_tiles, required_for_draw_tiles);
418 } 420 }
419 421
420 TEST_F(TileManagerTilePriorityQueueTest, 422 TEST_F(TileManagerTilePriorityQueueTest,
421 RasterTilePriorityQueueHighNonIdealTilings) { 423 RasterTilePriorityQueueHighNonIdealTilings) {
422 const gfx::Size layer_bounds(1000, 1000); 424 const gfx::Size layer_bounds(1000, 1000);
423 const gfx::Size viewport(800, 800); 425 const gfx::Size viewport(800, 800);
(...skipping 26 matching lines...) Expand all
450 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); 452 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i);
451 if (tiling->contents_scale() == 1.5f) { 453 if (tiling->contents_scale() == 1.5f) {
452 tiling->set_resolution(HIGH_RESOLUTION); 454 tiling->set_resolution(HIGH_RESOLUTION);
453 const auto& all_tiles = tiling->AllTilesForTesting(); 455 const auto& all_tiles = tiling->AllTilesForTesting();
454 all_expected_tiles.insert(all_tiles.begin(), all_tiles.end()); 456 all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
455 } else { 457 } else {
456 tiling->set_resolution(NON_IDEAL_RESOLUTION); 458 tiling->set_resolution(NON_IDEAL_RESOLUTION);
457 // Non ideal tilings with a high res pending twin have to be processed 459 // Non ideal tilings with a high res pending twin have to be processed
458 // because of possible activation tiles. 460 // because of possible activation tiles.
459 if (tiling->contents_scale() == 1.f) { 461 if (tiling->contents_scale() == 1.f) {
460 tiling->UpdateAllTilePrioritiesForTesting(); 462 tiling->UpdateAndGetAllPrioritizedTilesForTesting();
461 const auto& all_tiles = tiling->AllTilesForTesting(); 463 const auto& all_tiles = tiling->AllTilesForTesting();
462 for (auto* tile : all_tiles) 464 for (auto* tile : all_tiles)
463 EXPECT_TRUE(tile->required_for_activation()); 465 EXPECT_TRUE(tile->required_for_activation());
464 all_expected_tiles.insert(all_tiles.begin(), all_tiles.end()); 466 all_expected_tiles.insert(all_tiles.begin(), all_tiles.end());
465 } 467 }
466 } 468 }
467 } 469 }
468 470
469 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 471 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
470 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL)); 472 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL));
471 EXPECT_FALSE(queue->IsEmpty()); 473 EXPECT_FALSE(queue->IsEmpty());
472 474
473 size_t tile_count = 0; 475 size_t tile_count = 0;
474 std::set<Tile*> all_actual_tiles; 476 std::set<Tile*> all_actual_tiles;
475 while (!queue->IsEmpty()) { 477 while (!queue->IsEmpty()) {
476 EXPECT_TRUE(queue->Top()); 478 EXPECT_TRUE(queue->Top().tile());
477 all_actual_tiles.insert(queue->Top()); 479 all_actual_tiles.insert(queue->Top().tile());
478 ++tile_count; 480 ++tile_count;
479 queue->Pop(); 481 queue->Pop();
480 } 482 }
481 483
482 EXPECT_EQ(tile_count, all_actual_tiles.size()); 484 EXPECT_EQ(tile_count, all_actual_tiles.size());
483 EXPECT_EQ(all_expected_tiles.size(), all_actual_tiles.size()); 485 EXPECT_EQ(all_expected_tiles.size(), all_actual_tiles.size());
484 EXPECT_EQ(all_expected_tiles, all_actual_tiles); 486 EXPECT_EQ(all_expected_tiles, all_actual_tiles);
485 } 487 }
486 488
487 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) { 489 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueInvalidation) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 // Expect 15 shared tiles and 1 unshared tile. 554 // Expect 15 shared tiles and 1 unshared tile.
553 EXPECT_EQ(17u, expected_all_tiles.size()); 555 EXPECT_EQ(17u, expected_all_tiles.size());
554 556
555 // The actual test will now build different queues and verify that the queues 557 // The actual test will now build different queues and verify that the queues
556 // return the same information as computed manually above. 558 // return the same information as computed manually above.
557 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 559 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
558 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 560 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
559 std::set<Tile*> actual_now_tiles; 561 std::set<Tile*> actual_now_tiles;
560 std::set<Tile*> actual_all_tiles; 562 std::set<Tile*> actual_all_tiles;
561 while (!queue->IsEmpty()) { 563 while (!queue->IsEmpty()) {
562 Tile* tile = queue->Top(); 564 PrioritizedTile prioritized_tile = queue->Top();
563 queue->Pop(); 565 queue->Pop();
564 if (tile->priority().priority_bin == TilePriority::NOW) 566 if (prioritized_tile.priority().priority_bin == TilePriority::NOW)
565 actual_now_tiles.insert(tile); 567 actual_now_tiles.insert(prioritized_tile.tile());
566 actual_all_tiles.insert(tile); 568 actual_all_tiles.insert(prioritized_tile.tile());
567 } 569 }
568 EXPECT_EQ(expected_now_tiles, actual_now_tiles); 570 EXPECT_EQ(expected_now_tiles, actual_now_tiles);
569 EXPECT_EQ(expected_all_tiles, actual_all_tiles); 571 EXPECT_EQ(expected_all_tiles, actual_all_tiles);
570 572
571 queue = host_impl_.BuildRasterQueue( 573 queue = host_impl_.BuildRasterQueue(
572 SAME_PRIORITY_FOR_BOTH_TREES, 574 SAME_PRIORITY_FOR_BOTH_TREES,
573 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 575 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
574 std::set<Tile*> actual_required_for_draw_tiles; 576 std::set<Tile*> actual_required_for_draw_tiles;
575 while (!queue->IsEmpty()) { 577 while (!queue->IsEmpty()) {
576 Tile* tile = queue->Top(); 578 PrioritizedTile prioritized_tile = queue->Top();
577 queue->Pop(); 579 queue->Pop();
578 actual_required_for_draw_tiles.insert(tile); 580 actual_required_for_draw_tiles.insert(prioritized_tile.tile());
579 } 581 }
580 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles); 582 EXPECT_EQ(expected_required_for_draw_tiles, actual_required_for_draw_tiles);
581 583
582 queue = host_impl_.BuildRasterQueue( 584 queue = host_impl_.BuildRasterQueue(
583 SAME_PRIORITY_FOR_BOTH_TREES, 585 SAME_PRIORITY_FOR_BOTH_TREES,
584 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 586 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
585 std::set<Tile*> actual_required_for_activation_tiles; 587 std::set<Tile*> actual_required_for_activation_tiles;
586 while (!queue->IsEmpty()) { 588 while (!queue->IsEmpty()) {
587 Tile* tile = queue->Top(); 589 Tile* tile = queue->Top().tile();
588 queue->Pop(); 590 queue->Pop();
589 actual_required_for_activation_tiles.insert(tile); 591 actual_required_for_activation_tiles.insert(tile);
590 } 592 }
591 EXPECT_EQ(expected_required_for_activation_tiles, 593 EXPECT_EQ(expected_required_for_activation_tiles,
592 actual_required_for_activation_tiles); 594 actual_required_for_activation_tiles);
593 } 595 }
594 596
595 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) { 597 TEST_F(TileManagerTilePriorityQueueTest, ActivationComesBeforeEventually) {
596 base::TimeTicks time_ticks; 598 base::TimeTicks time_ticks;
597 time_ticks += base::TimeDelta::FromMilliseconds(1); 599 time_ticks += base::TimeDelta::FromMilliseconds(1);
(...skipping 24 matching lines...) Expand all
622 624
623 host_impl_.SetRequiresHighResToDraw(); 625 host_impl_.SetRequiresHighResToDraw();
624 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 626 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
625 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL)); 627 SMOOTHNESS_TAKES_PRIORITY, RasterTilePriorityQueue::Type::ALL));
626 EXPECT_FALSE(queue->IsEmpty()); 628 EXPECT_FALSE(queue->IsEmpty());
627 629
628 // Get all the tiles that are NOW or SOON and make sure they are ready to 630 // Get all the tiles that are NOW or SOON and make sure they are ready to
629 // draw. 631 // draw.
630 std::vector<Tile*> all_tiles; 632 std::vector<Tile*> all_tiles;
631 while (!queue->IsEmpty()) { 633 while (!queue->IsEmpty()) {
632 Tile* tile = queue->Top(); 634 PrioritizedTile prioritized_tile = queue->Top();
633 if (tile->priority().priority_bin >= TilePriority::EVENTUALLY) 635 if (prioritized_tile.priority().priority_bin >= TilePriority::EVENTUALLY)
634 break; 636 break;
635 637
636 all_tiles.push_back(tile); 638 all_tiles.push_back(prioritized_tile.tile());
637 queue->Pop(); 639 queue->Pop();
638 } 640 }
639 641
640 tile_manager()->InitializeTilesWithResourcesForTesting( 642 tile_manager()->InitializeTilesWithResourcesForTesting(
641 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 643 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
642 644
643 // Ensure we can activate. 645 // Ensure we can activate.
644 EXPECT_TRUE(tile_manager()->IsReadyToActivate()); 646 EXPECT_TRUE(tile_manager()->IsReadyToActivate());
645 } 647 }
646 648
647 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { 649 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) {
648 const gfx::Size layer_bounds(1000, 1000); 650 const gfx::Size layer_bounds(1000, 1000);
649 host_impl_.SetViewportSize(layer_bounds); 651 host_impl_.SetViewportSize(layer_bounds);
650 SetupDefaultTrees(layer_bounds); 652 SetupDefaultTrees(layer_bounds);
651 653
652 scoped_ptr<EvictionTilePriorityQueue> empty_queue( 654 scoped_ptr<EvictionTilePriorityQueue> empty_queue(
653 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); 655 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES));
654 EXPECT_TRUE(empty_queue->IsEmpty()); 656 EXPECT_TRUE(empty_queue->IsEmpty());
655 std::set<Tile*> all_tiles; 657 std::set<Tile*> all_tiles;
656 size_t tile_count = 0; 658 size_t tile_count = 0;
657 659
658 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( 660 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
659 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 661 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
660 while (!raster_queue->IsEmpty()) { 662 while (!raster_queue->IsEmpty()) {
661 ++tile_count; 663 ++tile_count;
662 EXPECT_TRUE(raster_queue->Top()); 664 EXPECT_TRUE(raster_queue->Top().tile());
663 all_tiles.insert(raster_queue->Top()); 665 all_tiles.insert(raster_queue->Top().tile());
664 raster_queue->Pop(); 666 raster_queue->Pop();
665 } 667 }
666 668
667 EXPECT_EQ(tile_count, all_tiles.size()); 669 EXPECT_EQ(tile_count, all_tiles.size());
668 EXPECT_EQ(16u, tile_count); 670 EXPECT_EQ(16u, tile_count);
669 671
670 tile_manager()->InitializeTilesWithResourcesForTesting( 672 tile_manager()->InitializeTilesWithResourcesForTesting(
671 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 673 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
672 674
673 scoped_ptr<EvictionTilePriorityQueue> queue( 675 scoped_ptr<EvictionTilePriorityQueue> queue(
674 host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY)); 676 host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY));
675 EXPECT_FALSE(queue->IsEmpty()); 677 EXPECT_FALSE(queue->IsEmpty());
676 678
677 // Sanity check, all tiles should be visible. 679 // Sanity check, all tiles should be visible.
678 std::set<Tile*> smoothness_tiles; 680 std::set<Tile*> smoothness_tiles;
679 while (!queue->IsEmpty()) { 681 while (!queue->IsEmpty()) {
680 Tile* tile = queue->Top(); 682 PrioritizedTile prioritized_tile = queue->Top();
681 EXPECT_TRUE(tile); 683 EXPECT_TRUE(prioritized_tile.tile());
682 EXPECT_EQ(TilePriority::NOW, tile->priority().priority_bin); 684 EXPECT_EQ(TilePriority::NOW, prioritized_tile.priority().priority_bin);
683 EXPECT_TRUE(tile->HasResource()); 685 EXPECT_TRUE(prioritized_tile.tile()->HasResource());
684 smoothness_tiles.insert(tile); 686 smoothness_tiles.insert(prioritized_tile.tile());
685 queue->Pop(); 687 queue->Pop();
686 } 688 }
687 EXPECT_EQ(all_tiles, smoothness_tiles); 689 EXPECT_EQ(all_tiles, smoothness_tiles);
688 690
689 tile_manager()->ReleaseTileResourcesForTesting( 691 tile_manager()->ReleaseTileResourcesForTesting(
690 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 692 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
691 693
692 Region invalidation(gfx::Rect(0, 0, 500, 500)); 694 Region invalidation(gfx::Rect(0, 0, 500, 500));
693 695
694 // Invalidate the pending tree. 696 // Invalidate the pending tree.
695 pending_layer_->set_invalidation(invalidation); 697 pending_layer_->set_invalidation(invalidation);
696 pending_layer_->HighResTiling()->Invalidate(invalidation); 698 pending_layer_->HighResTiling()->Invalidate(invalidation);
697 pending_layer_->HighResTiling()->CreateMissingTilesInLiveTilesRect(); 699 pending_layer_->HighResTiling()->CreateMissingTilesInLiveTilesRect();
698 pending_layer_->LowResTiling()->Invalidate(invalidation); 700 pending_layer_->LowResTiling()->Invalidate(invalidation);
699 pending_layer_->LowResTiling()->CreateMissingTilesInLiveTilesRect(); 701 pending_layer_->LowResTiling()->CreateMissingTilesInLiveTilesRect();
700 702
701 active_layer_->ResetAllTilesPriorities();
702 pending_layer_->ResetAllTilesPriorities();
703
704 // Renew all of the tile priorities. 703 // Renew all of the tile priorities.
705 gfx::Rect viewport(50, 50, 100, 100); 704 gfx::Rect viewport(50, 50, 100, 100);
706 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 705 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
707 Occlusion()); 706 Occlusion());
708 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 707 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
709 Occlusion()); 708 Occlusion());
710 active_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 709 active_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
711 Occlusion()); 710 Occlusion());
712 active_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 711 active_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
713 Occlusion()); 712 Occlusion());
(...skipping 16 matching lines...) Expand all
730 all_tiles.insert(active_high_res_tiles[i]); 729 all_tiles.insert(active_high_res_tiles[i]);
731 730
732 std::vector<Tile*> active_low_res_tiles = 731 std::vector<Tile*> active_low_res_tiles =
733 active_layer_->LowResTiling()->AllTilesForTesting(); 732 active_layer_->LowResTiling()->AllTilesForTesting();
734 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 733 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
735 all_tiles.insert(active_low_res_tiles[i]); 734 all_tiles.insert(active_low_res_tiles[i]);
736 735
737 tile_manager()->InitializeTilesWithResourcesForTesting( 736 tile_manager()->InitializeTilesWithResourcesForTesting(
738 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 737 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
739 738
740 Tile* last_tile = NULL; 739 PrioritizedTile last_tile;
741 smoothness_tiles.clear(); 740 smoothness_tiles.clear();
742 tile_count = 0; 741 tile_count = 0;
743 // Here we expect to get increasing combined priority_bin. 742 // Here we expect to get increasing combined priority_bin.
744 queue = host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY); 743 queue = host_impl_.BuildEvictionQueue(SMOOTHNESS_TAKES_PRIORITY);
745 int distance_increasing = 0; 744 int distance_increasing = 0;
746 int distance_decreasing = 0; 745 int distance_decreasing = 0;
747 while (!queue->IsEmpty()) { 746 while (!queue->IsEmpty()) {
748 Tile* tile = queue->Top(); 747 PrioritizedTile prioritized_tile = queue->Top();
748 Tile* tile = prioritized_tile.tile();
749 EXPECT_TRUE(tile); 749 EXPECT_TRUE(tile);
750 EXPECT_TRUE(tile->HasResource()); 750 EXPECT_TRUE(tile->HasResource());
751 751
752 if (!last_tile) 752 if (!last_tile.tile())
753 last_tile = tile; 753 last_tile = prioritized_tile;
754 754
755 const TilePriority& last_priority = last_tile->priority(); 755 const TilePriority& last_priority = last_tile.priority();
756 const TilePriority& priority = tile->priority(); 756 const TilePriority& priority = prioritized_tile.priority();
757 757
758 EXPECT_GE(last_priority.priority_bin, priority.priority_bin); 758 EXPECT_GE(last_priority.priority_bin, priority.priority_bin);
759 if (last_priority.priority_bin == priority.priority_bin) { 759 if (last_priority.priority_bin == priority.priority_bin) {
760 EXPECT_LE(last_tile->required_for_activation(), 760 EXPECT_LE(last_tile.tile()->required_for_activation(),
761 tile->required_for_activation()); 761 tile->required_for_activation());
762 if (last_tile->required_for_activation() == 762 if (last_tile.tile()->required_for_activation() ==
763 tile->required_for_activation()) { 763 tile->required_for_activation()) {
764 if (last_priority.distance_to_visible >= priority.distance_to_visible) 764 if (last_priority.distance_to_visible >= priority.distance_to_visible)
765 ++distance_decreasing; 765 ++distance_decreasing;
766 else 766 else
767 ++distance_increasing; 767 ++distance_increasing;
768 } 768 }
769 } 769 }
770 770
771 last_tile = tile; 771 last_tile = prioritized_tile;
772 ++tile_count; 772 ++tile_count;
773 smoothness_tiles.insert(tile); 773 smoothness_tiles.insert(tile);
774 queue->Pop(); 774 queue->Pop();
775 } 775 }
776 776
777 // Ensure that the distance is decreasing many more times than increasing. 777 // Ensure that the distance is decreasing many more times than increasing.
778 EXPECT_EQ(3, distance_increasing); 778 EXPECT_EQ(3, distance_increasing);
779 EXPECT_EQ(17, distance_decreasing); 779 EXPECT_EQ(17, distance_decreasing);
780 EXPECT_EQ(tile_count, smoothness_tiles.size()); 780 EXPECT_EQ(tile_count, smoothness_tiles.size());
781 EXPECT_EQ(all_tiles, smoothness_tiles); 781 EXPECT_EQ(all_tiles, smoothness_tiles);
782 782
783 std::set<Tile*> new_content_tiles; 783 std::set<Tile*> new_content_tiles;
784 last_tile = NULL; 784 last_tile = PrioritizedTile();
785 // Again, we expect to get increasing combined priority_bin. 785 // Again, we expect to get increasing combined priority_bin.
786 queue = host_impl_.BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY); 786 queue = host_impl_.BuildEvictionQueue(NEW_CONTENT_TAKES_PRIORITY);
787 distance_decreasing = 0; 787 distance_decreasing = 0;
788 distance_increasing = 0; 788 distance_increasing = 0;
789 while (!queue->IsEmpty()) { 789 while (!queue->IsEmpty()) {
790 Tile* tile = queue->Top(); 790 PrioritizedTile prioritized_tile = queue->Top();
791 Tile* tile = prioritized_tile.tile();
791 EXPECT_TRUE(tile); 792 EXPECT_TRUE(tile);
792 793
793 if (!last_tile) 794 if (!last_tile.tile())
794 last_tile = tile; 795 last_tile = prioritized_tile;
795 796
796 const TilePriority& last_priority = last_tile->priority(); 797 const TilePriority& last_priority = last_tile.priority();
797 const TilePriority& priority = tile->priority(); 798 const TilePriority& priority = prioritized_tile.priority();
798 799
799 EXPECT_GE(last_priority.priority_bin, priority.priority_bin); 800 EXPECT_GE(last_priority.priority_bin, priority.priority_bin);
800 if (last_priority.priority_bin == priority.priority_bin) { 801 if (last_priority.priority_bin == priority.priority_bin) {
801 EXPECT_LE(last_tile->required_for_activation(), 802 EXPECT_LE(last_tile.tile()->required_for_activation(),
802 tile->required_for_activation()); 803 tile->required_for_activation());
803 if (last_tile->required_for_activation() == 804 if (last_tile.tile()->required_for_activation() ==
804 tile->required_for_activation()) { 805 tile->required_for_activation()) {
805 if (last_priority.distance_to_visible >= priority.distance_to_visible) 806 if (last_priority.distance_to_visible >= priority.distance_to_visible)
806 ++distance_decreasing; 807 ++distance_decreasing;
807 else 808 else
808 ++distance_increasing; 809 ++distance_increasing;
809 } 810 }
810 } 811 }
811 812
812 last_tile = tile; 813 last_tile = prioritized_tile;
813 new_content_tiles.insert(tile); 814 new_content_tiles.insert(tile);
814 queue->Pop(); 815 queue->Pop();
815 } 816 }
816 817
817 // Ensure that the distance is decreasing many more times than increasing. 818 // Ensure that the distance is decreasing many more times than increasing.
818 EXPECT_EQ(3, distance_increasing); 819 EXPECT_EQ(3, distance_increasing);
819 EXPECT_EQ(17, distance_decreasing); 820 EXPECT_EQ(17, distance_decreasing);
820 EXPECT_EQ(tile_count, new_content_tiles.size()); 821 EXPECT_EQ(tile_count, new_content_tiles.size());
821 EXPECT_EQ(all_tiles, new_content_tiles); 822 EXPECT_EQ(all_tiles, new_content_tiles);
822 } 823 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 858
858 FakePictureLayerImpl* active_child_layer = 859 FakePictureLayerImpl* active_child_layer =
859 static_cast<FakePictureLayerImpl*>(active_layer_->children()[0]); 860 static_cast<FakePictureLayerImpl*>(active_layer_->children()[0]);
860 861
861 std::set<Tile*> all_tiles; 862 std::set<Tile*> all_tiles;
862 size_t tile_count = 0; 863 size_t tile_count = 0;
863 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( 864 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
864 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 865 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
865 while (!raster_queue->IsEmpty()) { 866 while (!raster_queue->IsEmpty()) {
866 ++tile_count; 867 ++tile_count;
867 EXPECT_TRUE(raster_queue->Top()); 868 EXPECT_TRUE(raster_queue->Top().tile());
868 all_tiles.insert(raster_queue->Top()); 869 all_tiles.insert(raster_queue->Top().tile());
869 raster_queue->Pop(); 870 raster_queue->Pop();
870 } 871 }
871 EXPECT_EQ(tile_count, all_tiles.size()); 872 EXPECT_EQ(tile_count, all_tiles.size());
872 EXPECT_EQ(32u, tile_count); 873 EXPECT_EQ(32u, tile_count);
873 874
874 pending_layer_->ResetAllTilesPriorities();
875
876 // Renew all of the tile priorities. 875 // Renew all of the tile priorities.
877 gfx::Rect viewport(layer_bounds); 876 gfx::Rect viewport(layer_bounds);
878 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 877 pending_layer_->HighResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
879 Occlusion()); 878 Occlusion());
880 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0, 879 pending_layer_->LowResTiling()->ComputeTilePriorityRects(viewport, 1.0f, 1.0,
881 Occlusion()); 880 Occlusion());
882 pending_child_layer->HighResTiling()->ComputeTilePriorityRects( 881 pending_child_layer->HighResTiling()->ComputeTilePriorityRects(
883 viewport, 1.0f, 1.0, Occlusion()); 882 viewport, 1.0f, 1.0, Occlusion());
884 pending_child_layer->LowResTiling()->ComputeTilePriorityRects( 883 pending_child_layer->LowResTiling()->ComputeTilePriorityRects(
885 viewport, 1.0f, 1.0, Occlusion()); 884 viewport, 1.0f, 1.0, Occlusion());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 active_child_layer->LowResTiling()->SetAllTilesOccludedForTesting(); 917 active_child_layer->LowResTiling()->SetAllTilesOccludedForTesting();
919 all_tiles.insert(pending_child_low_res_tiles.begin(), 918 all_tiles.insert(pending_child_low_res_tiles.begin(),
920 pending_child_low_res_tiles.end()); 919 pending_child_low_res_tiles.end());
921 920
922 tile_manager()->InitializeTilesWithResourcesForTesting( 921 tile_manager()->InitializeTilesWithResourcesForTesting(
923 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 922 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
924 923
925 // Verify occlusion is considered by EvictionTilePriorityQueue. 924 // Verify occlusion is considered by EvictionTilePriorityQueue.
926 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; 925 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
927 size_t occluded_count = 0u; 926 size_t occluded_count = 0u;
928 Tile* last_tile = NULL; 927 PrioritizedTile last_tile;
929 scoped_ptr<EvictionTilePriorityQueue> queue( 928 scoped_ptr<EvictionTilePriorityQueue> queue(
930 host_impl_.BuildEvictionQueue(tree_priority)); 929 host_impl_.BuildEvictionQueue(tree_priority));
931 while (!queue->IsEmpty()) { 930 while (!queue->IsEmpty()) {
932 Tile* tile = queue->Top(); 931 PrioritizedTile prioritized_tile = queue->Top();
933 if (!last_tile) 932 if (!last_tile.tile())
934 last_tile = tile; 933 last_tile = prioritized_tile;
935 934
936 bool tile_is_occluded = tile->is_occluded(); 935 bool tile_is_occluded = prioritized_tile.is_occluded();
937 936
938 // The only way we will encounter an occluded tile after an unoccluded 937 // The only way we will encounter an occluded tile after an unoccluded
939 // tile is if the priorty bin decreased, the tile is required for 938 // tile is if the priorty bin decreased, the tile is required for
940 // activation, or the scale changed. 939 // activation, or the scale changed.
941 if (tile_is_occluded) { 940 if (tile_is_occluded) {
942 occluded_count++; 941 occluded_count++;
943 942
944 bool last_tile_is_occluded = last_tile->is_occluded(); 943 bool last_tile_is_occluded = last_tile.is_occluded();
945 if (!last_tile_is_occluded) { 944 if (!last_tile_is_occluded) {
946 TilePriority::PriorityBin tile_priority_bin = 945 TilePriority::PriorityBin tile_priority_bin =
947 tile->priority().priority_bin; 946 prioritized_tile.priority().priority_bin;
948 TilePriority::PriorityBin last_tile_priority_bin = 947 TilePriority::PriorityBin last_tile_priority_bin =
949 last_tile->priority().priority_bin; 948 last_tile.priority().priority_bin;
950 949
951 EXPECT_TRUE((tile_priority_bin < last_tile_priority_bin) || 950 EXPECT_TRUE((tile_priority_bin < last_tile_priority_bin) ||
952 tile->required_for_activation() || 951 prioritized_tile.tile()->required_for_activation() ||
953 (tile->contents_scale() != last_tile->contents_scale())); 952 (prioritized_tile.tile()->contents_scale() !=
953 last_tile.tile()->contents_scale()));
954 } 954 }
955 } 955 }
956 last_tile = tile; 956 last_tile = prioritized_tile;
957 queue->Pop(); 957 queue->Pop();
958 } 958 }
959 size_t expected_occluded_count = 959 size_t expected_occluded_count =
960 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size(); 960 pending_child_high_res_tiles.size() + pending_child_low_res_tiles.size();
961 EXPECT_EQ(expected_occluded_count, occluded_count); 961 EXPECT_EQ(expected_occluded_count, occluded_count);
962 } 962 }
963 963
964 TEST_F(TileManagerTilePriorityQueueTest, 964 TEST_F(TileManagerTilePriorityQueueTest,
965 EvictionTilePriorityQueueWithTransparentLayer) { 965 EvictionTilePriorityQueueWithTransparentLayer) {
966 base::TimeTicks time_ticks; 966 base::TimeTicks time_ticks;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 1048
1049 // Verify that eviction queue returns tiles also from layers without valid 1049 // Verify that eviction queue returns tiles also from layers without valid
1050 // tile priorities and that the tile priority bin of those tiles is (at most) 1050 // tile priorities and that the tile priority bin of those tiles is (at most)
1051 // EVENTUALLY. 1051 // EVENTUALLY.
1052 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; 1052 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
1053 std::set<Tile*> new_content_tiles; 1053 std::set<Tile*> new_content_tiles;
1054 size_t tile_count = 0; 1054 size_t tile_count = 0;
1055 scoped_ptr<EvictionTilePriorityQueue> queue( 1055 scoped_ptr<EvictionTilePriorityQueue> queue(
1056 host_impl_.BuildEvictionQueue(tree_priority)); 1056 host_impl_.BuildEvictionQueue(tree_priority));
1057 while (!queue->IsEmpty()) { 1057 while (!queue->IsEmpty()) {
1058 Tile* tile = queue->Top(); 1058 PrioritizedTile prioritized_tile = queue->Top();
1059 const TilePriority& pending_priority = tile->priority(); 1059 Tile* tile = prioritized_tile.tile();
1060 const TilePriority& pending_priority = prioritized_tile.priority();
1060 EXPECT_NE(std::numeric_limits<float>::infinity(), 1061 EXPECT_NE(std::numeric_limits<float>::infinity(),
1061 pending_priority.distance_to_visible); 1062 pending_priority.distance_to_visible);
1062 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end()) 1063 if (all_pending_child_tiles.find(tile) != all_pending_child_tiles.end())
1063 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin); 1064 EXPECT_EQ(TilePriority::EVENTUALLY, pending_priority.priority_bin);
1064 else 1065 else
1065 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin); 1066 EXPECT_EQ(TilePriority::NOW, pending_priority.priority_bin);
1066 new_content_tiles.insert(tile); 1067 new_content_tiles.insert(tile);
1067 ++tile_count; 1068 ++tile_count;
1068 queue->Pop(); 1069 queue->Pop();
1069 } 1070 }
1070 EXPECT_EQ(tile_count, new_content_tiles.size()); 1071 EXPECT_EQ(tile_count, new_content_tiles.size());
1071 EXPECT_EQ(all_tiles, new_content_tiles); 1072 EXPECT_EQ(all_tiles, new_content_tiles);
1072 } 1073 }
1073 1074
1074 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) { 1075 TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueueEmptyLayers) {
1075 const gfx::Size layer_bounds(1000, 1000); 1076 const gfx::Size layer_bounds(1000, 1000);
1076 host_impl_.SetViewportSize(layer_bounds); 1077 host_impl_.SetViewportSize(layer_bounds);
1077 SetupDefaultTrees(layer_bounds); 1078 SetupDefaultTrees(layer_bounds);
1078 1079
1079 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 1080 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
1080 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 1081 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1081 EXPECT_FALSE(queue->IsEmpty()); 1082 EXPECT_FALSE(queue->IsEmpty());
1082 1083
1083 size_t tile_count = 0; 1084 size_t tile_count = 0;
1084 std::set<Tile*> all_tiles; 1085 std::set<Tile*> all_tiles;
1085 while (!queue->IsEmpty()) { 1086 while (!queue->IsEmpty()) {
1086 EXPECT_TRUE(queue->Top()); 1087 EXPECT_TRUE(queue->Top().tile());
1087 all_tiles.insert(queue->Top()); 1088 all_tiles.insert(queue->Top().tile());
1088 ++tile_count; 1089 ++tile_count;
1089 queue->Pop(); 1090 queue->Pop();
1090 } 1091 }
1091 1092
1092 EXPECT_EQ(tile_count, all_tiles.size()); 1093 EXPECT_EQ(tile_count, all_tiles.size());
1093 EXPECT_EQ(16u, tile_count); 1094 EXPECT_EQ(16u, tile_count);
1094 1095
1095 for (int i = 1; i < 10; ++i) { 1096 for (int i = 1; i < 10; ++i) {
1096 scoped_ptr<FakePictureLayerImpl> pending_layer = 1097 scoped_ptr<FakePictureLayerImpl> pending_layer =
1097 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1098 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1098 pending_layer->SetDrawsContent(true); 1099 pending_layer->SetDrawsContent(true);
1099 pending_layer->set_has_valid_tile_priorities(true); 1100 pending_layer->set_has_valid_tile_priorities(true);
1100 pending_layer_->AddChild(pending_layer.Pass()); 1101 pending_layer_->AddChild(pending_layer.Pass());
1101 } 1102 }
1102 1103
1103 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES, 1104 queue = host_impl_.BuildRasterQueue(SAME_PRIORITY_FOR_BOTH_TREES,
1104 RasterTilePriorityQueue::Type::ALL); 1105 RasterTilePriorityQueue::Type::ALL);
1105 EXPECT_FALSE(queue->IsEmpty()); 1106 EXPECT_FALSE(queue->IsEmpty());
1106 1107
1107 tile_count = 0; 1108 tile_count = 0;
1108 all_tiles.clear(); 1109 all_tiles.clear();
1109 while (!queue->IsEmpty()) { 1110 while (!queue->IsEmpty()) {
1110 EXPECT_TRUE(queue->Top()); 1111 EXPECT_TRUE(queue->Top().tile());
1111 all_tiles.insert(queue->Top()); 1112 all_tiles.insert(queue->Top().tile());
1112 ++tile_count; 1113 ++tile_count;
1113 queue->Pop(); 1114 queue->Pop();
1114 } 1115 }
1115 EXPECT_EQ(tile_count, all_tiles.size()); 1116 EXPECT_EQ(tile_count, all_tiles.size());
1116 EXPECT_EQ(16u, tile_count); 1117 EXPECT_EQ(16u, tile_count);
1117 } 1118 }
1118 1119
1119 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) { 1120 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueueEmptyLayers) {
1120 const gfx::Size layer_bounds(1000, 1000); 1121 const gfx::Size layer_bounds(1000, 1000);
1121 host_impl_.SetViewportSize(layer_bounds); 1122 host_impl_.SetViewportSize(layer_bounds);
1122 SetupDefaultTrees(layer_bounds); 1123 SetupDefaultTrees(layer_bounds);
1123 1124
1124 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue( 1125 scoped_ptr<RasterTilePriorityQueue> raster_queue(host_impl_.BuildRasterQueue(
1125 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 1126 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1126 EXPECT_FALSE(raster_queue->IsEmpty()); 1127 EXPECT_FALSE(raster_queue->IsEmpty());
1127 1128
1128 size_t tile_count = 0; 1129 size_t tile_count = 0;
1129 std::set<Tile*> all_tiles; 1130 std::set<Tile*> all_tiles;
1130 while (!raster_queue->IsEmpty()) { 1131 while (!raster_queue->IsEmpty()) {
1131 EXPECT_TRUE(raster_queue->Top()); 1132 EXPECT_TRUE(raster_queue->Top().tile());
1132 all_tiles.insert(raster_queue->Top()); 1133 all_tiles.insert(raster_queue->Top().tile());
1133 ++tile_count; 1134 ++tile_count;
1134 raster_queue->Pop(); 1135 raster_queue->Pop();
1135 } 1136 }
1136 EXPECT_EQ(tile_count, all_tiles.size()); 1137 EXPECT_EQ(tile_count, all_tiles.size());
1137 EXPECT_EQ(16u, tile_count); 1138 EXPECT_EQ(16u, tile_count);
1138 1139
1139 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end()); 1140 std::vector<Tile*> tiles(all_tiles.begin(), all_tiles.end());
1140 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles); 1141 host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
1141 1142
1142 for (int i = 1; i < 10; ++i) { 1143 for (int i = 1; i < 10; ++i) {
1143 scoped_ptr<FakePictureLayerImpl> pending_layer = 1144 scoped_ptr<FakePictureLayerImpl> pending_layer =
1144 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i); 1145 FakePictureLayerImpl::Create(host_impl_.pending_tree(), id_ + i);
1145 pending_layer->SetDrawsContent(true); 1146 pending_layer->SetDrawsContent(true);
1146 pending_layer->set_has_valid_tile_priorities(true); 1147 pending_layer->set_has_valid_tile_priorities(true);
1147 pending_layer_->AddChild(pending_layer.Pass()); 1148 pending_layer_->AddChild(pending_layer.Pass());
1148 } 1149 }
1149 1150
1150 scoped_ptr<EvictionTilePriorityQueue> queue( 1151 scoped_ptr<EvictionTilePriorityQueue> queue(
1151 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES)); 1152 host_impl_.BuildEvictionQueue(SAME_PRIORITY_FOR_BOTH_TREES));
1152 EXPECT_FALSE(queue->IsEmpty()); 1153 EXPECT_FALSE(queue->IsEmpty());
1153 1154
1154 tile_count = 0; 1155 tile_count = 0;
1155 all_tiles.clear(); 1156 all_tiles.clear();
1156 while (!queue->IsEmpty()) { 1157 while (!queue->IsEmpty()) {
1157 EXPECT_TRUE(queue->Top()); 1158 EXPECT_TRUE(queue->Top().tile());
1158 all_tiles.insert(queue->Top()); 1159 all_tiles.insert(queue->Top().tile());
1159 ++tile_count; 1160 ++tile_count;
1160 queue->Pop(); 1161 queue->Pop();
1161 } 1162 }
1162 EXPECT_EQ(tile_count, all_tiles.size()); 1163 EXPECT_EQ(tile_count, all_tiles.size());
1163 EXPECT_EQ(16u, tile_count); 1164 EXPECT_EQ(16u, tile_count);
1164 } 1165 }
1165 1166
1166 TEST_F(TileManagerTilePriorityQueueTest, 1167 TEST_F(TileManagerTilePriorityQueueTest,
1167 RasterTilePriorityQueueStaticViewport) { 1168 RasterTilePriorityQueueStaticViewport) {
1168 FakePictureLayerTilingClient client; 1169 FakePictureLayerTilingClient client;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 1210
1210 // On the third iteration, we should get no tiles since everything was 1211 // On the third iteration, we should get no tiles since everything was
1211 // marked as ready to draw. 1212 // marked as ready to draw.
1212 if (i == 2) { 1213 if (i == 2) {
1213 EXPECT_TRUE(queue->IsEmpty()); 1214 EXPECT_TRUE(queue->IsEmpty());
1214 continue; 1215 continue;
1215 } 1216 }
1216 1217
1217 EXPECT_FALSE(queue->IsEmpty()); 1218 EXPECT_FALSE(queue->IsEmpty());
1218 std::set<Tile*> unique_tiles; 1219 std::set<Tile*> unique_tiles;
1219 unique_tiles.insert(queue->Top()); 1220 unique_tiles.insert(queue->Top().tile());
1220 Tile* last_tile = queue->Top(); 1221 PrioritizedTile last_tile = queue->Top();
1221 have_tiles[last_tile->priority().priority_bin] = true; 1222 have_tiles[last_tile.priority().priority_bin] = true;
1222 1223
1223 // On the second iteration, mark everything as ready to draw (solid color). 1224 // On the second iteration, mark everything as ready to draw (solid color).
1224 if (i == 1) { 1225 if (i == 1) {
1225 TileDrawInfo& draw_info = last_tile->draw_info(); 1226 TileDrawInfo& draw_info = last_tile.tile()->draw_info();
1226 draw_info.SetSolidColorForTesting(SK_ColorRED); 1227 draw_info.SetSolidColorForTesting(SK_ColorRED);
1227 } 1228 }
1228 queue->Pop(); 1229 queue->Pop();
1229 int eventually_bin_order_correct_count = 0; 1230 int eventually_bin_order_correct_count = 0;
1230 int eventually_bin_order_incorrect_count = 0; 1231 int eventually_bin_order_incorrect_count = 0;
1231 while (!queue->IsEmpty()) { 1232 while (!queue->IsEmpty()) {
1232 Tile* new_tile = queue->Top(); 1233 PrioritizedTile new_tile = queue->Top();
1233 queue->Pop(); 1234 queue->Pop();
1234 unique_tiles.insert(new_tile); 1235 unique_tiles.insert(new_tile.tile());
1235 1236
1236 TilePriority last_priority = last_tile->priority(); 1237 TilePriority last_priority = last_tile.priority();
1237 TilePriority new_priority = new_tile->priority(); 1238 TilePriority new_priority = new_tile.priority();
1238 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1239 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
1239 if (last_priority.priority_bin == new_priority.priority_bin) { 1240 if (last_priority.priority_bin == new_priority.priority_bin) {
1240 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1241 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
1241 bool order_correct = last_priority.distance_to_visible <= 1242 bool order_correct = last_priority.distance_to_visible <=
1242 new_priority.distance_to_visible; 1243 new_priority.distance_to_visible;
1243 eventually_bin_order_correct_count += order_correct; 1244 eventually_bin_order_correct_count += order_correct;
1244 eventually_bin_order_incorrect_count += !order_correct; 1245 eventually_bin_order_incorrect_count += !order_correct;
1245 } else if (!soon_rect.Intersects(new_tile->content_rect()) && 1246 } else if (!soon_rect.Intersects(new_tile.tile()->content_rect()) &&
1246 !soon_rect.Intersects(last_tile->content_rect())) { 1247 !soon_rect.Intersects(last_tile.tile()->content_rect())) {
1247 EXPECT_LE(last_priority.distance_to_visible, 1248 EXPECT_LE(last_priority.distance_to_visible,
1248 new_priority.distance_to_visible); 1249 new_priority.distance_to_visible);
1249 EXPECT_EQ(TilePriority::NOW, new_priority.priority_bin); 1250 EXPECT_EQ(TilePriority::NOW, new_priority.priority_bin);
1250 } else if (new_priority.distance_to_visible > 0.f) { 1251 } else if (new_priority.distance_to_visible > 0.f) {
1251 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin); 1252 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin);
1252 } 1253 }
1253 } 1254 }
1254 have_tiles[new_priority.priority_bin] = true; 1255 have_tiles[new_priority.priority_bin] = true;
1255 1256
1256 last_tile = new_tile; 1257 last_tile = new_tile;
1257 1258
1258 // On the second iteration, mark everything as ready to draw (solid 1259 // On the second iteration, mark everything as ready to draw (solid
1259 // color). 1260 // color).
1260 if (i == 1) { 1261 if (i == 1) {
1261 TileDrawInfo& draw_info = last_tile->draw_info(); 1262 TileDrawInfo& draw_info = last_tile.tile()->draw_info();
1262 draw_info.SetSolidColorForTesting(SK_ColorRED); 1263 draw_info.SetSolidColorForTesting(SK_ColorRED);
1263 } 1264 }
1264 } 1265 }
1265 1266
1266 EXPECT_GT(eventually_bin_order_correct_count, 1267 EXPECT_GT(eventually_bin_order_correct_count,
1267 eventually_bin_order_incorrect_count); 1268 eventually_bin_order_incorrect_count);
1268 1269
1269 // We should have now and eventually tiles, as well as soon tiles from 1270 // We should have now and eventually tiles, as well as soon tiles from
1270 // the border region. 1271 // the border region.
1271 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1272 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
(...skipping 30 matching lines...) Expand all
1302 tiling_set->UpdateTilePriorities(moved_viewport, 1.0f, 2.0, Occlusion(), 1303 tiling_set->UpdateTilePriorities(moved_viewport, 1.0f, 2.0, Occlusion(),
1303 true); 1304 true);
1304 1305
1305 float inset = 1306 float inset =
1306 PictureLayerTiling::CalculateSoonBorderDistance(moved_viewport, 1.0f); 1307 PictureLayerTiling::CalculateSoonBorderDistance(moved_viewport, 1.0f);
1307 gfx::Rect soon_rect = moved_viewport; 1308 gfx::Rect soon_rect = moved_viewport;
1308 soon_rect.Inset(-inset, -inset); 1309 soon_rect.Inset(-inset, -inset);
1309 1310
1310 // There are 3 bins in TilePriority. 1311 // There are 3 bins in TilePriority.
1311 bool have_tiles[3] = {}; 1312 bool have_tiles[3] = {};
1312 Tile* last_tile = NULL; 1313 PrioritizedTile last_tile;
1313 int eventually_bin_order_correct_count = 0; 1314 int eventually_bin_order_correct_count = 0;
1314 int eventually_bin_order_incorrect_count = 0; 1315 int eventually_bin_order_incorrect_count = 0;
1315 scoped_ptr<TilingSetRasterQueueAll> queue( 1316 scoped_ptr<TilingSetRasterQueueAll> queue(
1316 new TilingSetRasterQueueAll(tiling_set.get(), false)); 1317 new TilingSetRasterQueueAll(tiling_set.get(), false));
1317 for (; !queue->IsEmpty(); queue->Pop()) { 1318 for (; !queue->IsEmpty(); queue->Pop()) {
1318 if (!last_tile) 1319 if (!last_tile.tile())
1319 last_tile = queue->Top(); 1320 last_tile = queue->Top();
1320 1321
1321 Tile* new_tile = queue->Top(); 1322 const PrioritizedTile& new_tile = queue->Top();
1322 1323
1323 TilePriority last_priority = last_tile->priority(); 1324 TilePriority last_priority = last_tile.priority();
1324 TilePriority new_priority = new_tile->priority(); 1325 TilePriority new_priority = new_tile.priority();
1325 1326
1326 have_tiles[new_priority.priority_bin] = true; 1327 have_tiles[new_priority.priority_bin] = true;
1327 1328
1328 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin); 1329 EXPECT_LE(last_priority.priority_bin, new_priority.priority_bin);
1329 if (last_priority.priority_bin == new_priority.priority_bin) { 1330 if (last_priority.priority_bin == new_priority.priority_bin) {
1330 if (last_priority.priority_bin == TilePriority::EVENTUALLY) { 1331 if (last_priority.priority_bin == TilePriority::EVENTUALLY) {
1331 bool order_correct = last_priority.distance_to_visible <= 1332 bool order_correct = last_priority.distance_to_visible <=
1332 new_priority.distance_to_visible; 1333 new_priority.distance_to_visible;
1333 eventually_bin_order_correct_count += order_correct; 1334 eventually_bin_order_correct_count += order_correct;
1334 eventually_bin_order_incorrect_count += !order_correct; 1335 eventually_bin_order_incorrect_count += !order_correct;
1335 } else if (!soon_rect.Intersects(new_tile->content_rect()) && 1336 } else if (!soon_rect.Intersects(new_tile.tile()->content_rect()) &&
1336 !soon_rect.Intersects(last_tile->content_rect())) { 1337 !soon_rect.Intersects(last_tile.tile()->content_rect())) {
1337 EXPECT_LE(last_priority.distance_to_visible, 1338 EXPECT_LE(last_priority.distance_to_visible,
1338 new_priority.distance_to_visible); 1339 new_priority.distance_to_visible);
1339 } else if (new_priority.distance_to_visible > 0.f) { 1340 } else if (new_priority.distance_to_visible > 0.f) {
1340 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin); 1341 EXPECT_EQ(TilePriority::SOON, new_priority.priority_bin);
1341 } 1342 }
1342 } 1343 }
1343 last_tile = new_tile; 1344 last_tile = new_tile;
1344 } 1345 }
1345 1346
1346 EXPECT_GT(eventually_bin_order_correct_count, 1347 EXPECT_GT(eventually_bin_order_correct_count,
1347 eventually_bin_order_incorrect_count); 1348 eventually_bin_order_incorrect_count);
1348 1349
1349 EXPECT_TRUE(have_tiles[TilePriority::NOW]); 1350 EXPECT_TRUE(have_tiles[TilePriority::NOW]);
1350 EXPECT_TRUE(have_tiles[TilePriority::SOON]); 1351 EXPECT_TRUE(have_tiles[TilePriority::SOON]);
1351 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]); 1352 EXPECT_TRUE(have_tiles[TilePriority::EVENTUALLY]);
1352 } 1353 }
1353 1354
1354 TEST_F(TileManagerTilePriorityQueueTest, SetIsLikelyToRequireADraw) { 1355 TEST_F(TileManagerTilePriorityQueueTest, SetIsLikelyToRequireADraw) {
1355 const gfx::Size layer_bounds(1000, 1000); 1356 const gfx::Size layer_bounds(1000, 1000);
1356 host_impl_.SetViewportSize(layer_bounds); 1357 host_impl_.SetViewportSize(layer_bounds);
1357 SetupDefaultTrees(layer_bounds); 1358 SetupDefaultTrees(layer_bounds);
1358 1359
1359 // Verify that the queue has a required for draw tile at Top. 1360 // Verify that the queue has a required for draw tile at Top.
1360 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 1361 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
1361 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 1362 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1362 EXPECT_FALSE(queue->IsEmpty()); 1363 EXPECT_FALSE(queue->IsEmpty());
1363 EXPECT_TRUE(queue->Top()->required_for_draw()); 1364 EXPECT_TRUE(queue->Top().tile()->required_for_draw());
1364 1365
1365 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw()); 1366 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw());
1366 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state()); 1367 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state());
1367 EXPECT_TRUE(host_impl_.is_likely_to_require_a_draw()); 1368 EXPECT_TRUE(host_impl_.is_likely_to_require_a_draw());
1368 } 1369 }
1369 1370
1370 TEST_F(TileManagerTilePriorityQueueTest, 1371 TEST_F(TileManagerTilePriorityQueueTest,
1371 SetIsLikelyToRequireADrawOnZeroMemoryBudget) { 1372 SetIsLikelyToRequireADrawOnZeroMemoryBudget) {
1372 const gfx::Size layer_bounds(1000, 1000); 1373 const gfx::Size layer_bounds(1000, 1000);
1373 host_impl_.SetViewportSize(layer_bounds); 1374 host_impl_.SetViewportSize(layer_bounds);
1374 SetupDefaultTrees(layer_bounds); 1375 SetupDefaultTrees(layer_bounds);
1375 1376
1376 // Verify that the queue has a required for draw tile at Top. 1377 // Verify that the queue has a required for draw tile at Top.
1377 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 1378 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
1378 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 1379 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1379 EXPECT_FALSE(queue->IsEmpty()); 1380 EXPECT_FALSE(queue->IsEmpty());
1380 EXPECT_TRUE(queue->Top()->required_for_draw()); 1381 EXPECT_TRUE(queue->Top().tile()->required_for_draw());
1381 1382
1382 ManagedMemoryPolicy policy = host_impl_.ActualManagedMemoryPolicy(); 1383 ManagedMemoryPolicy policy = host_impl_.ActualManagedMemoryPolicy();
1383 policy.bytes_limit_when_visible = 0; 1384 policy.bytes_limit_when_visible = 0;
1384 host_impl_.SetMemoryPolicy(policy); 1385 host_impl_.SetMemoryPolicy(policy);
1385 1386
1386 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw()); 1387 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw());
1387 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state()); 1388 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state());
1388 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw()); 1389 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw());
1389 } 1390 }
1390 1391
1391 TEST_F(TileManagerTilePriorityQueueTest, 1392 TEST_F(TileManagerTilePriorityQueueTest,
1392 SetIsLikelyToRequireADrawOnLimitedMemoryBudget) { 1393 SetIsLikelyToRequireADrawOnLimitedMemoryBudget) {
1393 const gfx::Size layer_bounds(1000, 1000); 1394 const gfx::Size layer_bounds(1000, 1000);
1394 host_impl_.SetViewportSize(layer_bounds); 1395 host_impl_.SetViewportSize(layer_bounds);
1395 SetupDefaultTrees(layer_bounds); 1396 SetupDefaultTrees(layer_bounds);
1396 1397
1397 // Verify that the queue has a required for draw tile at Top. 1398 // Verify that the queue has a required for draw tile at Top.
1398 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue( 1399 scoped_ptr<RasterTilePriorityQueue> queue(host_impl_.BuildRasterQueue(
1399 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL)); 1400 SAME_PRIORITY_FOR_BOTH_TREES, RasterTilePriorityQueue::Type::ALL));
1400 EXPECT_FALSE(queue->IsEmpty()); 1401 EXPECT_FALSE(queue->IsEmpty());
1401 EXPECT_TRUE(queue->Top()->required_for_draw()); 1402 EXPECT_TRUE(queue->Top().tile()->required_for_draw());
1402 EXPECT_EQ(gfx::Size(256, 256), queue->Top()->desired_texture_size()); 1403 EXPECT_EQ(gfx::Size(256, 256), queue->Top().tile()->desired_texture_size());
1403 EXPECT_EQ(RGBA_8888, host_impl_.resource_provider()->best_texture_format()); 1404 EXPECT_EQ(RGBA_8888, host_impl_.resource_provider()->best_texture_format());
1404 1405
1405 ManagedMemoryPolicy policy = host_impl_.ActualManagedMemoryPolicy(); 1406 ManagedMemoryPolicy policy = host_impl_.ActualManagedMemoryPolicy();
1406 policy.bytes_limit_when_visible = 1407 policy.bytes_limit_when_visible =
1407 Resource::MemorySizeBytes(gfx::Size(256, 256), RGBA_8888); 1408 Resource::MemorySizeBytes(gfx::Size(256, 256), RGBA_8888);
1408 host_impl_.SetMemoryPolicy(policy); 1409 host_impl_.SetMemoryPolicy(policy);
1409 1410
1410 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw()); 1411 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw());
1411 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state()); 1412 host_impl_.tile_manager()->PrepareTiles(host_impl_.global_tile_state());
1412 EXPECT_TRUE(host_impl_.is_likely_to_require_a_draw()); 1413 EXPECT_TRUE(host_impl_.is_likely_to_require_a_draw());
1413 1414
1414 scoped_ptr<ScopedResource> resource = 1415 scoped_ptr<ScopedResource> resource =
1415 host_impl_.resource_pool()->AcquireResource(gfx::Size(256, 256), 1416 host_impl_.resource_pool()->AcquireResource(gfx::Size(256, 256),
1416 RGBA_8888); 1417 RGBA_8888);
1417 1418
1418 host_impl_.tile_manager()->CheckIfMoreTilesNeedToBePreparedForTesting(); 1419 host_impl_.tile_manager()->CheckIfMoreTilesNeedToBePreparedForTesting();
1419 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw()); 1420 EXPECT_FALSE(host_impl_.is_likely_to_require_a_draw());
1420 1421
1421 host_impl_.resource_pool()->ReleaseResource(resource.Pass()); 1422 host_impl_.resource_pool()->ReleaseResource(resource.Pass());
1422 } 1423 }
1423 1424
1424 } // namespace 1425 } // namespace
1425 } // namespace cc 1426 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_perftest.cc ('k') | cc/resources/tiling_set_eviction_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698