[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "base/basictypes.h" | ||||
6 | #include "base/compiler_specific.h" | ||||
7 | #include "cc/test/layer_tree_test.h" | ||||
8 | #include "cc/trees/thread_proxy.h" | ||||
9 | |||||
Dana Jansens | ab27776 | 2015-06-12 23:52:55 | [diff] [blame] | 10 | #define THREAD_PROXY_TEST_F(TEST_FIXTURE_NAME) \ |
11 | TEST_F(TEST_FIXTURE_NAME, MultiThread) { Run(true); } | ||||
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 12 | |
13 | // Do common tests for single thread proxy and thread proxy. | ||||
14 | // TODO(simonhong): Add SINGLE_THREAD_PROXY_TEST_F | ||||
15 | #define PROXY_TEST_SCHEDULED_ACTION(TEST_FIXTURE_NAME) \ | ||||
16 | THREAD_PROXY_TEST_F(TEST_FIXTURE_NAME); | ||||
17 | |||||
18 | namespace cc { | ||||
19 | |||||
20 | class ProxyTest : public LayerTreeTest { | ||||
21 | protected: | ||||
22 | ProxyTest() {} | ||||
dcheng | 93a52eb | 2014-12-23 02:14:23 | [diff] [blame] | 23 | ~ProxyTest() override {} |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 24 | |
Dana Jansens | ab27776 | 2015-06-12 23:52:55 | [diff] [blame] | 25 | void Run(bool threaded) { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 26 | // We don't need to care about delegating mode. |
27 | bool delegating_renderer = true; | ||||
28 | |||||
Dana Jansens | ab27776 | 2015-06-12 23:52:55 | [diff] [blame] | 29 | RunTest(threaded, delegating_renderer); |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 30 | } |
31 | |||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 32 | void BeginTest() override {} |
33 | void AfterTest() override {} | ||||
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 34 | |
35 | private: | ||||
36 | DISALLOW_COPY_AND_ASSIGN(ProxyTest); | ||||
37 | }; | ||||
38 | |||||
39 | class ProxyTestScheduledActionsBasic : public ProxyTest { | ||||
40 | protected: | ||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 41 | void BeginTest() override { proxy()->SetNeedsCommit(); } |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 42 | |
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 43 | void ScheduledActionBeginOutputSurfaceCreation() override { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 44 | EXPECT_EQ(0, action_phase_++); |
45 | } | ||||
46 | |||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 47 | void ScheduledActionSendBeginMainFrame() override { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 48 | EXPECT_EQ(1, action_phase_++); |
49 | } | ||||
50 | |||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 51 | void ScheduledActionCommit() override { EXPECT_EQ(2, action_phase_++); } |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 52 | |
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 53 | void ScheduledActionDrawAndSwapIfPossible() override { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 54 | EXPECT_EQ(3, action_phase_++); |
55 | EndTest(); | ||||
56 | } | ||||
57 | |||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 58 | void AfterTest() override { EXPECT_EQ(4, action_phase_); } |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 59 | |
60 | ProxyTestScheduledActionsBasic() : action_phase_(0) { | ||||
61 | } | ||||
dcheng | 93a52eb | 2014-12-23 02:14:23 | [diff] [blame] | 62 | ~ProxyTestScheduledActionsBasic() override {} |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 63 | |
64 | private: | ||||
65 | int action_phase_; | ||||
66 | |||||
67 | DISALLOW_COPY_AND_ASSIGN(ProxyTestScheduledActionsBasic); | ||||
68 | }; | ||||
69 | |||||
70 | PROXY_TEST_SCHEDULED_ACTION(ProxyTestScheduledActionsBasic); | ||||
71 | |||||
72 | class ThreadProxyTest : public ProxyTest { | ||||
73 | protected: | ||||
74 | ThreadProxyTest() {} | ||||
dcheng | 93a52eb | 2014-12-23 02:14:23 | [diff] [blame] | 75 | ~ThreadProxyTest() override {} |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 76 | |
77 | const ThreadProxy::MainThreadOnly& ThreadProxyMainOnly() const { | ||||
78 | DCHECK(proxy()); | ||||
79 | DCHECK(proxy()->HasImplThread()); | ||||
80 | return static_cast<const ThreadProxy*>(proxy())->main(); | ||||
81 | } | ||||
82 | |||||
83 | const ThreadProxy::CompositorThreadOnly& ThreadProxyImplOnly() const { | ||||
84 | DCHECK(proxy()); | ||||
85 | DCHECK(proxy()->HasImplThread()); | ||||
86 | return static_cast<const ThreadProxy*>(proxy())->impl(); | ||||
87 | } | ||||
88 | |||||
89 | private: | ||||
90 | DISALLOW_COPY_AND_ASSIGN(ThreadProxyTest); | ||||
91 | }; | ||||
92 | |||||
93 | class ThreadProxyTestSetNeedsCommit : public ThreadProxyTest { | ||||
94 | protected: | ||||
95 | ThreadProxyTestSetNeedsCommit() {} | ||||
dcheng | 93a52eb | 2014-12-23 02:14:23 | [diff] [blame] | 96 | ~ThreadProxyTestSetNeedsCommit() override {} |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 97 | |
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 98 | void BeginTest() override { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 99 | EXPECT_FALSE(ThreadProxyMainOnly().commit_requested); |
100 | EXPECT_FALSE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread); | ||||
101 | |||||
102 | proxy()->SetNeedsCommit(); | ||||
103 | |||||
104 | EXPECT_TRUE(ThreadProxyMainOnly().commit_requested); | ||||
105 | EXPECT_TRUE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread); | ||||
106 | } | ||||
107 | |||||
dcheng | 716bedf | 2014-10-21 09:51:08 | [diff] [blame] | 108 | void DidBeginMainFrame() override { |
[email protected] | 6f0fdcb | 2014-05-22 02:51:56 | [diff] [blame] | 109 | EXPECT_FALSE(ThreadProxyMainOnly().commit_requested); |
110 | EXPECT_FALSE(ThreadProxyMainOnly().commit_request_sent_to_impl_thread); | ||||
111 | |||||
112 | EndTest(); | ||||
113 | } | ||||
114 | |||||
115 | private: | ||||
116 | DISALLOW_COPY_AND_ASSIGN(ThreadProxyTestSetNeedsCommit); | ||||
117 | }; | ||||
118 | |||||
119 | THREAD_PROXY_TEST_F(ThreadProxyTestSetNeedsCommit); | ||||
120 | |||||
121 | } // namespace cc |