Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1164)

Side by Side Diff: cc/surfaces/surface_manager_unittest.cc

Issue 2880023002: cc::SurfaceDependencyTracker should not crash when a Display goes away (Closed)
Patch Set: Fix LayerTreeHostImpl unit tests Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/surfaces/surface_manager.cc ('k') | cc/surfaces/surface_synchronization_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 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
116 TEST_F(SurfaceManagerTest, MultipleDisplays) { 177 TEST_F(SurfaceManagerTest, MultipleDisplays) {
117 StubBeginFrameSource root1_source; 178 StubBeginFrameSource root1_source;
118 StubBeginFrameSource root2_source; 179 StubBeginFrameSource root2_source;
119 180
120 // root1 -> A -> B 181 // root1 -> A -> B
121 // root2 -> C 182 // root2 -> C
122 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_); 183 FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_);
123 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_); 184 FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_);
124 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_); 185 FakeFrameSinkManagerClient client_a(FrameSinkId(3, 3), &manager_);
125 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_); 186 FakeFrameSinkManagerClient client_b(FrameSinkId(4, 4), &manager_);
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } 503 }
443 504
444 INSTANTIATE_TEST_CASE_P( 505 INSTANTIATE_TEST_CASE_P(
445 SurfaceManagerOrderingParamTestInstantiation, 506 SurfaceManagerOrderingParamTestInstantiation,
446 SurfaceManagerOrderingParamTest, 507 SurfaceManagerOrderingParamTest,
447 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), 508 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList),
448 ::testing::ValuesIn(kUnregisterOrderList), 509 ::testing::ValuesIn(kUnregisterOrderList),
449 ::testing::ValuesIn(kBFSOrderList))); 510 ::testing::ValuesIn(kBFSOrderList)));
450 511
451 } // namespace cc 512 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surface_manager.cc ('k') | cc/surfaces/surface_synchronization_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698