Index: cc/trees/layer_tree_host_unittest_damage.cc |
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc |
index 9c61b11c999a31849670bfe8e036f951d654a1d7..002938e59cfbd258c45013db08831ddf2d0773ae 100644 |
--- a/cc/trees/layer_tree_host_unittest_damage.cc |
+++ b/cc/trees/layer_tree_host_unittest_damage.cc |
@@ -688,5 +688,104 @@ class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage |
MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); |
+class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws |
+ : public LayerTreeHostDamageTest { |
+ |
+ virtual void BeginTest() OVERRIDE { |
+ if (!settings_.impl_side_painting) { |
brianderson
2013/09/07 00:50:37
Is there a macro that does not instantiate the Mai
epenner
2013/09/07 00:57:15
Doesn't look like it, and the code to do it is rat
danakj
2013/09/07 00:59:05
Just override InitializeSettings and turn impl pai
epenner
2013/09/07 01:52:23
That seemed less intuitive if it fails. But not ve
|
+ EndTest(); |
+ return; |
+ } |
+ PostSetNeedsCommitToMainThread(); |
+ } |
+ |
+ virtual void SetupTree() OVERRIDE { |
+ root_ = FakeContentLayer::Create(&client_); |
+ root_->SetBounds(gfx::Size(500, 500)); |
+ layer_tree_host()->SetRootLayer(root_); |
+ LayerTreeHostDamageTest::SetupTree(); |
+ |
+ swap_count_ = 0; |
+ prepare_to_draw_count_ = 0; |
+ update_visible_tile_count_ = 0; |
+ } |
+ |
+ virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
+ LayerTreeHostImpl::FrameData* frame_data, |
+ bool result) OVERRIDE { |
+ EXPECT_TRUE(result); |
+ prepare_to_draw_count_++; |
+ switch (prepare_to_draw_count_) { |
+ case 1: |
+ // Detect that we have an incomplete tile, during the first frame. |
+ // The first frame should have damage. |
+ frame_data->contains_incomplete_tile = true; |
+ DCHECK(!frame_data->has_no_damage); |
+ break; |
+ case 2: |
+ // Make a no-damage frame. We early out and can't detect |
+ // incomplete tiles, even if they still exist. |
+ frame_data->contains_incomplete_tile = false; |
+ frame_data->has_no_damage = true; |
+ break; |
+ case 3: |
+ // Trigger the last swap for the completed tile. |
+ frame_data->contains_incomplete_tile = false; |
+ frame_data->has_no_damage = false; |
+ EndTest(); |
+ case 4: |
+ case 5: |
+ case 6: |
+ break; |
brianderson
2013/09/07 00:50:37
Are cases 4-6 needed?
epenner
2013/09/07 00:57:15
Oops. Removed those. Done.
|
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+ |
+ return result; |
+ } |
+ |
+ virtual void UpdateVisibleTilesOnThread( |
+ LayerTreeHostImpl* host_impl) OVERRIDE { |
+ // Simulate creating some visible tiles (that trigger prepare-to-draws). |
+ // The first we make into a no-damage-frame during prepare-to-draw (see |
+ // above). This is to insure we still get UpdateVisibleTiles calls after |
brianderson
2013/09/07 00:50:37
nit: ensure
epenner
2013/09/07 00:57:15
Done.
|
+ // a no-damage or aborted frame. |
+ update_visible_tile_count_++; |
+ switch (update_visible_tile_count_) { |
+ case 3: |
+ case 6: |
+ host_impl->DidInitializeVisibleTile(); |
+ break; |
+ case 7: |
+ NOTREACHED(); |
+ break; |
+ } |
+ } |
+ |
+ virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, |
+ bool didSwap) OVERRIDE { |
+ if (!didSwap) |
+ return; |
+ ++swap_count_; |
+ } |
+ |
+ virtual void AfterTest() OVERRIDE { |
+ if (!settings_.impl_side_painting) |
+ return; |
+ EXPECT_EQ(update_visible_tile_count_, 6); |
+ EXPECT_EQ(prepare_to_draw_count_, 3); |
+ EXPECT_EQ(swap_count_, 2); |
+ } |
+ |
+ FakeContentLayerClient client_; |
+ scoped_refptr<FakeContentLayer> root_; |
+ int swap_count_; |
+ int prepare_to_draw_count_; |
+ int update_visible_tile_count_; |
+}; |
+ |
+MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws); |
+ |
} // namespace |
} // namespace cc |