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

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

Issue 2151433004: cc: Make LayerTreeHostImpl::SwapBuffers not virtual. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@removedidswap
Patch Set: novirtualswapbuffers: . Created 4 years, 5 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 142
143 int draw_count_; 143 int draw_count_;
144 FakeContentLayerClient client_; 144 FakeContentLayerClient client_;
145 }; 145 };
146 146
147 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize); 147 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestSetViewportSize);
148 148
149 class LayerTreeHostDamageTestNoDamageDoesNotSwap 149 class LayerTreeHostDamageTestNoDamageDoesNotSwap
150 : public LayerTreeHostDamageTest { 150 : public LayerTreeHostDamageTest {
151 void BeginTest() override { 151 void BeginTest() override {
152 expect_swap_and_succeed_ = 0;
153 did_swaps_ = 0;
154 did_swap_and_succeed_ = 0;
155 PostSetNeedsCommitToMainThread(); 152 PostSetNeedsCommitToMainThread();
156 } 153 }
157 154
158 void SetupTree() override { 155 void SetupTree() override {
159 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_); 156 scoped_refptr<FakePictureLayer> root = FakePictureLayer::Create(&client_);
160 root->SetBounds(gfx::Size(10, 10)); 157 root->SetBounds(gfx::Size(10, 10));
161 158
162 // Most of the layer isn't visible. 159 // Most of the layer isn't visible.
163 content_ = FakePictureLayer::Create(&client_); 160 content_ = FakePictureLayer::Create(&client_);
164 content_->SetBounds(gfx::Size(2000, 100)); 161 content_->SetBounds(gfx::Size(2000, 100));
165 root->AddChild(content_); 162 root->AddChild(content_);
166 163
167 layer_tree_host()->SetRootLayer(root); 164 layer_tree_host()->SetRootLayer(root);
168 LayerTreeHostDamageTest::SetupTree(); 165 LayerTreeHostDamageTest::SetupTree();
169 client_.set_bounds(root->bounds()); 166 client_.set_bounds(root->bounds());
170 } 167 }
171 168
172 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 169 DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
173 LayerTreeHostImpl::FrameData* frame_data, 170 LayerTreeHostImpl::FrameData* frame_data,
174 DrawResult draw_result) override { 171 DrawResult draw_result) override {
175 EXPECT_EQ(DRAW_SUCCESS, draw_result); 172 EXPECT_EQ(DRAW_SUCCESS, draw_result);
176 173
177 int source_frame = host_impl->active_tree()->source_frame_number(); 174 int source_frame = host_impl->active_tree()->source_frame_number();
178 switch (source_frame) { 175 switch (source_frame) {
179 case 0: 176 case 0:
180 // The first frame has damage, so we should draw and swap. 177 // The first frame has damage, so we should draw and swap.
181 ++expect_swap_and_succeed_; 178 EXPECT_FALSE(frame_data->has_no_damage);
179 ++expect_swap_;
182 break; 180 break;
183 case 1: 181 case 1:
184 // The second frame has no damage, so we should not draw and swap. 182 // The second frame has no damage, so we should not draw and swap.
183 EXPECT_TRUE(frame_data->has_no_damage);
185 break; 184 break;
186 case 2: 185 case 2:
187 // The third frame has damage again, so we should draw and swap. 186 // The third frame has damage again, so we should draw and swap.
188 ++expect_swap_and_succeed_; 187 EXPECT_FALSE(frame_data->has_no_damage);
188 ++expect_swap_;
189 break; 189 break;
190 case 3: 190 case 3:
191 // The fourth frame has no visible damage, so we should not draw and 191 // The fourth frame has no visible damage, so we should not draw and
192 // swap. 192 // swap.
193 EXPECT_TRUE(frame_data->has_no_damage);
193 EndTest(); 194 EndTest();
194 break; 195 break;
195 } 196 }
196 return draw_result; 197 return draw_result;
197 } 198 }
198 199
199 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 200 void SwapBuffersCompleteOnThread() override {
200 ++did_swaps_; 201 ++did_swap_;
201 if (result) 202 EXPECT_EQ(expect_swap_, did_swap_);
danakj 2016/07/13 21:50:18 This just isn't called if result was false. So we
202 ++did_swap_and_succeed_;
203 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
204 } 203 }
205 204
206 void DidCommit() override { 205 void DidCommit() override {
207 int next_frame = layer_tree_host()->source_frame_number(); 206 int next_frame = layer_tree_host()->source_frame_number();
208 switch (next_frame) { 207 switch (next_frame) {
209 case 1: 208 case 1:
210 layer_tree_host()->SetNeedsCommit(); 209 layer_tree_host()->SetNeedsCommit();
211 break; 210 break;
212 case 2: 211 case 2:
213 // Cause visible damage. 212 // Cause visible damage.
214 content_->SetNeedsDisplayRect( 213 content_->SetNeedsDisplayRect(
215 gfx::Rect(layer_tree_host()->device_viewport_size())); 214 gfx::Rect(layer_tree_host()->device_viewport_size()));
216 break; 215 break;
217 case 3: 216 case 3:
218 // Cause non-visible damage. 217 // Cause non-visible damage.
219 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10)); 218 content_->SetNeedsDisplayRect(gfx::Rect(1990, 1990, 10, 10));
220 layer_tree_host()->SetNeedsCommit(); 219 layer_tree_host()->SetNeedsCommit();
221 break; 220 break;
222 } 221 }
223 } 222 }
224 223
225 void AfterTest() override { 224 void AfterTest() override {
226 EXPECT_EQ(4, did_swaps_); 225 EXPECT_EQ(2, expect_swap_);
227 EXPECT_EQ(2, expect_swap_and_succeed_); 226 EXPECT_EQ(expect_swap_, did_swap_);
228 EXPECT_EQ(expect_swap_and_succeed_, did_swap_and_succeed_);
229 } 227 }
230 228
231 FakeContentLayerClient client_; 229 FakeContentLayerClient client_;
232 scoped_refptr<FakePictureLayer> content_; 230 scoped_refptr<FakePictureLayer> content_;
233 int expect_swap_and_succeed_; 231 int expect_swap_ = 0;
234 int did_swaps_; 232 int did_swap_ = 0;
235 int did_swap_and_succeed_;
236 }; 233 };
237 234
238 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestNoDamageDoesNotSwap); 235 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDamageTestNoDamageDoesNotSwap);
239 236
240 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest { 237 class LayerTreeHostDamageTestForcedFullDamage : public LayerTreeHostDamageTest {
241 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 238 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
242 239
243 void SetupTree() override { 240 void SetupTree() override {
244 root_ = FakePictureLayer::Create(&client_); 241 root_ = FakePictureLayer::Create(&client_);
245 child_ = FakePictureLayer::Create(&client_); 242 child_ = FakePictureLayer::Create(&client_);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 break; 400 break;
404 case 3: 401 case 3:
405 // The fourth frame should damage the scrollbars. 402 // The fourth frame should damage the scrollbars.
406 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100))); 403 EXPECT_TRUE(root_damage.Contains(gfx::Rect(300, 300, 10, 100)));
407 EndTest(); 404 EndTest();
408 break; 405 break;
409 } 406 }
410 return draw_result; 407 return draw_result;
411 } 408 }
412 409
413 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 410 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
414 ++did_swaps_; 411 ++did_swaps_;
415 EXPECT_TRUE(result);
416 LayerImpl* scroll_layer = 412 LayerImpl* scroll_layer =
417 host_impl->active_tree()->LayerById(content_layer_->id()); 413 host_impl->active_tree()->LayerById(content_layer_->id());
418 switch (did_swaps_) { 414 switch (did_swaps_) {
419 case 1: 415 case 1:
420 // Test that modifying the position of the content layer (not 416 // Test that modifying the position of the content layer (not
421 // scrolling) won't damage the scrollbar. 417 // scrolling) won't damage the scrollbar.
422 MainThreadTaskRunner()->PostTask( 418 MainThreadTaskRunner()->PostTask(
423 FROM_HERE, base::Bind(&LayerTreeHostDamageTestScrollbarDoesDamage:: 419 FROM_HERE, base::Bind(&LayerTreeHostDamageTestScrollbarDoesDamage::
424 ModifyContentLayerPosition, 420 ModifyContentLayerPosition,
425 base::Unretained(this))); 421 base::Unretained(this)));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 EXPECT_EQ(1, frame); 486 EXPECT_EQ(1, frame);
491 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100))); 487 EXPECT_FALSE(root_damage.Intersects(gfx::Rect(300, 300, 10, 100)));
492 break; 488 break;
493 default: 489 default:
494 NOTREACHED(); 490 NOTREACHED();
495 break; 491 break;
496 } 492 }
497 return draw_result; 493 return draw_result;
498 } 494 }
499 495
500 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 496 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
501 ++did_swaps_; 497 ++did_swaps_;
502 EXPECT_TRUE(result);
503 LayerImpl* scroll_layer = 498 LayerImpl* scroll_layer =
504 host_impl->active_tree()->LayerById(content_layer_->id()); 499 host_impl->active_tree()->LayerById(content_layer_->id());
505 switch (did_swaps_) { 500 switch (did_swaps_) {
506 case 1: 501 case 1:
507 // Scroll on the thread. This should damage the scrollbar for the 502 // Scroll on the thread. This should damage the scrollbar for the
508 // next draw on the thread. 503 // next draw on the thread.
509 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f)); 504 scroll_layer->ScrollBy(gfx::Vector2dF(10.f, 10.f));
510 host_impl->SetNeedsRedraw(); 505 host_impl->SetNeedsRedraw();
511 break; 506 break;
512 case 2: 507 case 2:
(...skipping 12 matching lines...) Expand all
525 520
526 void AfterTest() override { EXPECT_EQ(3, did_swaps_); } 521 void AfterTest() override { EXPECT_EQ(3, did_swaps_); }
527 522
528 int did_swaps_; 523 int did_swaps_;
529 }; 524 };
530 525
531 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage); 526 MULTI_THREAD_TEST_F(LayerTreeHostDamageTestScrollbarCommitDoesNoDamage);
532 527
533 } // namespace 528 } // namespace
534 } // namespace cc 529 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698