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

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 394113002: Tiling priorities in Android Webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: better fix Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698