summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-24 21:37:36 +0000
committerBo Liu <boliu@google.com>2014-06-25 08:39:49 -0700
commit21f72d39fdcd06983f7460f2c2e82d9287549915 (patch)
tree49c60a0aed4eb607a133d7bac86069281a3fdb0e
parent770300fb3fec927eb702b146c92281093e917c72 (diff)
downloadchromium_org-21f72d39fdcd06983f7460f2c2e82d9287549915.tar.gz
Cherry-pick: cc: Update draw if external draw constraints change
Cherry-pick of chromium r279497 BUG: 15771111 Change-Id: I64ab8eb88df737ab5b9f40a6113efd9a20984c5b
-rw-r--r--cc/trees/layer_tree_host_impl.cc4
-rw-r--r--cc/trees/layer_tree_host_impl_unittest.cc26
2 files changed, 30 insertions, 0 deletions
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index c3ea500050..5417a6a031 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1311,6 +1311,10 @@ void LayerTreeHostImpl::SetExternalDrawConstraints(
const gfx::Rect& viewport,
const gfx::Rect& clip,
bool valid_for_tile_management) {
+ if (external_transform_ != transform || external_viewport_ != viewport) {
+ active_tree_->set_needs_update_draw_properties();
+ }
+
external_transform_ = transform;
external_viewport_ = viewport;
external_clip_ = clip;
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index f415c51afe..9ada4029bb 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -6573,5 +6573,31 @@ TEST_F(LayerTreeHostImplWithImplicitLimitsTest, ImplicitMemoryLimits) {
150u * 1024u * 1024u);
}
+TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) {
+ const gfx::Size layer_size(100, 100);
+ gfx::Transform external_transform;
+ const gfx::Rect external_viewport(layer_size);
+ const gfx::Rect external_clip(layer_size);
+ const bool valid_for_tile_management = true;
+ LayerImpl* layer = SetupScrollAndContentsLayers(layer_size);
+
+ host_impl_->SetExternalDrawConstraints(external_transform,
+ external_viewport,
+ external_clip,
+ valid_for_tile_management);
+ DrawFrame();
+ EXPECT_TRANSFORMATION_MATRIX_EQ(
+ external_transform, layer->draw_properties().target_space_transform);
+
+ external_transform.Translate(20, 20);
+ host_impl_->SetExternalDrawConstraints(external_transform,
+ external_viewport,
+ external_clip,
+ valid_for_tile_management);
+ DrawFrame();
+ EXPECT_TRANSFORMATION_MATRIX_EQ(
+ external_transform, layer->draw_properties().target_space_transform);
+}
+
} // namespace
} // namespace cc