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

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: Rebase. 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..bb66b2053f9376352f73014213dd8977950b3c8f 100644
--- a/cc/trees/layer_tree_host_unittest_damage.cc
+++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -12,6 +12,7 @@
#include "cc/test/fake_content_layer.h"
#include "cc/test/fake_content_layer_client.h"
#include "cc/test/fake_painted_scrollbar_layer.h"
+#include "cc/test/fake_picture_layer.h"
#include "cc/test/layer_tree_test.h"
#include "cc/trees/damage_tracker.h"
#include "cc/trees/layer_tree_impl.h"
@@ -688,5 +689,102 @@ class LayerTreeHostDamageTestScrollbarCommitDoesNoDamage
MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage);
+class LayerTreeHostDamageTestVisibleTilesStillTriggerDraws
+ : public LayerTreeHostDamageTest {
+
+ virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
+ settings->impl_side_painting = true;
+ }
+
+ virtual void BeginTest() OVERRIDE {
+ PostSetNeedsCommitToMainThread();
+ }
+
+ virtual void SetupTree() OVERRIDE {
+ scoped_refptr<FakePictureLayer> root = FakePictureLayer::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();
+ break;
+ 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 ensure we still get UpdateVisibleTiles calls after
+ // a no-damage or aborted frame.
+ update_visible_tile_count_++;
+ switch (update_visible_tile_count_) {
+ case 3:
+ case 6:
+ host_impl->DidInitializeVisibleTileForTesting();
+ break;
+ case 7:
+ NOTREACHED();
+ break;
+ }
+ }
+
+ virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
+ bool didSwap) OVERRIDE {
+ if (!didSwap)
+ return;
+ ++swap_count_;
+ }
+
+ virtual void AfterTest() OVERRIDE {
+ // We should keep getting update-visible-tiles calls
+ // until we report there are no more incomplete-tiles.
+ EXPECT_EQ(update_visible_tile_count_, 6);
+ // First frame, plus two triggered by DidInitializeVisibleTile()
+ EXPECT_EQ(prepare_to_draw_count_, 3);
+ // First swap, plus final swap (contained damage).
+ EXPECT_EQ(swap_count_, 2);
+ }
+
+ FakeContentLayerClient client_;
+ int swap_count_;
+ int prepare_to_draw_count_;
+ int update_visible_tile_count_;
+};
+
+MULTI_THREAD_TEST_F(LayerTreeHostDamageTestVisibleTilesStillTriggerDraws);
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698