Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index 68a1f587aa68dfaec95c50d9588beda55e2a9ac7..b74d046ef0944a535fd96aecd615ba6263e5f96c 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -475,6 +475,76 @@ class LayerTreeHostTestSetNeedsRedrawRect : public LayerTreeHostTest { |
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsRedrawRect); |
+// After a viewport size change, max_texture_size on the pending tree must be |
+// updated to the new viewport size. |
+class LayerTreeHostTestGpuRasterDeviceSizeChanged : public LayerTreeHostTest { |
+ public: |
+ LayerTreeHostTestGpuRasterDeviceSizeChanged() |
+ : num_draws_(0), bounds_(500, 64), invalid_rect_(10, 10, 20, 20) {} |
+ |
+ void BeginTest() override { |
+ client_.set_fill_with_nonsolid_color(true); |
+ root_layer_ = FakePictureLayer::Create(&client_); |
+ root_layer_->SetIsDrawable(true); |
+ gfx::Transform transform; |
+ // Translate the layer out of the viewport to force it to not update its |
+ // tile size via PushProperties. |
+ transform.Translate(10000.0, 10000.0); |
+ root_layer_->SetTransform(transform); |
+ root_layer_->SetBounds(bounds_); |
+ layer_tree_host()->SetRootLayer(root_layer_); |
+ layer_tree_host()->SetViewportSize(bounds_); |
+ |
+ PostSetNeedsCommitToMainThread(); |
+ } |
+ |
+ void InitializeSettings(LayerTreeSettings* settings) override { |
+ settings->gpu_rasterization_enabled = true; |
+ settings->gpu_rasterization_forced = true; |
+ } |
+ |
+ void DrawLayersOnThread(LayerTreeHostImpl* impl) override { |
+ // Perform 2 commits. |
+ if (!num_draws_) { |
+ PostSetNeedsRedrawRectToMainThread(invalid_rect_); |
+ } else { |
+ EndTest(); |
+ } |
+ num_draws_++; |
+ } |
+ |
+ void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
+ if (num_draws_ == 2) { |
+ auto pending_tree = host_impl->pending_tree(); |
+ auto pending_root_layer_impl = |
+ static_cast<FakePictureLayerImpl*>(pending_tree->root_layer()); |
+ EXPECT_NE(pending_root_layer_impl, nullptr); |
+ auto tiling_set = pending_root_layer_impl->picture_layer_tiling_set(); |
+ auto tiling = tiling_set->tiling_at(0); |
+ EXPECT_EQ(400, tiling->TilingDataForTesting().max_texture_size().width()); |
+ } |
+ } |
+ |
+ void DidCommitAndDrawFrame() override { |
+ // On the second commit, resize the viewport. |
+ if (num_draws_ == 1) { |
+ layer_tree_host()->SetViewportSize(gfx::Size(400, 64)); |
+ } |
+ } |
+ |
+ void AfterTest() override { EXPECT_EQ(2, num_draws_); } |
+ |
+ private: |
+ int num_draws_; |
+ const gfx::Size bounds_; |
+ const gfx::Rect invalid_rect_; |
+ FakeContentLayerClient client_; |
+ scoped_refptr<FakePictureLayer> root_layer_; |
+}; |
+ |
+MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F( |
+ LayerTreeHostTestGpuRasterDeviceSizeChanged); |
+ |
class LayerTreeHostTestNoExtraCommitFromInvalidate : public LayerTreeHostTest { |
public: |
void InitializeSettings(LayerTreeSettings* settings) override { |