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

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 337693005: cc: Control defer_commits logic by Scheduler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 5 years, 11 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.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ab1224ef1f9a28ba9193145db3f7db77a852633a..a3c37ed627e3908fda61e47fbbaf96ee8b0425d0 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -2029,22 +2029,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();
@@ -2056,13 +2068,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);
@@ -4798,22 +4810,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,
@@ -4834,27 +4848,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,
@@ -4874,11 +4894,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:
« no previous file with comments | « cc/trees/layer_tree_host.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