OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "cc/scheduler/begin_frame_source.h" | 7 #include "cc/scheduler/begin_frame_source.h" |
8 #include "cc/surfaces/frame_sink_manager_client.h" | 8 #include "cc/surfaces/frame_sink_manager_client.h" |
9 #include "cc/surfaces/surface_manager.h" | 9 #include "cc/surfaces/surface_manager.h" |
10 #include "cc/test/begin_frame_source_test.h" | |
11 #include "cc/test/fake_external_begin_frame_source.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
13 | 11 |
14 namespace cc { | 12 namespace cc { |
15 | 13 |
16 class FakeFrameSinkManagerClient : public FrameSinkManagerClient { | 14 class FakeFrameSinkManagerClient : public FrameSinkManagerClient { |
17 public: | 15 public: |
18 explicit FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id) | 16 explicit FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id) |
19 : source_(nullptr), manager_(nullptr), frame_sink_id_(frame_sink_id) {} | 17 : source_(nullptr), manager_(nullptr), frame_sink_id_(frame_sink_id) {} |
20 | 18 |
21 FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id, | 19 FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 EXPECT_EQ(nullptr, client.source()); | 106 EXPECT_EQ(nullptr, client.source()); |
109 EXPECT_EQ(nullptr, other_client.source()); | 107 EXPECT_EQ(nullptr, other_client.source()); |
110 | 108 |
111 // Re-set BFS for original | 109 // Re-set BFS for original |
112 manager_.RegisterBeginFrameSource(&source, client.frame_sink_id()); | 110 manager_.RegisterBeginFrameSource(&source, client.frame_sink_id()); |
113 EXPECT_EQ(&source, client.source()); | 111 EXPECT_EQ(&source, client.source()); |
114 manager_.UnregisterBeginFrameSource(&source); | 112 manager_.UnregisterBeginFrameSource(&source); |
115 EXPECT_EQ(nullptr, client.source()); | 113 EXPECT_EQ(nullptr, client.source()); |
116 } | 114 } |
117 | 115 |
118 // This test verifies that a PrimaryBeginFrameSource will receive BeginFrames | |
119 // from the first BeginFrameSource registered. If that BeginFrameSource goes | |
120 // away then it will receive BeginFrames from the second BeginFrameSource. | |
121 TEST_F(SurfaceManagerTest, PrimaryBeginFrameSource) { | |
122 // This PrimaryBeginFrameSource should track the first BeginFrameSource | |
123 // registered with the SurfaceManager. | |
124 testing::NiceMock<MockBeginFrameObserver> obs; | |
125 BeginFrameSource* begin_frame_source = manager_.GetPrimaryBeginFrameSource(); | |
126 begin_frame_source->AddObserver(&obs); | |
127 | |
128 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); | |
129 std::unique_ptr<FakeExternalBeginFrameSource> external_source1 = | |
130 base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false); | |
131 manager_.RegisterBeginFrameSource(external_source1.get(), | |
132 root1.frame_sink_id()); | |
133 | |
134 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); | |
135 std::unique_ptr<FakeExternalBeginFrameSource> external_source2 = | |
136 base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false); | |
137 manager_.RegisterBeginFrameSource(external_source2.get(), | |
138 root2.frame_sink_id()); | |
139 | |
140 BeginFrameArgs args = | |
141 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); | |
142 | |
143 // Ticking |external_source2| does not propagate to |begin_frame_source|. | |
144 { | |
145 EXPECT_CALL(obs, OnBeginFrame(args)).Times(0); | |
146 external_source2->TestOnBeginFrame(args); | |
147 testing::Mock::VerifyAndClearExpectations(&obs); | |
148 } | |
149 | |
150 // Ticking |external_source1| does propagate to |begin_frame_source| and | |
151 // |obs|. | |
152 { | |
153 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1); | |
154 external_source1->TestOnBeginFrame(args); | |
155 testing::Mock::VerifyAndClearExpectations(&obs); | |
156 } | |
157 | |
158 // Getting rid of |external_source1| means those BeginFrames will not | |
159 // propagate. Instead, |external_source2|'s BeginFrames will propagate | |
160 // to |begin_frame_source|. | |
161 { | |
162 manager_.UnregisterBeginFrameSource(external_source1.get()); | |
163 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(0); | |
164 external_source1->TestOnBeginFrame(args); | |
165 testing::Mock::VerifyAndClearExpectations(&obs); | |
166 | |
167 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1); | |
168 external_source2->TestOnBeginFrame(args); | |
169 testing::Mock::VerifyAndClearExpectations(&obs); | |
170 } | |
171 | |
172 // Tear down | |
173 manager_.UnregisterBeginFrameSource(external_source2.get()); | |
174 begin_frame_source->RemoveObserver(&obs); | |
175 } | |
176 | |
177 TEST_F(SurfaceManagerTest, MultipleDisplays) { | 116 TEST_F(SurfaceManagerTest, MultipleDisplays) { |
178 StubBeginFrameSource root1_source; | 117 StubBeginFrameSource root1_source; |
179 StubBeginFrameSource root2_source; | 118 StubBeginFrameSource root2_source; |
180 | 119 |
181 // root1 -> A -> B | 120 // root1 -> A -> B |
182 // root2 -> C | 121 // root2 -> C |
183 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); | 122 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); |
184 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); | 123 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); |
185 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_); | 124 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_); |
186 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_); | 125 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_); |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 } | 442 } |
504 | 443 |
505 INSTANTIATE_TEST_CASE_P( | 444 INSTANTIATE_TEST_CASE_P( |
506 SurfaceManagerOrderingParamTestInstantiation, | 445 SurfaceManagerOrderingParamTestInstantiation, |
507 SurfaceManagerOrderingParamTest, | 446 SurfaceManagerOrderingParamTest, |
508 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), | 447 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), |
509 ::testing::ValuesIn(kUnregisterOrderList), | 448 ::testing::ValuesIn(kUnregisterOrderList), |
510 ::testing::ValuesIn(kBFSOrderList))); | 449 ::testing::ValuesIn(kBFSOrderList))); |
511 | 450 |
512 } // namespace cc | 451 } // namespace cc |
OLD | NEW |