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

Side by Side Diff: cc/trees/layer_tree_host_unittest.cc

Issue 12662021: cc: Don't draw and swap if the frame will not change. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host_perftest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/synchronization/lock.h" 9 #include "base/synchronization/lock.h"
10 #include "cc/animation/timing_function.h" 10 #include "cc/animation/timing_function.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 113
114 // A setNeedsCommit should lead to 1 commit. Issuing a second commit after that 114 // A setNeedsCommit should lead to 1 commit. Issuing a second commit after that
115 // first committed frame draws should lead to another commit. 115 // first committed frame draws should lead to another commit.
116 class LayerTreeHostTestSetNeedsCommit2 : public LayerTreeHostTest { 116 class LayerTreeHostTestSetNeedsCommit2 : public LayerTreeHostTest {
117 public: 117 public:
118 LayerTreeHostTestSetNeedsCommit2() : num_commits_(0), num_draws_(0) {} 118 LayerTreeHostTestSetNeedsCommit2() : num_commits_(0), num_draws_(0) {}
119 119
120 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } 120 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
121 121
122 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { 122 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
123 ++num_draws_;
124 }
125
126 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
127 ++num_commits_;
123 if (impl->active_tree()->source_frame_number() == 0) 128 if (impl->active_tree()->source_frame_number() == 0)
124 PostSetNeedsCommitToMainThread(); 129 PostSetNeedsCommitToMainThread();
125 else if (impl->active_tree()->source_frame_number() == 1) 130 else if (impl->active_tree()->source_frame_number() == 1)
126 EndTest(); 131 EndTest();
127 } 132 }
128 133
129 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
130 num_commits_++;
131 }
132
133 virtual void AfterTest() OVERRIDE { 134 virtual void AfterTest() OVERRIDE {
134 EXPECT_EQ(2, num_commits_); 135 EXPECT_EQ(2, num_commits_);
135 EXPECT_GE(2, num_draws_); 136 EXPECT_LE(1, num_draws_);
136 } 137 }
137 138
138 private: 139 private:
139 int num_commits_; 140 int num_commits_;
140 int num_draws_; 141 int num_draws_;
141 }; 142 };
142 143
143 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit2); 144 MULTI_THREAD_TEST_F(LayerTreeHostTestSetNeedsCommit2);
144 145
145 // 1 setNeedsRedraw after the first commit has completed should lead to 1 146 // 1 setNeedsRedraw after the first commit has completed should lead to 1
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 688
688 LayerImpl* root = impl->active_tree()->root_layer(); 689 LayerImpl* root = impl->active_tree()->root_layer();
689 LayerImpl* child = impl->active_tree()->root_layer()->children()[0]; 690 LayerImpl* child = impl->active_tree()->root_layer()->children()[0];
690 691
691 // Positions remain in layout pixels. 692 // Positions remain in layout pixels.
692 EXPECT_EQ(gfx::Point(0, 0), root->position()); 693 EXPECT_EQ(gfx::Point(0, 0), root->position());
693 EXPECT_EQ(gfx::Point(2, 2), child->position()); 694 EXPECT_EQ(gfx::Point(2, 2), child->position());
694 695
695 // Compute all the layer transforms for the frame. 696 // Compute all the layer transforms for the frame.
696 LayerTreeHostImpl::FrameData frame_data; 697 LayerTreeHostImpl::FrameData frame_data;
697 impl->PrepareToDraw(&frame_data); 698 impl->PrepareToDraw(&frame_data, gfx::Rect());
698 impl->DidDrawAllLayers(frame_data); 699 impl->DidDrawAllLayers(frame_data);
699 700
700 const LayerImplList& render_surface_layer_list = 701 const LayerImplList& render_surface_layer_list =
701 *frame_data.render_surface_layer_list; 702 *frame_data.render_surface_layer_list;
702 703
703 // Both layers should be drawing into the root render surface. 704 // Both layers should be drawing into the root render surface.
704 ASSERT_EQ(1u, render_surface_layer_list.size()); 705 ASSERT_EQ(1u, render_surface_layer_list.size());
705 ASSERT_EQ(root->render_surface(), 706 ASSERT_EQ(root->render_surface(),
706 render_surface_layer_list[0]->render_surface()); 707 render_surface_layer_list[0]->render_surface());
707 ASSERT_EQ(2u, root->render_surface()->layer_list().size()); 708 ASSERT_EQ(2u, root->render_surface()->layer_list().size());
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 1118
1118 virtual void AfterTest() OVERRIDE {} 1119 virtual void AfterTest() OVERRIDE {}
1119 }; 1120 };
1120 1121
1121 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestCompositeAndReadbackCleanup); 1122 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestCompositeAndReadbackCleanup);
1122 1123
1123 class LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit 1124 class LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit
1124 : public LayerTreeHostTest { 1125 : public LayerTreeHostTest {
1125 public: 1126 public:
1126 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit() 1127 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit()
1127 : root_layer_(ContentLayerWithUpdateTracking::Create(&fake_delegate_)), 1128 : root_layer_(FakeContentLayer::Create(&client_)),
1128 surface_layer1_( 1129 surface_layer1_(
1129 ContentLayerWithUpdateTracking::Create(&fake_delegate_)), 1130 FakeContentLayer::Create(&client_)),
1130 replica_layer1_( 1131 replica_layer1_(
1131 ContentLayerWithUpdateTracking::Create(&fake_delegate_)), 1132 FakeContentLayer::Create(&client_)),
1132 surface_layer2_( 1133 surface_layer2_(
1133 ContentLayerWithUpdateTracking::Create(&fake_delegate_)), 1134 FakeContentLayer::Create(&client_)),
1134 replica_layer2_( 1135 replica_layer2_(
1135 ContentLayerWithUpdateTracking::Create(&fake_delegate_)) {} 1136 FakeContentLayer::Create(&client_)) {}
1136 1137
1137 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 1138 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
1138 settings->cache_render_pass_contents = true; 1139 settings->cache_render_pass_contents = true;
1139 } 1140 }
1140 1141
1141 virtual void BeginTest() OVERRIDE { 1142 virtual void BeginTest() OVERRIDE {
1142 layer_tree_host()->SetViewportSize(gfx::Size(100, 100), 1143 layer_tree_host()->SetViewportSize(gfx::Size(100, 100),
1143 gfx::Size(100, 100)); 1144 gfx::Size(100, 100));
1144 1145
1145 root_layer_->SetBounds(gfx::Size(100, 100)); 1146 root_layer_->SetBounds(gfx::Size(100, 100));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId( 1186 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId(
1186 surface1_render_pass_id)); 1187 surface1_render_pass_id));
1187 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId( 1188 EXPECT_FALSE(renderer->HaveCachedResourcesForRenderPassId(
1188 surface2_render_pass_id)); 1189 surface2_render_pass_id));
1189 1190
1190 EndTest(); 1191 EndTest();
1191 break; 1192 break;
1192 } 1193 }
1193 } 1194 }
1194 1195
1196 virtual void DidCommitAndDrawFrame() OVERRIDE {
1197 if (!TestEnded())
1198 root_layer_->SetNeedsDisplay();
1199 }
1200
1195 virtual void AfterTest() OVERRIDE { 1201 virtual void AfterTest() OVERRIDE {
1196 EXPECT_EQ(2, root_layer_->PaintContentsCount()); 1202 EXPECT_EQ(3u, root_layer_->update_count());
1197 EXPECT_EQ(2, surface_layer1_->PaintContentsCount()); 1203 EXPECT_EQ(3u, surface_layer1_->update_count());
1198 EXPECT_EQ(2, surface_layer2_->PaintContentsCount()); 1204 EXPECT_EQ(3u, surface_layer2_->update_count());
1199 } 1205 }
1200 1206
1201 private: 1207 private:
1202 FakeContentLayerClient fake_delegate_; 1208 FakeContentLayerClient client_;
1203 scoped_refptr<ContentLayerWithUpdateTracking> root_layer_; 1209 scoped_refptr<FakeContentLayer> root_layer_;
1204 scoped_refptr<ContentLayerWithUpdateTracking> surface_layer1_; 1210 scoped_refptr<FakeContentLayer> surface_layer1_;
1205 scoped_refptr<ContentLayerWithUpdateTracking> replica_layer1_; 1211 scoped_refptr<FakeContentLayer> replica_layer1_;
1206 scoped_refptr<ContentLayerWithUpdateTracking> surface_layer2_; 1212 scoped_refptr<FakeContentLayer> surface_layer2_;
1207 scoped_refptr<ContentLayerWithUpdateTracking> replica_layer2_; 1213 scoped_refptr<FakeContentLayer> replica_layer2_;
1208 }; 1214 };
1209 1215
1210 SINGLE_AND_MULTI_THREAD_TEST_F( 1216 SINGLE_AND_MULTI_THREAD_TEST_F(
1211 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit); 1217 LayerTreeHostTestSurfaceNotAllocatedForLayersOutsideMemoryLimit);
1212 1218
1213 class EvictionTestLayer : public Layer { 1219 class EvictionTestLayer : public Layer {
1214 public: 1220 public:
1215 static scoped_refptr<EvictionTestLayer> Create() { 1221 static scoped_refptr<EvictionTestLayer> Create() {
1216 return make_scoped_refptr(new EvictionTestLayer()); 1222 return make_scoped_refptr(new EvictionTestLayer());
1217 } 1223 }
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 // Commit 6: Triggered by the eviction, post an eviction task in 1361 // Commit 6: Triggered by the eviction, post an eviction task in
1356 // Layout(), which will be a noop, letting the commit (which recreates the 1362 // Layout(), which will be a noop, letting the commit (which recreates the
1357 // textures) go through and draw a frame, then end the test. 1363 // textures) go through and draw a frame, then end the test.
1358 // 1364 //
1359 // Commits 1+2 test the eviction recovery path where eviction happens outside 1365 // Commits 1+2 test the eviction recovery path where eviction happens outside
1360 // of the beginFrame/commit pair. 1366 // of the beginFrame/commit pair.
1361 // Commits 3+4 test the eviction recovery path where eviction happens inside 1367 // Commits 3+4 test the eviction recovery path where eviction happens inside
1362 // the beginFrame/commit pair. 1368 // the beginFrame/commit pair.
1363 // Commits 5+6 test the path where an eviction happens during the eviction 1369 // Commits 5+6 test the path where an eviction happens during the eviction
1364 // recovery path. 1370 // recovery path.
1365 virtual void DidCommitAndDrawFrame() OVERRIDE { 1371 virtual void DidCommit() OVERRIDE {
1366 switch (num_commits_) { 1372 switch (num_commits_) {
1367 case 1: 1373 case 1:
1368 EXPECT_TRUE(layer_->HaveBackingTexture()); 1374 EXPECT_TRUE(layer_->HaveBackingTexture());
1369 PostEvictTextures(); 1375 PostEvictTextures();
1370 break; 1376 break;
1371 case 2: 1377 case 2:
1372 EXPECT_TRUE(layer_->HaveBackingTexture()); 1378 EXPECT_TRUE(layer_->HaveBackingTexture());
1373 layer_tree_host()->SetNeedsCommit(); 1379 layer_tree_host()->SetNeedsCommit();
1374 break; 1380 break;
1375 case 3: 1381 case 3:
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 virtual void BeginTest() OVERRIDE { 1448 virtual void BeginTest() OVERRIDE {
1443 layer_tree_host()->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); 1449 layer_tree_host()->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
1444 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10)); 1450 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10));
1445 1451
1446 PostSetNeedsCommitToMainThread(); 1452 PostSetNeedsCommitToMainThread();
1447 } 1453 }
1448 1454
1449 virtual void DidCommit() OVERRIDE { 1455 virtual void DidCommit() OVERRIDE {
1450 if (num_draw_layers_ == 2) 1456 if (num_draw_layers_ == 2)
1451 return; 1457 return;
1452 PostSetNeedsCommitToMainThread(); 1458 layer_tree_host()->root_layer()->SetNeedsDisplay();
1453 } 1459 }
1454 1460
1455 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1461 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1456 if (num_draw_layers_ == 1) 1462 if (num_draw_layers_ == 1)
1457 num_commit_complete_++; 1463 num_commit_complete_++;
1458 } 1464 }
1459 1465
1460 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1466 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1461 num_draw_layers_++; 1467 num_draw_layers_++;
1462 if (num_draw_layers_ == 2) 1468 if (num_draw_layers_ == 2)
(...skipping 14 matching lines...) Expand all
1477 1483
1478 class LayerTreeHostTestContinuousInvalidate : public LayerTreeHostTest { 1484 class LayerTreeHostTestContinuousInvalidate : public LayerTreeHostTest {
1479 public: 1485 public:
1480 LayerTreeHostTestContinuousInvalidate() 1486 LayerTreeHostTestContinuousInvalidate()
1481 : num_commit_complete_(0), num_draw_layers_(0) {} 1487 : num_commit_complete_(0), num_draw_layers_(0) {}
1482 1488
1483 virtual void BeginTest() OVERRIDE { 1489 virtual void BeginTest() OVERRIDE {
1484 layer_tree_host()->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); 1490 layer_tree_host()->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
1485 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10)); 1491 layer_tree_host()->root_layer()->SetBounds(gfx::Size(10, 10));
1486 1492
1487 content_layer_ = ContentLayer::Create(&fake_delegate_); 1493 content_layer_ = ContentLayer::Create(&client_);
1488 content_layer_->SetBounds(gfx::Size(10, 10)); 1494 content_layer_->SetBounds(gfx::Size(10, 10));
1489 content_layer_->SetPosition(gfx::PointF(0.f, 0.f)); 1495 content_layer_->SetPosition(gfx::PointF(0.f, 0.f));
1490 content_layer_->SetAnchorPoint(gfx::PointF(0.f, 0.f)); 1496 content_layer_->SetAnchorPoint(gfx::PointF(0.f, 0.f));
1491 content_layer_->SetIsDrawable(true); 1497 content_layer_->SetIsDrawable(true);
1492 layer_tree_host()->root_layer()->AddChild(content_layer_); 1498 layer_tree_host()->root_layer()->AddChild(content_layer_);
1493 1499
1494 PostSetNeedsCommitToMainThread(); 1500 PostSetNeedsCommitToMainThread();
1495 } 1501 }
1496 1502
1497 virtual void DidCommit() OVERRIDE { 1503 virtual void DidCommit() OVERRIDE {
(...skipping 12 matching lines...) Expand all
1510 if (num_draw_layers_ == 2) 1516 if (num_draw_layers_ == 2)
1511 EndTest(); 1517 EndTest();
1512 } 1518 }
1513 1519
1514 virtual void AfterTest() OVERRIDE { 1520 virtual void AfterTest() OVERRIDE {
1515 // Check that we didn't commit twice between first and second draw. 1521 // Check that we didn't commit twice between first and second draw.
1516 EXPECT_EQ(1, num_commit_complete_); 1522 EXPECT_EQ(1, num_commit_complete_);
1517 } 1523 }
1518 1524
1519 private: 1525 private:
1520 FakeContentLayerClient fake_delegate_; 1526 FakeContentLayerClient client_;
1521 scoped_refptr<Layer> content_layer_; 1527 scoped_refptr<Layer> content_layer_;
1522 int num_commit_complete_; 1528 int num_commit_complete_;
1523 int num_draw_layers_; 1529 int num_draw_layers_;
1524 }; 1530 };
1525 1531
1526 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousInvalidate); 1532 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousInvalidate);
1527 1533
1528 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { 1534 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest {
1529 public: 1535 public:
1530 LayerTreeHostTestDeferCommits() 1536 LayerTreeHostTestDeferCommits()
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
2174 } 2180 }
2175 2181
2176 private: 2182 private:
2177 base::TimeTicks frame_time_; 2183 base::TimeTicks frame_time_;
2178 }; 2184 };
2179 2185
2180 MULTI_THREAD_TEST_F(LayerTreeHostTestVSyncNotification); 2186 MULTI_THREAD_TEST_F(LayerTreeHostTestVSyncNotification);
2181 2187
2182 } // namespace 2188 } // namespace
2183 } // namespace cc 2189 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_perftest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698