| Index: cc/layers/picture_layer_impl_unittest.cc
|
| diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
|
| index cdd0b92de09c29b7da448d0bfaf5c2332f0913fa..5c235349600ca33fe26ccf0a4a0ea963d8fe265c 100644
|
| --- a/cc/layers/picture_layer_impl_unittest.cc
|
| +++ b/cc/layers/picture_layer_impl_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include <set>
|
| #include <utility>
|
|
|
| +#include "cc/base/math_util.h"
|
| #include "cc/layers/append_quads_data.h"
|
| #include "cc/layers/picture_layer.h"
|
| #include "cc/quads/draw_quad.h"
|
| @@ -302,6 +303,103 @@ TEST_F(PictureLayerImplTest, CloneNoInvalidation) {
|
| VerifyAllTilesExistAndHavePile(tilings->tiling_at(i), active_pile.get());
|
| }
|
|
|
| +TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) {
|
| + base::TimeTicks time_ticks;
|
| + host_impl_.SetCurrentFrameTimeTicks(time_ticks);
|
| + gfx::Size tile_size(100, 100);
|
| + gfx::Size layer_bounds(400, 400);
|
| +
|
| + scoped_refptr<FakePicturePileImpl> pending_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| + scoped_refptr<FakePicturePileImpl> active_pile =
|
| + FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
|
| +
|
| + SetupTrees(pending_pile, active_pile);
|
| +
|
| + Region invalidation;
|
| + AddDefaultTilingsWithInvalidation(invalidation);
|
| + SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false);
|
| +
|
| + // Update tiles with viewport for tile priority as (0, 0, 100, 100) and the
|
| + // identify transform for tile priority.
|
| + bool resourceless_software_draw = false;
|
| + gfx::Rect viewport = gfx::Rect(layer_bounds),
|
| + viewport_rect_for_tile_priority = gfx::Rect(0, 0, 100, 100);
|
| + gfx::Transform transform, transform_for_tile_priority;
|
| +
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport_rect_for_tile_priority,
|
| + transform_for_tile_priority,
|
| + resourceless_software_draw);
|
| + active_layer_->draw_properties().visible_content_rect = viewport;
|
| + active_layer_->draw_properties().screen_space_transform = transform;
|
| + active_layer_->UpdateTiles(NULL);
|
| +
|
| + gfx::Rect viewport_rect_for_tile_priority_in_view_space =
|
| + viewport_rect_for_tile_priority;
|
| +
|
| + // Verify the viewport rect for tile priority is used in picture layer impl.
|
| + EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
|
| + viewport_rect_for_tile_priority_in_view_space);
|
| +
|
| + // Verify the viewport rect for tile priority is used in picture layer tiling.
|
| + PictureLayerTilingSet* tilings = active_layer_->tilings();
|
| + for (size_t i = 0; i < tilings->num_tilings(); i++) {
|
| + PictureLayerTiling* tiling = tilings->tiling_at(i);
|
| + EXPECT_EQ(
|
| + tiling->GetCurrentVisibleRectForTesting(),
|
| + gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
|
| + tiling->contents_scale()));
|
| + }
|
| +
|
| + // Update tiles with viewport for tile priority as (200, 200, 100, 100) in
|
| + // screen space and the transform for tile priority is translated and
|
| + // rotated. The actual viewport for tile priority used by PictureLayerImpl
|
| + // should be (200, 200, 100, 100) applied with the said transform.
|
| + time_ticks += base::TimeDelta::FromMilliseconds(200);
|
| + host_impl_.SetCurrentFrameTimeTicks(time_ticks);
|
| +
|
| + viewport_rect_for_tile_priority = gfx::Rect(200, 200, 100, 100);
|
| + transform_for_tile_priority.Translate(100, 100);
|
| + transform_for_tile_priority.Rotate(45);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport_rect_for_tile_priority,
|
| + transform_for_tile_priority,
|
| + resourceless_software_draw);
|
| + active_layer_->draw_properties().visible_content_rect = viewport;
|
| + active_layer_->draw_properties().screen_space_transform = transform;
|
| + active_layer_->UpdateTiles(NULL);
|
| +
|
| + gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization);
|
| + bool success = transform_for_tile_priority.GetInverse(&screen_to_view);
|
| + EXPECT_TRUE(success);
|
| +
|
| + viewport_rect_for_tile_priority_in_view_space =
|
| + gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
|
| + screen_to_view, viewport_rect_for_tile_priority));
|
| +
|
| + // Verify the viewport rect for tile priority is used in PictureLayerImpl.
|
| + EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(),
|
| + viewport_rect_for_tile_priority_in_view_space);
|
| +
|
| + // Interset viewport_rect_for_tile_priority_in_view_space with the layer
|
| + // bounds and the result should be used in PictureLayerTiling.
|
| + viewport_rect_for_tile_priority_in_view_space.Intersect(
|
| + gfx::Rect(layer_bounds));
|
| + tilings = active_layer_->tilings();
|
| + for (size_t i = 0; i < tilings->num_tilings(); i++) {
|
| + PictureLayerTiling* tiling = tilings->tiling_at(i);
|
| + EXPECT_EQ(
|
| + tiling->GetCurrentVisibleRectForTesting(),
|
| + gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space,
|
| + tiling->contents_scale()));
|
| + }
|
| +}
|
| +
|
| TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| base::TimeTicks time_ticks;
|
| host_impl_.SetCurrentFrameTimeTicks(time_ticks);
|
| @@ -326,8 +424,12 @@ TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| bool resourceless_software_draw = false;
|
| gfx::Rect viewport = gfx::Rect(layer_bounds);
|
| gfx::Transform transform;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->draw_properties().visible_content_rect = viewport;
|
| active_layer_->draw_properties().screen_space_transform = transform;
|
| active_layer_->UpdateTiles(NULL);
|
| @@ -335,9 +437,9 @@ TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| gfx::Rect visible_rect_for_tile_priority =
|
| active_layer_->visible_rect_for_tile_priority();
|
| EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
|
| - gfx::Size viewport_size_for_tile_priority =
|
| - active_layer_->viewport_size_for_tile_priority();
|
| - EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty());
|
| + gfx::Rect viewport_rect_for_tile_priority =
|
| + active_layer_->viewport_rect_for_tile_priority();
|
| + EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
|
| gfx::Transform screen_space_transform_for_tile_priority =
|
| active_layer_->screen_space_transform_for_tile_priority();
|
|
|
| @@ -350,14 +452,18 @@ TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| transform.Translate(1.f, 1.f);
|
| active_layer_->draw_properties().visible_content_rect = viewport;
|
| active_layer_->draw_properties().screen_space_transform = transform;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->UpdateTiles(NULL);
|
|
|
| EXPECT_RECT_EQ(visible_rect_for_tile_priority,
|
| active_layer_->visible_rect_for_tile_priority());
|
| - EXPECT_SIZE_EQ(viewport_size_for_tile_priority,
|
| - active_layer_->viewport_size_for_tile_priority());
|
| + EXPECT_RECT_EQ(viewport_rect_for_tile_priority,
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| EXPECT_TRANSFORMATION_MATRIX_EQ(
|
| screen_space_transform_for_tile_priority,
|
| active_layer_->screen_space_transform_for_tile_priority());
|
| @@ -366,14 +472,18 @@ TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| time_ticks += base::TimeDelta::FromMilliseconds(200);
|
| host_impl_.SetCurrentFrameTimeTicks(time_ticks);
|
| resourceless_software_draw = false;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->UpdateTiles(NULL);
|
|
|
| EXPECT_FALSE(visible_rect_for_tile_priority ==
|
| active_layer_->visible_rect_for_tile_priority());
|
| - EXPECT_FALSE(viewport_size_for_tile_priority ==
|
| - active_layer_->viewport_size_for_tile_priority());
|
| + EXPECT_FALSE(viewport_rect_for_tile_priority ==
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| EXPECT_FALSE(screen_space_transform_for_tile_priority ==
|
| active_layer_->screen_space_transform_for_tile_priority());
|
| }
|
| @@ -397,8 +507,13 @@ TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) {
|
|
|
| bool resourceless_software_draw = true;
|
| gfx::Rect viewport = gfx::Rect(layer_bounds);
|
| - host_impl_.SetExternalDrawConstraints(
|
| - gfx::Transform(), viewport, viewport, resourceless_software_draw);
|
| + gfx::Transform identity = gfx::Transform();
|
| + host_impl_.SetExternalDrawConstraints(identity,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + identity,
|
| + resourceless_software_draw);
|
| ResetTilingsAndRasterScales();
|
| host_impl_.pending_tree()->UpdateDrawProperties();
|
| host_impl_.active_tree()->UpdateDrawProperties();
|
| @@ -2577,8 +2692,12 @@ TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| bool resourceless_software_draw = false;
|
| gfx::Rect viewport = gfx::Rect(layer_bounds);
|
| gfx::Transform transform;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->draw_properties().visible_content_rect = viewport;
|
| active_layer_->draw_properties().screen_space_transform = transform;
|
| active_layer_->UpdateTiles(NULL);
|
| @@ -2586,9 +2705,9 @@ TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| gfx::Rect visible_rect_for_tile_priority =
|
| active_layer_->visible_rect_for_tile_priority();
|
| EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
|
| - gfx::Size viewport_size_for_tile_priority =
|
| - active_layer_->viewport_size_for_tile_priority();
|
| - EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty());
|
| + gfx::Rect viewport_rect_for_tile_priority =
|
| + active_layer_->viewport_rect_for_tile_priority();
|
| + EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty());
|
| gfx::Transform screen_space_transform_for_tile_priority =
|
| active_layer_->screen_space_transform_for_tile_priority();
|
|
|
| @@ -2601,14 +2720,18 @@ TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| transform.Translate(1.f, 1.f);
|
| active_layer_->draw_properties().visible_content_rect = viewport;
|
| active_layer_->draw_properties().screen_space_transform = transform;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->UpdateTiles(NULL);
|
|
|
| EXPECT_RECT_EQ(visible_rect_for_tile_priority,
|
| active_layer_->visible_rect_for_tile_priority());
|
| - EXPECT_SIZE_EQ(viewport_size_for_tile_priority,
|
| - active_layer_->viewport_size_for_tile_priority());
|
| + EXPECT_RECT_EQ(viewport_rect_for_tile_priority,
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| EXPECT_TRANSFORMATION_MATRIX_EQ(
|
| screen_space_transform_for_tile_priority,
|
| active_layer_->screen_space_transform_for_tile_priority());
|
| @@ -2617,14 +2740,18 @@ TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
|
| time_ticks += base::TimeDelta::FromMilliseconds(200);
|
| host_impl_.SetCurrentFrameTimeTicks(time_ticks);
|
| resourceless_software_draw = false;
|
| - host_impl_.SetExternalDrawConstraints(
|
| - transform, viewport, viewport, resourceless_software_draw);
|
| + host_impl_.SetExternalDrawConstraints(transform,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + transform,
|
| + resourceless_software_draw);
|
| active_layer_->UpdateTiles(NULL);
|
|
|
| EXPECT_FALSE(visible_rect_for_tile_priority ==
|
| active_layer_->visible_rect_for_tile_priority());
|
| - EXPECT_FALSE(viewport_size_for_tile_priority ==
|
| - active_layer_->viewport_size_for_tile_priority());
|
| + EXPECT_FALSE(viewport_rect_for_tile_priority ==
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| EXPECT_FALSE(screen_space_transform_for_tile_priority ==
|
| active_layer_->screen_space_transform_for_tile_priority());
|
| }
|
| @@ -2648,8 +2775,13 @@ TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) {
|
|
|
| bool resourceless_software_draw = true;
|
| gfx::Rect viewport = gfx::Rect(layer_bounds);
|
| - host_impl_.SetExternalDrawConstraints(
|
| - gfx::Transform(), viewport, viewport, resourceless_software_draw);
|
| + gfx::Transform identity = gfx::Transform();
|
| + host_impl_.SetExternalDrawConstraints(identity,
|
| + viewport,
|
| + viewport,
|
| + viewport,
|
| + identity,
|
| + resourceless_software_draw);
|
| ResetTilingsAndRasterScales();
|
| host_impl_.pending_tree()->UpdateDrawProperties();
|
| host_impl_.active_tree()->UpdateDrawProperties();
|
|
|