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

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

Issue 2151433004: cc: Make LayerTreeHostImpl::SwapBuffers not virtual. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@removedidswap
Patch Set: novirtualswapbuffers: num_draws_ 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_unittest_animation.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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 MAIN_DID_BEGIN_FRAME, 123 MAIN_DID_BEGIN_FRAME,
124 MAIN_END, 124 MAIN_END,
125 }; 125 };
126 126
127 enum ImplOrder : int { 127 enum ImplOrder : int {
128 IMPL_START = 1, 128 IMPL_START = 1,
129 IMPL_COMMIT, 129 IMPL_COMMIT,
130 IMPL_COMMIT_COMPLETE, 130 IMPL_COMMIT_COMPLETE,
131 IMPL_ACTIVATE, 131 IMPL_ACTIVATE,
132 IMPL_DRAW, 132 IMPL_DRAW,
133 IMPL_SWAP,
134 IMPL_END, 133 IMPL_END,
135 }; 134 };
136 135
137 template <typename T> 136 template <typename T>
138 bool CheckStep(T next, T* var) { 137 bool CheckStep(T next, T* var) {
139 int expected = next - 1; 138 int expected = next - 1;
140 EXPECT_EQ(expected, *var); 139 EXPECT_EQ(expected, *var);
141 bool correct = expected == *var; 140 bool correct = expected == *var;
142 *var = next; 141 *var = next;
143 return correct; 142 return correct;
(...skipping 20 matching lines...) Expand all
164 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { 163 void CommitCompleteOnThread(LayerTreeHostImpl* impl) override {
165 EXPECT_TRUE(CheckStep(IMPL_COMMIT_COMPLETE, &impl_)); 164 EXPECT_TRUE(CheckStep(IMPL_COMMIT_COMPLETE, &impl_));
166 } 165 }
167 166
168 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { 167 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
169 EXPECT_TRUE(CheckStep(IMPL_ACTIVATE, &impl_)); 168 EXPECT_TRUE(CheckStep(IMPL_ACTIVATE, &impl_));
170 } 169 }
171 170
172 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 171 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
173 EXPECT_TRUE(CheckStep(IMPL_DRAW, &impl_)); 172 EXPECT_TRUE(CheckStep(IMPL_DRAW, &impl_));
174 }
175
176 void SwapBuffersCompleteOnThread(LayerTreeHostImpl* impl) override {
177 EXPECT_TRUE(CheckStep(IMPL_SWAP, &impl_));
178
179 EndTest(); 173 EndTest();
180 } 174 }
181 175
182 void AfterTest() override { 176 void AfterTest() override {
183 EXPECT_TRUE(CheckStep(MAIN_END, &main_)); 177 EXPECT_TRUE(CheckStep(MAIN_END, &main_));
184 EXPECT_TRUE(CheckStep(IMPL_END, &impl_)); 178 EXPECT_TRUE(CheckStep(IMPL_END, &impl_));
185 } 179 }
186 180
187 MainOrder main_ = MAIN_START; 181 MainOrder main_ = MAIN_START;
188 ImplOrder impl_ = IMPL_START; 182 ImplOrder impl_ = IMPL_START;
(...skipping 2606 matching lines...) Expand 10 before | Expand all | Expand 10 after
2795 EXPECT_EQ(2u, frame_data->render_passes.size()); 2789 EXPECT_EQ(2u, frame_data->render_passes.size());
2796 2790
2797 // At least root layer quad in root render pass. 2791 // At least root layer quad in root render pass.
2798 EXPECT_GE(frame_data->render_passes[0]->quad_list.size(), 1u); 2792 EXPECT_GE(frame_data->render_passes[0]->quad_list.size(), 1u);
2799 // At least parent and child layer quads in parent render pass. 2793 // At least parent and child layer quads in parent render pass.
2800 EXPECT_GE(frame_data->render_passes[1]->quad_list.size(), 2u); 2794 EXPECT_GE(frame_data->render_passes[1]->quad_list.size(), 2u);
2801 } 2795 }
2802 return draw_result; 2796 return draw_result;
2803 } 2797 }
2804 2798
2805 void SwapBuffersCompleteOnThread(LayerTreeHostImpl* host_impl) override { 2799 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
2806 swap_count_++; 2800 swap_count_++;
2807 switch (swap_count_) { 2801 switch (swap_count_) {
2808 case 1: 2802 case 1:
2809 host_impl->SetNeedsRedraw(); 2803 host_impl->SetNeedsRedraw();
2810 break; 2804 break;
2811 case 2: 2805 case 2:
2812 EndTest(); 2806 EndTest();
2813 break; 2807 break;
2814 default: 2808 default:
2815 NOTREACHED(); 2809 NOTREACHED();
(...skipping 1463 matching lines...) Expand 10 before | Expand all | Expand 10 after
4279 // Lost context sometimes takes two frames to recreate. The third frame 4273 // Lost context sometimes takes two frames to recreate. The third frame
4280 // is sometimes aborted, so wait until the fourth frame to verify that 4274 // is sometimes aborted, so wait until the fourth frame to verify that
4281 // the memory has been set, and the fifth frame to end the test. 4275 // the memory has been set, and the fifth frame to end the test.
4282 if (layer_tree_host()->source_frame_number() < 5) { 4276 if (layer_tree_host()->source_frame_number() < 5) {
4283 layer_tree_host()->SetNeedsCommit(); 4277 layer_tree_host()->SetNeedsCommit();
4284 } else if (layer_tree_host()->source_frame_number() == 5) { 4278 } else if (layer_tree_host()->source_frame_number() == 5) {
4285 EndTest(); 4279 EndTest();
4286 } 4280 }
4287 } 4281 }
4288 4282
4289 void SwapBuffersOnThread(LayerTreeHostImpl* impl, bool result) override { 4283 void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
4290 switch (impl->active_tree()->source_frame_number()) { 4284 switch (impl->active_tree()->source_frame_number()) {
4291 case 1: 4285 case 1:
4292 EXPECT_EQ(first_output_surface_memory_limit_, 4286 EXPECT_EQ(first_output_surface_memory_limit_,
4293 impl->memory_allocation_limit_bytes()); 4287 impl->memory_allocation_limit_bytes());
4294 // Lose the output surface. 4288 // Lose the output surface.
4295 first_context_provider_->TestContext3d()->loseContextCHROMIUM( 4289 first_context_provider_->TestContext3d()->loseContextCHROMIUM(
4296 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); 4290 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
4297 break; 4291 break;
4298 case 4: 4292 case 4:
4299 EXPECT_EQ(second_output_surface_memory_limit_, 4293 EXPECT_EQ(second_output_surface_memory_limit_,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
4384 if (frame == -1) { 4378 if (frame == -1) {
4385 host_impl->active_tree()->QueuePinnedSwapPromise(base::WrapUnique( 4379 host_impl->active_tree()->QueuePinnedSwapPromise(base::WrapUnique(
4386 new TestSwapPromise(&pinned_active_swap_promise_result_))); 4380 new TestSwapPromise(&pinned_active_swap_promise_result_)));
4387 host_impl->pending_tree()->QueueSwapPromise( 4381 host_impl->pending_tree()->QueueSwapPromise(
4388 base::WrapUnique(new TestSwapPromise(&pending_swap_promise_result_))); 4382 base::WrapUnique(new TestSwapPromise(&pending_swap_promise_result_)));
4389 host_impl->active_tree()->QueueSwapPromise( 4383 host_impl->active_tree()->QueueSwapPromise(
4390 base::WrapUnique(new TestSwapPromise(&active_swap_promise_result_))); 4384 base::WrapUnique(new TestSwapPromise(&active_swap_promise_result_)));
4391 } 4385 }
4392 } 4386 }
4393 4387
4394 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 4388 void SwapBuffersCompleteOnThread() override { EndTest(); }
4395 EndTest();
4396 }
4397 4389
4398 void AfterTest() override { 4390 void AfterTest() override {
4399 // The pending swap promise should activate and swap. 4391 // The pending swap promise should activate and swap.
4400 EXPECT_TRUE(pending_swap_promise_result_.did_activate_called); 4392 EXPECT_TRUE(pending_swap_promise_result_.did_activate_called);
4401 EXPECT_TRUE(pending_swap_promise_result_.did_swap_called); 4393 EXPECT_TRUE(pending_swap_promise_result_.did_swap_called);
4402 4394
4403 // The active swap promise should fail to swap (it is cancelled by 4395 // The active swap promise should fail to swap (it is cancelled by
4404 // the activation of a new frame). 4396 // the activation of a new frame).
4405 EXPECT_FALSE(active_swap_promise_result_.did_activate_called); 4397 EXPECT_FALSE(active_swap_promise_result_.did_activate_called);
4406 EXPECT_FALSE(active_swap_promise_result_.did_swap_called); 4398 EXPECT_FALSE(active_swap_promise_result_.did_swap_called);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
4458 } 4450 }
4459 4451
4460 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { 4452 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
4461 commit_complete_count_++; 4453 commit_complete_count_++;
4462 if (commit_complete_count_ == 1) { 4454 if (commit_complete_count_ == 1) {
4463 // This commit will be aborted because no actual update. 4455 // This commit will be aborted because no actual update.
4464 PostSetNeedsUpdateLayersToMainThread(); 4456 PostSetNeedsUpdateLayersToMainThread();
4465 } 4457 }
4466 } 4458 }
4467 4459
4468 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 4460 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
4469 int frame = host_impl->active_tree()->source_frame_number(); 4461 int frame = host_impl->active_tree()->source_frame_number();
4470 if (frame == 2) { 4462 if (frame == 2) {
4471 EndTest(); 4463 EndTest();
4472 } 4464 }
4473 } 4465 }
4474 4466
4475 void AfterTest() override { 4467 void AfterTest() override {
4476 // 3 commits are scheduled. 2 completes. 1 is aborted. 4468 // 3 commits are scheduled. 2 completes. 1 is aborted.
4477 EXPECT_EQ(commit_count_, 3); 4469 EXPECT_EQ(commit_count_, 3);
4478 EXPECT_EQ(commit_complete_count_, 2); 4470 EXPECT_EQ(commit_complete_count_, 2);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
4578 } 4570 }
4579 4571
4580 void SetCallback(bool enable) { 4572 void SetCallback(bool enable) {
4581 output_surface()->SetTreeActivationCallback( 4573 output_surface()->SetTreeActivationCallback(
4582 enable 4574 enable
4583 ? base::Bind(&LayerTreeHostTestKeepSwapPromise::ActivationCallback, 4575 ? base::Bind(&LayerTreeHostTestKeepSwapPromise::ActivationCallback,
4584 base::Unretained(this)) 4576 base::Unretained(this))
4585 : base::Closure()); 4577 : base::Closure());
4586 } 4578 }
4587 4579
4588 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 4580 void SwapBuffersCompleteOnThread() override {
4589 EXPECT_TRUE(result); 4581 if (num_swaps_++ >= 1) {
4590 if (host_impl->active_tree()->source_frame_number() >= 1) {
4591 // The commit changes layers so it should cause a swap. 4582 // The commit changes layers so it should cause a swap.
4592 base::AutoLock lock(swap_promise_result_.lock); 4583 base::AutoLock lock(swap_promise_result_.lock);
4593 EXPECT_TRUE(swap_promise_result_.did_swap_called); 4584 EXPECT_TRUE(swap_promise_result_.did_swap_called);
4594 EXPECT_FALSE(swap_promise_result_.did_not_swap_called); 4585 EXPECT_FALSE(swap_promise_result_.did_not_swap_called);
4595 EXPECT_TRUE(swap_promise_result_.dtor_called); 4586 EXPECT_TRUE(swap_promise_result_.dtor_called);
4596 EndTest(); 4587 EndTest();
4597 } 4588 }
4598 } 4589 }
4599 4590
4600 void AfterTest() override {} 4591 void AfterTest() override {}
4601 4592
4602 private: 4593 private:
4594 int num_swaps_ = 0;
4603 scoped_refptr<Layer> layer_; 4595 scoped_refptr<Layer> layer_;
4604 TestSwapPromiseResult swap_promise_result_; 4596 TestSwapPromiseResult swap_promise_result_;
4605 }; 4597 };
4606 4598
4607 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestKeepSwapPromise); 4599 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestKeepSwapPromise);
4608 4600
4609 class LayerTreeHostTestBreakSwapPromiseForVisibility 4601 class LayerTreeHostTestBreakSwapPromiseForVisibility
4610 : public LayerTreeHostTest { 4602 : public LayerTreeHostTest {
4611 protected: 4603 protected:
4612 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 4604 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
(...skipping 2065 matching lines...) Expand 10 before | Expand all | Expand 10 after
6678 // Makes sure that painted_device_scale_factor is propagated to the 6670 // Makes sure that painted_device_scale_factor is propagated to the
6679 // frame's metadata. 6671 // frame's metadata.
6680 class LayerTreeHostTestPaintedDeviceScaleFactor : public LayerTreeHostTest { 6672 class LayerTreeHostTestPaintedDeviceScaleFactor : public LayerTreeHostTest {
6681 protected: 6673 protected:
6682 void BeginTest() override { 6674 void BeginTest() override {
6683 layer_tree_host()->SetPaintedDeviceScaleFactor(2.0f); 6675 layer_tree_host()->SetPaintedDeviceScaleFactor(2.0f);
6684 EXPECT_EQ(1.0f, layer_tree_host()->device_scale_factor()); 6676 EXPECT_EQ(1.0f, layer_tree_host()->device_scale_factor());
6685 PostSetNeedsCommitToMainThread(); 6677 PostSetNeedsCommitToMainThread();
6686 } 6678 }
6687 6679
6688 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { 6680 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
6681 EXPECT_EQ(2.0f, host_impl->active_tree()->painted_device_scale_factor());
6682 EXPECT_EQ(1.0f, host_impl->active_tree()->device_scale_factor());
6683 }
6684
6685 void SwapBuffersCompleteOnThread() override {
6689 EXPECT_EQ( 6686 EXPECT_EQ(
6690 2.0f, 6687 2.0f,
6691 output_surface()->last_sent_frame()->metadata.device_scale_factor); 6688 output_surface()->last_sent_frame()->metadata.device_scale_factor);
6692 EXPECT_EQ(2.0f, host_impl->active_tree()->painted_device_scale_factor());
6693 EXPECT_EQ(1.0f, host_impl->active_tree()->device_scale_factor());
6694 EndTest(); 6689 EndTest();
6695 } 6690 }
6696 6691
6697 void AfterTest() override {} 6692 void AfterTest() override {}
6698 }; 6693 };
6699 6694
6700 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPaintedDeviceScaleFactor); 6695 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPaintedDeviceScaleFactor);
6701 6696
6702 } // namespace 6697 } // namespace
6703 } // namespace cc 6698 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_unittest_animation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698