Index: cc/trees/layer_tree_host_unittest_proxy.cc |
diff --git a/cc/trees/layer_tree_host_unittest_proxy.cc b/cc/trees/layer_tree_host_unittest_proxy.cc |
index 27e28354534959926f3078947f4d95cb6afe10bf..baddab2a2829d5f10dc71a3858a7a80b79bb1ac1 100644 |
--- a/cc/trees/layer_tree_host_unittest_proxy.cc |
+++ b/cc/trees/layer_tree_host_unittest_proxy.cc |
@@ -318,10 +318,6 @@ class LayerTreeHostProxyTestCommitWaitsForActivation |
MULTI_THREAD_TEST_F(LayerTreeHostProxyTestCommitWaitsForActivation); |
-// Test for a corner case of main frame before activation (MFBA) and commit |
-// waits for activation. If a commit (with wait for activation flag set) |
-// is ready before the activation for a previous commit then the activation |
-// should not signal the completion event of the second commit. |
brianderson
2017/04/17 22:26:33
Looks like this comment was accidentally removed.
panicker
2017/04/17 22:53:29
Done.
|
class LayerTreeHostProxyTestCommitWaitsForActivationMFBA |
: public LayerTreeHostProxyTest { |
protected: |
@@ -420,4 +416,82 @@ class LayerTreeHostProxyTestCommitWaitsForActivationMFBA |
MULTI_THREAD_TEST_F(LayerTreeHostProxyTestCommitWaitsForActivationMFBA); |
+// Test for activation time passed in BeginFrameArgs. |
+class LayerTreeHostProxyTestActivationTime : public LayerTreeHostProxyTest { |
+ protected: |
+ LayerTreeHostProxyTestActivationTime() = default; |
+ |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ void InitializeSettings(LayerTreeSettings* settings) override { |
+ settings->main_frame_before_activation_enabled = true; |
+ LayerTreeHostProxyTest::InitializeSettings(settings); |
+ } |
+ |
+ void DidSendBeginMainFrameOnThread(LayerTreeHostImpl* impl) override { |
+ if (activate_blocked_) { |
+ impl->BlockNotifyReadyToActivateForTesting(false); |
+ { |
+ base::AutoLock hold(activate_blocked_lock_); |
+ activate_blocked_ = false; |
+ } |
+ } |
+ } |
+ |
+ void BeginMainFrame(const BeginFrameArgs& args) override { |
+ { |
+ base::AutoLock hold(activate_blocked_lock_); |
+ EXPECT_FALSE(activate_blocked_); |
brianderson
2017/04/17 22:26:33
Only expect during case 1.
panicker
2017/04/17 22:53:29
Acknowledged.
|
+ } |
+ switch (args.source_frame_number) { |
+ case 0: |
+ // Initial frame, no activation yet. |
+ EXPECT_EQ(0UL, args.ready_to_activate_time.size()); |
+ break; |
+ case 1: |
+ // Frame #1, activation is delayed in BeginCommitOnThread. |
+ EXPECT_EQ(0UL, args.ready_to_activate_time.size()); |
+ break; |
+ case 2: |
+ // Frame #2, activation is delayed in BeginCommitOnThread. |
+ EXPECT_EQ(0UL, args.ready_to_activate_time.size()); |
+ break; |
+ case 3: |
+ // Frame #3, received activation for first two frames. |
+ EXPECT_EQ(2UL, args.ready_to_activate_time.size()); |
+ EXPECT_EQ(1UL, args.ready_to_activate_time[0].first); |
panicker
2017/04/17 21:54:50
Hmm I think I expected this to be #0 vs. #1?
brianderson
2017/04/17 22:26:33
I think case 1 should have the #0 and case 3 shoul
panicker
2017/04/17 22:53:29
Acknowledged.
|
+ EXPECT_EQ(2UL, args.ready_to_activate_time[1].first); |
+ EndTest(); |
+ } |
+ } |
+ |
+ void DidActivateTreeOnThread(LayerTreeHostImpl* impl) override { |
+ if (impl->sync_tree()->source_frame_number() == 2) |
brianderson
2017/04/17 22:26:33
|| source_frame_number == 0.
panicker
2017/04/17 22:53:29
Done.
|
+ PostSetNeedsCommitToMainThread(); // invoke for frame 3 |
+ } |
+ |
+ void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
+ // Block activation for the first two frames |
+ // and invoke PostSetNeedsCommitToMainThread for frame 1, 2 |
+ if (impl->sync_tree()->source_frame_number() <= 0) { |
brianderson
2017/04/17 22:26:33
Change the method override to CommitCompleteOnThre
panicker
2017/04/17 22:53:29
Done.
|
+ impl->BlockNotifyReadyToActivateForTesting(true); |
+ PostSetNeedsCommitToMainThread(); |
+ { |
+ base::AutoLock hold(activate_blocked_lock_); |
+ activate_blocked_ = true; |
+ } |
+ } |
+ } |
+ |
+ void AfterTest() override {} |
+ |
+ private: |
+ base::Lock activate_blocked_lock_; |
+ bool activate_blocked_ = false; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(LayerTreeHostProxyTestActivationTime); |
+}; |
+ |
+MULTI_THREAD_TEST_F(LayerTreeHostProxyTestActivationTime); |
+ |
} // namespace cc |