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

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

Issue 2750223005: Preserve FrameSinkSourceMapping nodes that have path to root (Closed)
Patch Set: UnregisterBeginFrameSource, fix debug build of unit test Created 3 years, 9 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
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/surface_factory_client.h" 8 #include "cc/surfaces/surface_factory_client.h"
9 #include "cc/surfaces/surface_manager.h" 9 #include "cc/surfaces/surface_manager.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 174
175 // Cleanup hierarchy. 175 // Cleanup hierarchy.
176 manager_.UnregisterFrameSinkHierarchy(root2.frame_sink_id(), 176 manager_.UnregisterFrameSinkHierarchy(root2.frame_sink_id(),
177 client_c.frame_sink_id()); 177 client_c.frame_sink_id());
178 manager_.UnregisterFrameSinkHierarchy(client_c.frame_sink_id(), 178 manager_.UnregisterFrameSinkHierarchy(client_c.frame_sink_id(),
179 client_a.frame_sink_id()); 179 client_a.frame_sink_id());
180 manager_.UnregisterFrameSinkHierarchy(client_a.frame_sink_id(), 180 manager_.UnregisterFrameSinkHierarchy(client_a.frame_sink_id(),
181 client_b.frame_sink_id()); 181 client_b.frame_sink_id());
182 } 182 }
183 183
184 // This test verifies that a BeginFrameSource path to the root from a
185 // FrameSinkId is preserved even if that FrameSinkId has no children
186 // and does not have a corresponding SurfaceFactoryClient.
187 TEST_F(SurfaceManagerTest, ParentWithoutClientRetained) {
188 StubBeginFrameSource root_source;
189
190 constexpr FrameSinkId kFrameSinkIdRoot(1, 1);
191 constexpr FrameSinkId kFrameSinkIdA(2, 2);
192 constexpr FrameSinkId kFrameSinkIdB(3, 3);
193 constexpr FrameSinkId kFrameSinkIdC(4, 4);
194
195 FakeSurfaceFactoryClient root(kFrameSinkIdRoot, &manager_);
196 FakeSurfaceFactoryClient client_b(kFrameSinkIdB, &manager_);
197 FakeSurfaceFactoryClient client_c(kFrameSinkIdC, &manager_);
198
199 manager_.RegisterBeginFrameSource(&root_source, root.frame_sink_id());
200 EXPECT_EQ(&root_source, root.source());
201
202 // Set up initial hierarchy: root -> A -> B.
203 // Note that A does not have a SurfaceFactoryClient.
204 manager_.RegisterFrameSinkHierarchy(kFrameSinkIdRoot, kFrameSinkIdA);
205 manager_.RegisterFrameSinkHierarchy(kFrameSinkIdA, kFrameSinkIdB);
206 // The root's BeginFrameSource should propagate to B.
207 EXPECT_EQ(root.source(), client_b.source());
208
209 // Unregister B, and attach C to A: root -> A -> C
210 manager_.UnregisterFrameSinkHierarchy(kFrameSinkIdA, kFrameSinkIdB);
211 EXPECT_EQ(nullptr, client_b.source());
212 manager_.RegisterFrameSinkHierarchy(kFrameSinkIdA, kFrameSinkIdC);
213 // The root's BeginFrameSource should propagate to C.
214 EXPECT_EQ(root.source(), client_c.source());
215
216 manager_.UnregisterBeginFrameSource(&root_source);
217 EXPECT_EQ(nullptr, root.source());
218 EXPECT_EQ(nullptr, client_c.source());
219 }
220
184 // In practice, registering and unregistering both parent/child relationships 221 // In practice, registering and unregistering both parent/child relationships
185 // and SurfaceFactoryClients can happen in any ordering with respect to 222 // and SurfaceFactoryClients can happen in any ordering with respect to
186 // each other. These following tests verify that all the data structures 223 // each other. These following tests verify that all the data structures
187 // are properly set up and cleaned up under the four permutations of orderings 224 // are properly set up and cleaned up under the four permutations of orderings
188 // of this nesting. 225 // of this nesting.
189 226
190 class SurfaceManagerOrderingTest : public SurfaceManagerTest { 227 class SurfaceManagerOrderingTest : public SurfaceManagerTest {
191 public: 228 public:
192 SurfaceManagerOrderingTest() 229 SurfaceManagerOrderingTest()
193 : client_a_(FrameSinkId(1, 1)), 230 : client_a_(FrameSinkId(1, 1)),
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 403 }
367 404
368 INSTANTIATE_TEST_CASE_P( 405 INSTANTIATE_TEST_CASE_P(
369 SurfaceManagerOrderingParamTestInstantiation, 406 SurfaceManagerOrderingParamTestInstantiation,
370 SurfaceManagerOrderingParamTest, 407 SurfaceManagerOrderingParamTest,
371 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList), 408 ::testing::Combine(::testing::ValuesIn(kRegisterOrderList),
372 ::testing::ValuesIn(kUnregisterOrderList), 409 ::testing::ValuesIn(kUnregisterOrderList),
373 ::testing::ValuesIn(kBFSOrderList))); 410 ::testing::ValuesIn(kBFSOrderList)));
374 411
375 } // namespace cc 412 } // namespace cc
OLDNEW
« cc/surfaces/surface_manager.cc ('K') | « cc/surfaces/surface_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698