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" |
10 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
11 | 13 |
12 namespace cc { | 14 namespace cc { |
13 | 15 |
14 class FakeFrameSinkManagerClient : public FrameSinkManagerClient { | 16 class FakeFrameSinkManagerClient : public FrameSinkManagerClient { |
15 public: | 17 public: |
16 explicit FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id) | 18 explicit FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id) |
17 : source_(nullptr), manager_(nullptr), frame_sink_id_(frame_sink_id) {} | 19 : source_(nullptr), manager_(nullptr), frame_sink_id_(frame_sink_id) {} |
18 | 20 |
19 FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id, | 21 FakeFrameSinkManagerClient(const FrameSinkId& frame_sink_id, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 EXPECT_EQ(nullptr, client.source()); | 108 EXPECT_EQ(nullptr, client.source()); |
107 EXPECT_EQ(nullptr, other_client.source()); | 109 EXPECT_EQ(nullptr, other_client.source()); |
108 | 110 |
109 // Re-set BFS for original | 111 // Re-set BFS for original |
110 manager_.RegisterBeginFrameSource(&source, client.frame_sink_id()); | 112 manager_.RegisterBeginFrameSource(&source, client.frame_sink_id()); |
111 EXPECT_EQ(&source, client.source()); | 113 EXPECT_EQ(&source, client.source()); |
112 manager_.UnregisterBeginFrameSource(&source); | 114 manager_.UnregisterBeginFrameSource(&source); |
113 EXPECT_EQ(nullptr, client.source()); | 115 EXPECT_EQ(nullptr, client.source()); |
114 } | 116 } |
115 | 117 |
| 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 std::unique_ptr<BeginFrameSource> begin_frame_source = |
| 126 manager_.CreatePrimaryBeginFrameSource(); |
| 127 begin_frame_source->AddObserver(&obs); |
| 128 |
| 129 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); |
| 130 std::unique_ptr<FakeExternalBeginFrameSource> external_source1 = |
| 131 base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false); |
| 132 manager_.RegisterBeginFrameSource(external_source1.get(), |
| 133 root1.frame_sink_id()); |
| 134 |
| 135 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); |
| 136 std::unique_ptr<FakeExternalBeginFrameSource> external_source2 = |
| 137 base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false); |
| 138 manager_.RegisterBeginFrameSource(external_source2.get(), |
| 139 root2.frame_sink_id()); |
| 140 |
| 141 BeginFrameArgs args = |
| 142 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); |
| 143 |
| 144 // Ticking |external_source2| does not propagate to |begin_frame_source|. |
| 145 { |
| 146 EXPECT_CALL(obs, OnBeginFrame(args)).Times(0); |
| 147 external_source2->TestOnBeginFrame(args); |
| 148 testing::Mock::VerifyAndClearExpectations(&obs); |
| 149 } |
| 150 |
| 151 // Ticking |external_source1| does propagate to |begin_frame_source| and |
| 152 // |obs|. |
| 153 { |
| 154 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1); |
| 155 external_source1->TestOnBeginFrame(args); |
| 156 testing::Mock::VerifyAndClearExpectations(&obs); |
| 157 } |
| 158 |
| 159 // Getting rid of |external_source1| means those BeginFrames will not |
| 160 // propagate. Instead, |external_source2|'s BeginFrames will propagate |
| 161 // to |begin_frame_source|. |
| 162 { |
| 163 manager_.UnregisterBeginFrameSource(external_source1.get()); |
| 164 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(0); |
| 165 external_source1->TestOnBeginFrame(args); |
| 166 testing::Mock::VerifyAndClearExpectations(&obs); |
| 167 |
| 168 EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1); |
| 169 external_source2->TestOnBeginFrame(args); |
| 170 testing::Mock::VerifyAndClearExpectations(&obs); |
| 171 } |
| 172 |
| 173 // Tear down |
| 174 manager_.UnregisterBeginFrameSource(external_source2.get()); |
| 175 begin_frame_source->RemoveObserver(&obs); |
| 176 } |
| 177 |
116 TEST_F(SurfaceManagerTest, MultipleDisplays) { | 178 TEST_F(SurfaceManagerTest, MultipleDisplays) { |
117 StubBeginFrameSource root1_source; | 179 StubBeginFrameSource root1_source; |
118 StubBeginFrameSource root2_source; | 180 StubBeginFrameSource root2_source; |
119 | 181 |
120 // root1 -> A -> B | 182 // root1 -> A -> B |
121 // root2 -> C | 183 // root2 -> C |
122 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); | 184 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); |
123 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); | 185 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); |
124 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_); | 186 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_); |
125 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_); | 187 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_); |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 } | 504 } |
443 | 505 |
444 INSTANTIATE_TEST_CASE_P( | 506 INSTANTIATE_TEST_CASE_P( |
445 SurfaceManagerOrderingParamTestInstantiation, | 507 SurfaceManagerOrderingParamTestInstantiation, |
446 SurfaceManagerOrderingParamTest, | 508 SurfaceManagerOrderingParamTest, |
447 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), | 509 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), |
448 ::testing::ValuesIn(kUnregisterOrderList), | 510 ::testing::ValuesIn(kUnregisterOrderList), |
449 ::testing::ValuesIn(kBFSOrderList))); | 511 ::testing::ValuesIn(kBFSOrderList))); |
450 | 512 |
451 } // namespace cc | 513 } // namespace cc |
OLD | NEW |