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

Side by Side Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 616543004: cc: Use visible_rect_for_tile_priority_ where approriate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: UpdateTiles Created 6 years, 2 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 float page_scale_factor, 157 float page_scale_factor,
158 float maximum_animation_contents_scale, 158 float maximum_animation_contents_scale,
159 bool animating_transform_to_screen) { 159 bool animating_transform_to_screen) {
160 layer->draw_properties().ideal_contents_scale = ideal_contents_scale; 160 layer->draw_properties().ideal_contents_scale = ideal_contents_scale;
161 layer->draw_properties().device_scale_factor = device_scale_factor; 161 layer->draw_properties().device_scale_factor = device_scale_factor;
162 layer->draw_properties().page_scale_factor = page_scale_factor; 162 layer->draw_properties().page_scale_factor = page_scale_factor;
163 layer->draw_properties().maximum_animation_contents_scale = 163 layer->draw_properties().maximum_animation_contents_scale =
164 maximum_animation_contents_scale; 164 maximum_animation_contents_scale;
165 layer->draw_properties().screen_space_transform_is_animating = 165 layer->draw_properties().screen_space_transform_is_animating =
166 animating_transform_to_screen; 166 animating_transform_to_screen;
167 layer->UpdateTiles(Occlusion()); 167 bool draw_properties_valid_for_tile_priority = true;
168 layer->UpdateTiles(Occlusion(), draw_properties_valid_for_tile_priority);
168 } 169 }
169 static void VerifyAllTilesExistAndHavePile( 170 static void VerifyAllTilesExistAndHavePile(
170 const PictureLayerTiling* tiling, 171 const PictureLayerTiling* tiling,
171 PicturePileImpl* pile) { 172 PicturePileImpl* pile) {
172 for (PictureLayerTiling::CoverageIterator iter( 173 for (PictureLayerTiling::CoverageIterator iter(
173 tiling, 174 tiling,
174 tiling->contents_scale(), 175 tiling->contents_scale(),
175 gfx::Rect(tiling->tiling_size())); 176 gfx::Rect(tiling->tiling_size()));
176 iter; 177 iter;
177 ++iter) { 178 ++iter) {
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 gfx::Transform transform, transform_for_tile_priority; 348 gfx::Transform transform, transform_for_tile_priority;
348 349
349 host_impl_.SetExternalDrawConstraints(transform, 350 host_impl_.SetExternalDrawConstraints(transform,
350 viewport, 351 viewport,
351 viewport, 352 viewport,
352 viewport_rect_for_tile_priority, 353 viewport_rect_for_tile_priority,
353 transform_for_tile_priority, 354 transform_for_tile_priority,
354 resourceless_software_draw); 355 resourceless_software_draw);
355 active_layer_->draw_properties().visible_content_rect = viewport; 356 active_layer_->draw_properties().visible_content_rect = viewport;
356 active_layer_->draw_properties().screen_space_transform = transform; 357 active_layer_->draw_properties().screen_space_transform = transform;
357 active_layer_->UpdateTiles(Occlusion()); 358 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
358 359
359 gfx::Rect viewport_rect_for_tile_priority_in_view_space = 360 gfx::Rect viewport_rect_for_tile_priority_in_view_space =
360 viewport_rect_for_tile_priority; 361 viewport_rect_for_tile_priority;
361 362
362 // Verify the viewport rect for tile priority is used in picture layer impl. 363 // Verify the viewport rect for tile priority is used in picture layer impl.
363 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(), 364 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
364 viewport_rect_for_tile_priority_in_view_space); 365 viewport_rect_for_tile_priority_in_view_space);
365 366
366 // Verify the viewport rect for tile priority is used in picture layer tiling. 367 // Verify the viewport rect for tile priority is used in picture layer tiling.
367 PictureLayerTilingSet* tilings = active_layer_->tilings(); 368 PictureLayerTilingSet* tilings = active_layer_->tilings();
(...skipping 17 matching lines...) Expand all
385 transform_for_tile_priority.Translate(100, 100); 386 transform_for_tile_priority.Translate(100, 100);
386 transform_for_tile_priority.Rotate(45); 387 transform_for_tile_priority.Rotate(45);
387 host_impl_.SetExternalDrawConstraints(transform, 388 host_impl_.SetExternalDrawConstraints(transform,
388 viewport, 389 viewport,
389 viewport, 390 viewport,
390 viewport_rect_for_tile_priority, 391 viewport_rect_for_tile_priority,
391 transform_for_tile_priority, 392 transform_for_tile_priority,
392 resourceless_software_draw); 393 resourceless_software_draw);
393 active_layer_->draw_properties().visible_content_rect = viewport; 394 active_layer_->draw_properties().visible_content_rect = viewport;
394 active_layer_->draw_properties().screen_space_transform = transform; 395 active_layer_->draw_properties().screen_space_transform = transform;
395 active_layer_->UpdateTiles(Occlusion()); 396 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
396 397
397 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); 398 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization);
398 bool success = transform_for_tile_priority.GetInverse(&screen_to_view); 399 bool success = transform_for_tile_priority.GetInverse(&screen_to_view);
399 EXPECT_TRUE(success); 400 EXPECT_TRUE(success);
400 401
401 // Note that we don't clip this to the layer bounds, since it is expected that 402 // Note that we don't clip this to the layer bounds, since it is expected that
402 // the rect will sometimes be outside of the layer bounds. If we clip to 403 // the rect will sometimes be outside of the layer bounds. If we clip to
403 // bounds, then tile priorities will end up being incorrect in cases of fully 404 // bounds, then tile priorities will end up being incorrect in cases of fully
404 // offscreen layer. 405 // offscreen layer.
405 viewport_rect_for_tile_priority_in_view_space = 406 viewport_rect_for_tile_priority_in_view_space =
406 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 407 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
407 screen_to_view, viewport_rect_for_tile_priority)); 408 screen_to_view, viewport_rect_for_tile_priority));
408 409
409 // Verify the viewport rect for tile priority is used in PictureLayerImpl. 410 // Verify the viewport rect for tile priority is used in PictureLayerImpl.
410 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(), 411 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
411 viewport_rect_for_tile_priority_in_view_space); 412 viewport_rect_for_tile_priority_in_view_space);
412 413
413 tilings = active_layer_->tilings(); 414 tilings = active_layer_->tilings();
414 for (size_t i = 0; i < tilings->num_tilings(); i++) { 415 for (size_t i = 0; i < tilings->num_tilings(); i++) {
415 PictureLayerTiling* tiling = tilings->tiling_at(i); 416 PictureLayerTiling* tiling = tilings->tiling_at(i);
416 EXPECT_EQ( 417 EXPECT_EQ(
417 tiling->GetCurrentVisibleRectForTesting(), 418 tiling->GetCurrentVisibleRectForTesting(),
418 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, 419 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
419 tiling->contents_scale())); 420 tiling->contents_scale()));
420 } 421 }
421 } 422 }
422 423
423 TEST_F(PictureLayerImplTest, 424 TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
424 ResourcelessSoftwareDrawHasValidViewportForTilePriority) {
425 base::TimeTicks time_ticks; 425 base::TimeTicks time_ticks;
426 time_ticks += base::TimeDelta::FromMilliseconds(1); 426 time_ticks += base::TimeDelta::FromMilliseconds(1);
427 host_impl_.SetCurrentBeginFrameArgs( 427 host_impl_.SetCurrentBeginFrameArgs(
428 CreateBeginFrameArgsForTesting(time_ticks)); 428 CreateBeginFrameArgsForTesting(time_ticks));
429 429
430 gfx::Size tile_size(100, 100); 430 gfx::Size tile_size(100, 100);
431 gfx::Size layer_bounds(400, 400); 431 gfx::Size layer_bounds(400, 400);
432 432
433 scoped_refptr<FakePicturePileImpl> pending_pile = 433 scoped_refptr<FakePicturePileImpl> pending_pile =
434 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 434 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
435 scoped_refptr<FakePicturePileImpl> active_pile = 435 scoped_refptr<FakePicturePileImpl> active_pile =
436 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 436 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
437 437
438 SetupTrees(pending_pile, active_pile); 438 SetupTrees(pending_pile, active_pile);
439 439
440 Region invalidation; 440 Region invalidation;
441 AddDefaultTilingsWithInvalidation(invalidation); 441 AddDefaultTilingsWithInvalidation(invalidation);
442 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); 442 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false);
443 443
444 // UpdateTiles with valid viewport. Should update tile viewport. 444 // UpdateTiles with valid viewport. Should update tile viewport.
445 // Note viewport is considered invalid if and only if in resourceless
446 // software draw.
445 bool resourceless_software_draw = false; 447 bool resourceless_software_draw = false;
446 gfx::Rect viewport = gfx::Rect(layer_bounds); 448 gfx::Rect viewport = gfx::Rect(layer_bounds);
447 gfx::Transform transform; 449 gfx::Transform transform;
448 host_impl_.SetExternalDrawConstraints(transform, 450 host_impl_.SetExternalDrawConstraints(transform,
449 viewport, 451 viewport,
450 viewport, 452 viewport,
451 viewport, 453 viewport,
452 transform, 454 transform,
453 resourceless_software_draw); 455 resourceless_software_draw);
454 active_layer_->draw_properties().visible_content_rect = viewport; 456 active_layer_->draw_properties().visible_content_rect = viewport;
455 active_layer_->draw_properties().screen_space_transform = transform; 457 active_layer_->draw_properties().screen_space_transform = transform;
456 active_layer_->UpdateTiles(Occlusion()); 458 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
457 459
458 gfx::Rect visible_rect_for_tile_priority = 460 gfx::Rect visible_rect_for_tile_priority =
459 active_layer_->visible_rect_for_tile_priority(); 461 active_layer_->visible_rect_for_tile_priority();
460 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); 462 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
461 gfx::Rect viewport_rect_for_tile_priority = 463 gfx::Rect viewport_rect_for_tile_priority =
462 active_layer_->viewport_rect_for_tile_priority(); 464 active_layer_->viewport_rect_for_tile_priority();
463 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); 465 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
464 gfx::Transform screen_space_transform_for_tile_priority = 466 gfx::Transform screen_space_transform_for_tile_priority =
465 active_layer_->screen_space_transform_for_tile_priority(); 467 active_layer_->screen_space_transform_for_tile_priority();
466 468
467 // PictureLayerImpl does not make a special case for 469 // Expand viewport and set it as invalid for prioritizing tiles.
468 // resource_less_software_draw, so the tile viewport and matrix should be 470 // Should update viewport and transform, but not update visible rect.
469 // respected.
470 time_ticks += base::TimeDelta::FromMilliseconds(200); 471 time_ticks += base::TimeDelta::FromMilliseconds(200);
471 host_impl_.SetCurrentBeginFrameArgs( 472 host_impl_.SetCurrentBeginFrameArgs(
472 CreateBeginFrameArgsForTesting(time_ticks)); 473 CreateBeginFrameArgsForTesting(time_ticks));
473 resourceless_software_draw = true; 474 resourceless_software_draw = true;
474 viewport = gfx::ScaleToEnclosingRect(viewport, 2); 475 viewport = gfx::ScaleToEnclosingRect(viewport, 2);
475 transform.Translate(1.f, 1.f); 476 transform.Translate(1.f, 1.f);
476 active_layer_->draw_properties().visible_content_rect = viewport; 477 active_layer_->draw_properties().visible_content_rect = viewport;
477 active_layer_->draw_properties().screen_space_transform = transform; 478 active_layer_->draw_properties().screen_space_transform = transform;
478 host_impl_.SetExternalDrawConstraints(transform, 479 host_impl_.SetExternalDrawConstraints(transform,
479 viewport, 480 viewport,
480 viewport, 481 viewport,
481 viewport, 482 viewport,
482 transform, 483 transform,
483 resourceless_software_draw); 484 resourceless_software_draw);
484 active_layer_->UpdateTiles(Occlusion()); 485 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
485 486
486 visible_rect_for_tile_priority = 487 // Viewport and transform for tile priority are updated.
487 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); 488 EXPECT_RECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
danakj 2014/10/01 02:05:14 nit: you can EXPECT_EQ instead of EXPECT_RECT_EQ n
488 viewport_rect_for_tile_priority = 489 EXPECT_TRANSFORMATION_MATRIX_EQ(
489 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); 490 transform, active_layer_->screen_space_transform_for_tile_priority());
490 screen_space_transform_for_tile_priority = transform; 491 // Visible rect for tile priority retains old value.
491 EXPECT_RECT_EQ(visible_rect_for_tile_priority, 492 EXPECT_RECT_EQ(visible_rect_for_tile_priority,
492 active_layer_->visible_rect_for_tile_priority()); 493 active_layer_->visible_rect_for_tile_priority());
493 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, 494
494 active_layer_->viewport_rect_for_tile_priority()); 495 // Keep expanded viewport but mark it valid. Should update tile viewport.
496 time_ticks += base::TimeDelta::FromMilliseconds(200);
497 host_impl_.SetCurrentBeginFrameArgs(
498 CreateBeginFrameArgsForTesting(time_ticks));
499 resourceless_software_draw = false;
500 host_impl_.SetExternalDrawConstraints(transform,
501 viewport,
502 viewport,
503 viewport,
504 transform,
505 resourceless_software_draw);
506 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
507
495 EXPECT_TRANSFORMATION_MATRIX_EQ( 508 EXPECT_TRANSFORMATION_MATRIX_EQ(
496 screen_space_transform_for_tile_priority, 509 transform, active_layer_->screen_space_transform_for_tile_priority());
497 active_layer_->screen_space_transform_for_tile_priority()); 510 EXPECT_RECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
511
512 gfx::Rect viewport_rect_in_layer =
513 active_layer_->viewport_rect_for_tile_priority();
514 viewport_rect_in_layer.Offset(1, 1); // Match translate in |transform|.
515 EXPECT_RECT_EQ(viewport, viewport_rect_in_layer);
danakj 2014/10/01 02:05:14 nit: slightly prefer modifying the expected instea
498 } 516 }
499 517
500 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) { 518 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
501 gfx::Size tile_size(100, 100); 519 gfx::Size tile_size(100, 100);
502 gfx::Size layer_bounds(400, 400); 520 gfx::Size layer_bounds(400, 400);
503 gfx::Rect layer_invalidation(150, 200, 30, 180); 521 gfx::Rect layer_invalidation(150, 200, 30, 180);
504 522
505 scoped_refptr<FakePicturePileImpl> pending_pile = 523 scoped_refptr<FakePicturePileImpl> pending_pile =
506 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 524 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
507 scoped_refptr<FakePicturePileImpl> active_pile = 525 scoped_refptr<FakePicturePileImpl> active_pile =
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 } 1430 }
1413 1431
1414 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { 1432 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) {
1415 gfx::Size tile_size(100, 100); 1433 gfx::Size tile_size(100, 100);
1416 gfx::Size layer_bounds(200, 200); 1434 gfx::Size layer_bounds(200, 200);
1417 1435
1418 scoped_refptr<FakePicturePileImpl> pending_pile = 1436 scoped_refptr<FakePicturePileImpl> pending_pile =
1419 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 1437 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
1420 SetupPendingTree(pending_pile); 1438 SetupPendingTree(pending_pile);
1421 1439
1440 gfx::Transform transform;
1441 gfx::Transform transform_for_tile_priority;
1442 bool resourceless_software_draw = false;
1443 gfx::Rect viewport(0, 0, 100, 200);
1444 host_impl_.SetExternalDrawConstraints(transform,
1445 viewport,
1446 viewport,
1447 viewport,
1448 transform,
1449 resourceless_software_draw);
1450
1422 pending_layer_->set_fixed_tile_size(tile_size); 1451 pending_layer_->set_fixed_tile_size(tile_size);
1423 ASSERT_TRUE(pending_layer_->CanHaveTilings()); 1452 ASSERT_TRUE(pending_layer_->CanHaveTilings());
1424 PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f); 1453 PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f);
1425 host_impl_.pending_tree()->UpdateDrawProperties(); 1454 host_impl_.pending_tree()->UpdateDrawProperties();
1426 EXPECT_EQ(tiling->resolution(), HIGH_RESOLUTION); 1455 EXPECT_EQ(tiling->resolution(), HIGH_RESOLUTION);
1427 1456 EXPECT_RECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority());
1428 pending_layer_->draw_properties().visible_content_rect =
1429 gfx::Rect(0, 0, 100, 200);
1430 1457
1431 // Fake set priorities. 1458 // Fake set priorities.
1432 for (PictureLayerTiling::CoverageIterator iter( 1459 for (PictureLayerTiling::CoverageIterator iter(
1433 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); 1460 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds));
1434 iter; 1461 iter;
1435 ++iter) { 1462 ++iter) {
1436 if (!*iter) 1463 if (!*iter)
1437 continue; 1464 continue;
1438 Tile* tile = *iter; 1465 Tile* tile = *iter;
1439 TilePriority priority; 1466 TilePriority priority;
1440 priority.resolution = HIGH_RESOLUTION; 1467 priority.resolution = HIGH_RESOLUTION;
1441 gfx::Rect tile_bounds = iter.geometry_rect(); 1468 gfx::Rect tile_bounds = iter.geometry_rect();
1442 if (pending_layer_->visible_content_rect().Intersects(tile_bounds)) { 1469 if (pending_layer_->visible_rect_for_tile_priority().Intersects(
1470 tile_bounds)) {
1443 priority.priority_bin = TilePriority::NOW; 1471 priority.priority_bin = TilePriority::NOW;
1444 priority.distance_to_visible = 0.f; 1472 priority.distance_to_visible = 0.f;
1445 } else { 1473 } else {
1446 priority.priority_bin = TilePriority::SOON; 1474 priority.priority_bin = TilePriority::SOON;
1447 priority.distance_to_visible = 1.f; 1475 priority.distance_to_visible = 1.f;
1448 } 1476 }
1449 tile->SetPriority(PENDING_TREE, priority); 1477 tile->SetPriority(PENDING_TREE, priority);
1450 } 1478 }
1451 1479
1452 pending_layer_->MarkVisibleResourcesAsRequired(); 1480 pending_layer_->MarkVisibleResourcesAsRequired();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 transform_for_tile_priority, 1536 transform_for_tile_priority,
1509 resourceless_software_draw); 1537 resourceless_software_draw);
1510 host_impl_.pending_tree()->UpdateDrawProperties(); 1538 host_impl_.pending_tree()->UpdateDrawProperties();
1511 1539
1512 // Set visible content rect that is different from 1540 // Set visible content rect that is different from
1513 // external_viewport_for_tile_priority. 1541 // external_viewport_for_tile_priority.
1514 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; 1542 pending_layer_->draw_properties().visible_content_rect = visible_content_rect;
1515 time_ticks += base::TimeDelta::FromMilliseconds(200); 1543 time_ticks += base::TimeDelta::FromMilliseconds(200);
1516 host_impl_.SetCurrentBeginFrameArgs( 1544 host_impl_.SetCurrentBeginFrameArgs(
1517 CreateBeginFrameArgsForTesting(time_ticks)); 1545 CreateBeginFrameArgsForTesting(time_ticks));
1518 pending_layer_->UpdateTiles(Occlusion()); 1546 pending_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
1519 1547
1520 pending_layer_->MarkVisibleResourcesAsRequired(); 1548 pending_layer_->MarkVisibleResourcesAsRequired();
1521 1549
1522 // Intersect the two rects. Any tile outside should not be required for 1550 // Intersect the two rects. Any tile outside should not be required for
1523 // activation. 1551 // activation.
1524 gfx::Rect viewport_for_tile_priority = 1552 gfx::Rect viewport_for_tile_priority =
1525 pending_layer_->GetViewportForTilePriorityInContentSpace(); 1553 pending_layer_->GetViewportForTilePriorityInContentSpace();
1526 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); 1554 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect());
1527 1555
1528 int num_inside = 0; 1556 int num_inside = 0;
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after
2572 EXPECT_EQ(low_res_tile_count + high_res_tile_count + non_ideal_tile_count, 2600 EXPECT_EQ(low_res_tile_count + high_res_tile_count + non_ideal_tile_count,
2573 unique_tiles.size()); 2601 unique_tiles.size());
2574 2602
2575 // No NOW tiles. 2603 // No NOW tiles.
2576 time_ticks += base::TimeDelta::FromMilliseconds(200); 2604 time_ticks += base::TimeDelta::FromMilliseconds(200);
2577 host_impl_.SetCurrentBeginFrameArgs( 2605 host_impl_.SetCurrentBeginFrameArgs(
2578 CreateBeginFrameArgsForTesting(time_ticks)); 2606 CreateBeginFrameArgsForTesting(time_ticks));
2579 2607
2580 pending_layer_->draw_properties().visible_content_rect = 2608 pending_layer_->draw_properties().visible_content_rect =
2581 gfx::Rect(1100, 1100, 500, 500); 2609 gfx::Rect(1100, 1100, 500, 500);
2582 pending_layer_->UpdateTiles(Occlusion()); 2610 bool draw_properties_valid_for_tile_priority = true;
2611 pending_layer_->UpdateTiles(Occlusion(),
2612 draw_properties_valid_for_tile_priority);
2583 2613
2584 unique_tiles.clear(); 2614 unique_tiles.clear();
2585 high_res_tile_count = 0u; 2615 high_res_tile_count = 0u;
2586 for (it = PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false); 2616 for (it = PictureLayerImpl::LayerRasterTileIterator(pending_layer_, false);
2587 it; 2617 it;
2588 ++it) { 2618 ++it) {
2589 Tile* tile = *it; 2619 Tile* tile = *it;
2590 TilePriority priority = tile->priority(PENDING_TREE); 2620 TilePriority priority = tile->priority(PENDING_TREE);
2591 2621
2592 EXPECT_TRUE(tile); 2622 EXPECT_TRUE(tile);
2593 2623
2594 // Non-high res tiles only get visible tiles. 2624 // Non-high res tiles only get visible tiles.
2595 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution); 2625 EXPECT_EQ(HIGH_RESOLUTION, priority.resolution);
2596 EXPECT_NE(TilePriority::NOW, priority.priority_bin); 2626 EXPECT_NE(TilePriority::NOW, priority.priority_bin);
2597 2627
2598 high_res_tile_count += priority.resolution == HIGH_RESOLUTION; 2628 high_res_tile_count += priority.resolution == HIGH_RESOLUTION;
2599 2629
2600 unique_tiles.insert(tile); 2630 unique_tiles.insert(tile);
2601 } 2631 }
2602 2632
2603 EXPECT_EQ(16u, high_res_tile_count); 2633 EXPECT_EQ(16u, high_res_tile_count);
2604 EXPECT_EQ(high_res_tile_count, unique_tiles.size()); 2634 EXPECT_EQ(high_res_tile_count, unique_tiles.size());
2605 2635
2606 time_ticks += base::TimeDelta::FromMilliseconds(200); 2636 time_ticks += base::TimeDelta::FromMilliseconds(200);
2607 host_impl_.SetCurrentBeginFrameArgs( 2637 host_impl_.SetCurrentBeginFrameArgs(
2608 CreateBeginFrameArgsForTesting(time_ticks)); 2638 CreateBeginFrameArgsForTesting(time_ticks));
2609 2639
2610 pending_layer_->draw_properties().visible_content_rect = 2640 pending_layer_->draw_properties().visible_content_rect =
2611 gfx::Rect(0, 0, 500, 500); 2641 gfx::Rect(0, 0, 500, 500);
2612 pending_layer_->UpdateTiles(Occlusion()); 2642 pending_layer_->UpdateTiles(Occlusion(),
2643 draw_properties_valid_for_tile_priority);
2613 2644
2614 std::vector<Tile*> high_res_tiles = high_res_tiling->AllTilesForTesting(); 2645 std::vector<Tile*> high_res_tiles = high_res_tiling->AllTilesForTesting();
2615 for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin(); 2646 for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin();
2616 tile_it != high_res_tiles.end(); 2647 tile_it != high_res_tiles.end();
2617 ++tile_it) { 2648 ++tile_it) {
2618 Tile* tile = *tile_it; 2649 Tile* tile = *tile_it;
2619 ManagedTileState::DrawInfo& draw_info = tile->draw_info(); 2650 ManagedTileState::DrawInfo& draw_info = tile->draw_info();
2620 draw_info.SetSolidColorForTesting(SK_ColorRED); 2651 draw_info.SetSolidColorForTesting(SK_ColorRED);
2621 } 2652 }
2622 2653
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
3123 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); 3154 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u);
3124 3155
3125 // Since the active layer has no tiles at all, the pending layer doesn't 3156 // Since the active layer has no tiles at all, the pending layer doesn't
3126 // need content in order to activate. 3157 // need content in order to activate.
3127 pending_layer_->MarkVisibleResourcesAsRequired(); 3158 pending_layer_->MarkVisibleResourcesAsRequired();
3128 AssertNoTilesRequired(pending_layer_->HighResTiling()); 3159 AssertNoTilesRequired(pending_layer_->HighResTiling());
3129 if (host_impl_.settings().create_low_res_tiling) 3160 if (host_impl_.settings().create_low_res_tiling)
3130 AssertNoTilesRequired(pending_layer_->LowResTiling()); 3161 AssertNoTilesRequired(pending_layer_->LowResTiling());
3131 } 3162 }
3132 3163
3133 TEST_F(NoLowResPictureLayerImplTest, 3164 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
3134 ResourcelessSoftwareDrawHasValidViewportForTilePriority) {
3135 base::TimeTicks time_ticks; 3165 base::TimeTicks time_ticks;
3136 time_ticks += base::TimeDelta::FromMilliseconds(1); 3166 time_ticks += base::TimeDelta::FromMilliseconds(1);
3137 host_impl_.SetCurrentBeginFrameArgs( 3167 host_impl_.SetCurrentBeginFrameArgs(
3138 CreateBeginFrameArgsForTesting(time_ticks)); 3168 CreateBeginFrameArgsForTesting(time_ticks));
3139 3169
3140 gfx::Size tile_size(100, 100); 3170 gfx::Size tile_size(100, 100);
3141 gfx::Size layer_bounds(400, 400); 3171 gfx::Size layer_bounds(400, 400);
3142 3172
3143 scoped_refptr<FakePicturePileImpl> pending_pile = 3173 scoped_refptr<FakePicturePileImpl> pending_pile =
3144 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 3174 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
3145 scoped_refptr<FakePicturePileImpl> active_pile = 3175 scoped_refptr<FakePicturePileImpl> active_pile =
3146 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 3176 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
3147 3177
3148 SetupTrees(pending_pile, active_pile); 3178 SetupTrees(pending_pile, active_pile);
3149 3179
3150 Region invalidation; 3180 Region invalidation;
3151 AddDefaultTilingsWithInvalidation(invalidation); 3181 AddDefaultTilingsWithInvalidation(invalidation);
3152 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); 3182 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false);
3153 3183
3154 // UpdateTiles with valid viewport. Should update tile viewport. 3184 // UpdateTiles with valid viewport. Should update tile viewport.
3185 // Note viewport is considered invalid if and only if in resourceless
3186 // software draw.
3155 bool resourceless_software_draw = false; 3187 bool resourceless_software_draw = false;
3156 gfx::Rect viewport = gfx::Rect(layer_bounds); 3188 gfx::Rect viewport = gfx::Rect(layer_bounds);
3157 gfx::Transform transform; 3189 gfx::Transform transform;
3158 host_impl_.SetExternalDrawConstraints(transform, 3190 host_impl_.SetExternalDrawConstraints(transform,
3159 viewport, 3191 viewport,
3160 viewport, 3192 viewport,
3161 viewport, 3193 viewport,
3162 transform, 3194 transform,
3163 resourceless_software_draw); 3195 resourceless_software_draw);
3164 active_layer_->draw_properties().visible_content_rect = viewport; 3196 active_layer_->draw_properties().visible_content_rect = viewport;
3165 active_layer_->draw_properties().screen_space_transform = transform; 3197 active_layer_->draw_properties().screen_space_transform = transform;
3166 active_layer_->UpdateTiles(Occlusion()); 3198 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
3167 3199
3168 gfx::Rect visible_rect_for_tile_priority = 3200 gfx::Rect visible_rect_for_tile_priority =
3169 active_layer_->visible_rect_for_tile_priority(); 3201 active_layer_->visible_rect_for_tile_priority();
3170 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); 3202 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
3171 gfx::Rect viewport_rect_for_tile_priority = 3203 gfx::Rect viewport_rect_for_tile_priority =
3172 active_layer_->viewport_rect_for_tile_priority(); 3204 active_layer_->viewport_rect_for_tile_priority();
3173 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); 3205 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
3174 gfx::Transform screen_space_transform_for_tile_priority = 3206 gfx::Transform screen_space_transform_for_tile_priority =
3175 active_layer_->screen_space_transform_for_tile_priority(); 3207 active_layer_->screen_space_transform_for_tile_priority();
3176 3208
3177 // PictureLayerImpl does not make a special case for 3209 // Expand viewport and set it as invalid for prioritizing tiles.
3178 // resource_less_software_draw, so the tile viewport and matrix should be 3210 // Should update viewport and transform, but not update visible rect.
3179 // respected.
3180 time_ticks += base::TimeDelta::FromMilliseconds(200); 3211 time_ticks += base::TimeDelta::FromMilliseconds(200);
3181 host_impl_.SetCurrentBeginFrameArgs( 3212 host_impl_.SetCurrentBeginFrameArgs(
3182 CreateBeginFrameArgsForTesting(time_ticks)); 3213 CreateBeginFrameArgsForTesting(time_ticks));
3183 resourceless_software_draw = true; 3214 resourceless_software_draw = true;
3184 viewport = gfx::ScaleToEnclosingRect(viewport, 2); 3215 viewport = gfx::ScaleToEnclosingRect(viewport, 2);
3185 transform.Translate(1.f, 1.f); 3216 transform.Translate(1.f, 1.f);
3186 active_layer_->draw_properties().visible_content_rect = viewport; 3217 active_layer_->draw_properties().visible_content_rect = viewport;
3187 active_layer_->draw_properties().screen_space_transform = transform; 3218 active_layer_->draw_properties().screen_space_transform = transform;
3188 host_impl_.SetExternalDrawConstraints(transform, 3219 host_impl_.SetExternalDrawConstraints(transform,
3189 viewport, 3220 viewport,
3190 viewport, 3221 viewport,
3191 viewport, 3222 viewport,
3192 transform, 3223 transform,
3193 resourceless_software_draw); 3224 resourceless_software_draw);
3194 active_layer_->UpdateTiles(Occlusion()); 3225 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
3195 3226
3196 visible_rect_for_tile_priority = 3227 // Viewport and transform for tile priority are updated.
3197 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); 3228 EXPECT_RECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
3198 viewport_rect_for_tile_priority = 3229 EXPECT_TRANSFORMATION_MATRIX_EQ(
3199 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); 3230 transform, active_layer_->screen_space_transform_for_tile_priority());
3200 screen_space_transform_for_tile_priority = transform; 3231 // Visible rect for tile priority retains old value.
3201
3202 EXPECT_RECT_EQ(visible_rect_for_tile_priority, 3232 EXPECT_RECT_EQ(visible_rect_for_tile_priority,
3203 active_layer_->visible_rect_for_tile_priority()); 3233 active_layer_->visible_rect_for_tile_priority());
3204 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, 3234
3205 active_layer_->viewport_rect_for_tile_priority()); 3235 // Keep expanded viewport but mark it valid. Should update tile viewport.
3236 time_ticks += base::TimeDelta::FromMilliseconds(200);
3237 host_impl_.SetCurrentBeginFrameArgs(
3238 CreateBeginFrameArgsForTesting(time_ticks));
3239 resourceless_software_draw = false;
3240 host_impl_.SetExternalDrawConstraints(transform,
3241 viewport,
3242 viewport,
3243 viewport,
3244 transform,
3245 resourceless_software_draw);
3246 active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw);
3247
3206 EXPECT_TRANSFORMATION_MATRIX_EQ( 3248 EXPECT_TRANSFORMATION_MATRIX_EQ(
3207 screen_space_transform_for_tile_priority, 3249 transform, active_layer_->screen_space_transform_for_tile_priority());
3208 active_layer_->screen_space_transform_for_tile_priority()); 3250 EXPECT_RECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
3251
3252 gfx::Rect viewport_rect_in_layer =
3253 active_layer_->viewport_rect_for_tile_priority();
3254 viewport_rect_in_layer.Offset(1, 1); // Match translate in |transform|.
3255 EXPECT_RECT_EQ(viewport, viewport_rect_in_layer);
3209 } 3256 }
3210 3257
3211 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) { 3258 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) {
3212 gfx::Size tile_size(400, 400); 3259 gfx::Size tile_size(400, 400);
3213 gfx::Size layer_bounds(1300, 1900); 3260 gfx::Size layer_bounds(1300, 1900);
3214 3261
3215 scoped_refptr<FakePicturePileImpl> pending_pile = 3262 scoped_refptr<FakePicturePileImpl> pending_pile =
3216 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 3263 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
3217 scoped_refptr<FakePicturePileImpl> active_pile = 3264 scoped_refptr<FakePicturePileImpl> active_pile =
3218 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); 3265 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
(...skipping 1139 matching lines...) Expand 10 before | Expand all | Expand 10 after
4358 SetupPendingTree(pending_pile2); 4405 SetupPendingTree(pending_pile2);
4359 ActivateTree(); 4406 ActivateTree();
4360 4407
4361 // We've switched to a solid color, so we should end up with no tilings. 4408 // We've switched to a solid color, so we should end up with no tilings.
4362 ASSERT_TRUE(active_layer_->tilings()); 4409 ASSERT_TRUE(active_layer_->tilings());
4363 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); 4410 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings());
4364 } 4411 }
4365 4412
4366 } // namespace 4413 } // namespace
4367 } // namespace cc 4414 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698