Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index 1e10588a72fc82990b89a2ed5b0e1ed3faf9caa9..d4bfb6e250664f2b946dfcc48712c9e1bd687f49 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -94,12 +94,8 @@ class LayerTreeHostTestReadyToActivateEmpty : public LayerTreeHostTest { |
void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override { |
did_notify_ready_to_activate_ = true; |
- const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers(); |
- all_tiles_required_for_activation_are_ready_to_draw_ = true; |
- for (const auto& layer : layers) { |
- if (!layer->AllTilesRequiredForActivationAreReadyToDraw()) |
- all_tiles_required_for_activation_are_ready_to_draw_ = false; |
- } |
+ all_tiles_required_for_activation_are_ready_to_draw_ = |
+ impl->tile_manager()->IsReadyToActivate(); |
EndTest(); |
} |
@@ -159,10 +155,9 @@ class LayerTreeHostTestReadyToDrawEmpty : public LayerTreeHostTest { |
void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override { |
did_notify_ready_to_draw_ = true; |
const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers(); |
- all_tiles_required_for_draw_are_ready_to_draw_ = true; |
+ all_tiles_required_for_draw_are_ready_to_draw_ = |
+ impl->tile_manager()->IsReadyToDraw(); |
for (const auto& layer : layers) { |
- if (!layer->AllTilesRequiredForDrawAreReadyToDraw()) |
- all_tiles_required_for_draw_are_ready_to_draw_ = false; |
FakePictureLayerImpl* fake_layer = |
static_cast<FakePictureLayerImpl*>(layer); |
required_for_draw_count_ += fake_layer->CountTilesRequiredForDraw(); |
@@ -2032,22 +2027,34 @@ SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousInvalidate); |
class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { |
public: |
LayerTreeHostTestDeferCommits() |
- : num_commits_deferred_(0), num_complete_commits_(0) {} |
+ : num_will_begin_impl_frame_(0), |
+ num_send_begin_main_frame_(0) {} |
void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
- void DidDeferCommit() override { |
- num_commits_deferred_++; |
- layer_tree_host()->SetDeferCommits(false); |
+ void WillBeginImplFrame(const BeginFrameArgs& args) override { |
+ num_will_begin_impl_frame_++; |
+ switch (num_will_begin_impl_frame_) { |
+ case 1: |
+ break; |
+ case 2: |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 3: |
+ PostSetDeferCommitsToMainThread(false); |
+ break; |
+ default: |
+ // Sometimes |num_will_begin_impl_frame_| will be greater than 3 if the |
+ // main thread is slow to respond. |
+ break; |
+ } |
} |
- void DidCommit() override { |
- num_complete_commits_++; |
- switch (num_complete_commits_) { |
+ void ScheduledActionSendBeginMainFrame() override { |
+ num_send_begin_main_frame_++; |
+ switch (num_send_begin_main_frame_) { |
case 1: |
- EXPECT_EQ(0, num_commits_deferred_); |
- layer_tree_host()->SetDeferCommits(true); |
- PostSetNeedsCommitToMainThread(); |
+ PostSetDeferCommitsToMainThread(true); |
break; |
case 2: |
EndTest(); |
@@ -2059,13 +2066,13 @@ class LayerTreeHostTestDeferCommits : public LayerTreeHostTest { |
} |
void AfterTest() override { |
- EXPECT_EQ(1, num_commits_deferred_); |
- EXPECT_EQ(2, num_complete_commits_); |
+ EXPECT_GE(3, num_will_begin_impl_frame_); |
+ EXPECT_EQ(2, num_send_begin_main_frame_); |
} |
private: |
- int num_commits_deferred_; |
- int num_complete_commits_; |
+ int num_will_begin_impl_frame_; |
+ int num_send_begin_main_frame_; |
}; |
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); |
@@ -4779,22 +4786,24 @@ class LayerTreeHostTestKeepSwapPromise : public LayerTreeTest { |
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestKeepSwapPromise); |
-class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit |
+class LayerTreeHostTestBreakSwapPromiseForVisibility |
: public LayerTreeHostTest { |
protected: |
void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
- void DidCommit() override { |
- layer_tree_host()->SetDeferCommits(true); |
- layer_tree_host()->SetNeedsCommit(); |
- } |
- |
- void DidDeferCommit() override { |
+ void SetVisibleFalseAndQueueSwapPromise() { |
layer_tree_host()->SetVisible(false); |
scoped_ptr<SwapPromise> swap_promise( |
new TestSwapPromise(&swap_promise_result_)); |
layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
- layer_tree_host()->SetDeferCommits(false); |
+ } |
+ |
+ void ScheduledActionWillSendBeginMainFrame() override { |
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LayerTreeHostTestBreakSwapPromiseForVisibility |
+ ::SetVisibleFalseAndQueueSwapPromise, |
+ base::Unretained(this))); |
} |
void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
@@ -4815,27 +4824,33 @@ class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit |
TestSwapPromiseResult swap_promise_result_; |
}; |
-SINGLE_AND_MULTI_THREAD_TEST_F( |
- LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit); |
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromiseForVisibility); |
-class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit |
- : public LayerTreeHostTest { |
+class LayerTreeHostTestBreakSwapPromiseForContext : public LayerTreeHostTest { |
protected: |
- void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
- |
- void DidCommit() override { |
- if (TestEnded()) |
- return; |
- layer_tree_host()->SetDeferCommits(true); |
- layer_tree_host()->SetNeedsCommit(); |
+ LayerTreeHostTestBreakSwapPromiseForContext() |
+ : output_surface_lost_triggered_(false) { |
} |
- void DidDeferCommit() override { |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ void LoseOutputSurfaceAndQueueSwapPromise() { |
layer_tree_host()->DidLoseOutputSurface(); |
scoped_ptr<SwapPromise> swap_promise( |
new TestSwapPromise(&swap_promise_result_)); |
layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); |
- layer_tree_host()->SetDeferCommits(false); |
+ } |
+ |
+ void ScheduledActionWillSendBeginMainFrame() override { |
+ if (output_surface_lost_triggered_) |
+ return; |
+ output_surface_lost_triggered_ = true; |
+ |
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LayerTreeHostTestBreakSwapPromiseForContext |
+ ::LoseOutputSurfaceAndQueueSwapPromise, |
+ base::Unretained(this))); |
} |
void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl, |
@@ -4855,11 +4870,12 @@ class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit |
} |
} |
+ bool output_surface_lost_triggered_; |
TestSwapPromiseResult swap_promise_result_; |
}; |
SINGLE_AND_MULTI_THREAD_TEST_F( |
- LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit); |
+ LayerTreeHostTestBreakSwapPromiseForContext); |
class SimpleSwapPromiseMonitor : public SwapPromiseMonitor { |
public: |