blob: 66340e7bbfff31d24fba738036a02dfe1f6a7f90 [file] [log] [blame]
[email protected]6f0fdcb2014-05-22 02:51:561// 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 Jansensab277762015-06-12 23:52:5510#define THREAD_PROXY_TEST_F(TEST_FIXTURE_NAME) \
11 TEST_F(TEST_FIXTURE_NAME, MultiThread) { Run(true); }
[email protected]6f0fdcb2014-05-22 02:51:5612
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
18namespace cc {
19
20class ProxyTest : public LayerTreeTest {
21 protected:
22 ProxyTest() {}
dcheng93a52eb2014-12-23 02:14:2323 ~ProxyTest() override {}
[email protected]6f0fdcb2014-05-22 02:51:5624
Dana Jansensab277762015-06-12 23:52:5525 void Run(bool threaded) {
[email protected]6f0fdcb2014-05-22 02:51:5626 // We don't need to care about delegating mode.
27 bool delegating_renderer = true;
28
Dana Jansensab277762015-06-12 23:52:5529 RunTest(threaded, delegating_renderer);
[email protected]6f0fdcb2014-05-22 02:51:5630 }
31
dcheng716bedf2014-10-21 09:51:0832 void BeginTest() override {}
33 void AfterTest() override {}
[email protected]6f0fdcb2014-05-22 02:51:5634
35 private:
36 DISALLOW_COPY_AND_ASSIGN(ProxyTest);
37};
38
39class ProxyTestScheduledActionsBasic : public ProxyTest {
40 protected:
dcheng716bedf2014-10-21 09:51:0841 void BeginTest() override { proxy()->SetNeedsCommit(); }
[email protected]6f0fdcb2014-05-22 02:51:5642
dcheng716bedf2014-10-21 09:51:0843 void ScheduledActionBeginOutputSurfaceCreation() override {
[email protected]6f0fdcb2014-05-22 02:51:5644 EXPECT_EQ(0, action_phase_++);
45 }
46
dcheng716bedf2014-10-21 09:51:0847 void ScheduledActionSendBeginMainFrame() override {
[email protected]6f0fdcb2014-05-22 02:51:5648 EXPECT_EQ(1, action_phase_++);
49 }
50
dcheng716bedf2014-10-21 09:51:0851 void ScheduledActionCommit() override { EXPECT_EQ(2, action_phase_++); }
[email protected]6f0fdcb2014-05-22 02:51:5652
dcheng716bedf2014-10-21 09:51:0853 void ScheduledActionDrawAndSwapIfPossible() override {
[email protected]6f0fdcb2014-05-22 02:51:5654 EXPECT_EQ(3, action_phase_++);
55 EndTest();
56 }
57
dcheng716bedf2014-10-21 09:51:0858 void AfterTest() override { EXPECT_EQ(4, action_phase_); }
[email protected]6f0fdcb2014-05-22 02:51:5659
60 ProxyTestScheduledActionsBasic() : action_phase_(0) {
61 }
dcheng93a52eb2014-12-23 02:14:2362 ~ProxyTestScheduledActionsBasic() override {}
[email protected]6f0fdcb2014-05-22 02:51:5663
64 private:
65 int action_phase_;
66
67 DISALLOW_COPY_AND_ASSIGN(ProxyTestScheduledActionsBasic);
68};
69
70PROXY_TEST_SCHEDULED_ACTION(ProxyTestScheduledActionsBasic);
71
72class ThreadProxyTest : public ProxyTest {
73 protected:
74 ThreadProxyTest() {}
dcheng93a52eb2014-12-23 02:14:2375 ~ThreadProxyTest() override {}
[email protected]6f0fdcb2014-05-22 02:51:5676
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
93class ThreadProxyTestSetNeedsCommit : public ThreadProxyTest {
94 protected:
95 ThreadProxyTestSetNeedsCommit() {}
dcheng93a52eb2014-12-23 02:14:2396 ~ThreadProxyTestSetNeedsCommit() override {}
[email protected]6f0fdcb2014-05-22 02:51:5697
dcheng716bedf2014-10-21 09:51:0898 void BeginTest() override {
[email protected]6f0fdcb2014-05-22 02:51:5699 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
dcheng716bedf2014-10-21 09:51:08108 void DidBeginMainFrame() override {
[email protected]6f0fdcb2014-05-22 02:51:56109 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
119THREAD_PROXY_TEST_F(ThreadProxyTestSetNeedsCommit);
120
121} // namespace cc