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

Unified Diff: cc/trees/layer_tree_host_unittest_damage.cc

Issue 23686011: CC: Fix missing swap-used-incomplete-tile updates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test. Created 7 years, 3 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
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

Powered by Google App Engine
This is Rietveld 408576698