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

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

Issue 2676373004: Implement service-side surface synchronization (Closed)
Patch Set: Better unit test name Created 3 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "cc/surfaces/surface.h" 5 #include "cc/surfaces/surface.h"
6 #include "base/memory/ptr_util.h"
7 #include "cc/surfaces/surface_dependency_tracker.h"
6 #include "cc/surfaces/surface_factory.h" 8 #include "cc/surfaces/surface_factory.h"
7 #include "cc/surfaces/surface_factory_client.h" 9 #include "cc/surfaces/surface_factory_client.h"
8 #include "cc/surfaces/surface_id_allocator.h" 10 #include "cc/surfaces/surface_id_allocator.h"
9 #include "cc/surfaces/surface_manager.h" 11 #include "cc/surfaces/surface_manager.h"
12 #include "cc/test/begin_frame_args_test.h"
13 #include "cc/test/fake_external_begin_frame_source.h"
10 #include "cc/test/scheduler_test_common.h" 14 #include "cc/test/scheduler_test_common.h"
11 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gfx/geometry/size.h" 16 #include "ui/gfx/geometry/size.h"
13 17
14 namespace cc { 18 namespace cc {
15 namespace { 19 namespace {
16 20
17 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); 21 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1);
18 22
23 CompositorFrame MakeCompositorFrame(
24 std::vector<SurfaceId> referenced_surfaces) {
25 CompositorFrame compositor_frame;
26 compositor_frame.metadata.referenced_surfaces =
27 std::move(referenced_surfaces);
28 return compositor_frame;
29 }
30
19 class FakeSurfaceFactoryClient : public SurfaceFactoryClient { 31 class FakeSurfaceFactoryClient : public SurfaceFactoryClient {
20 public: 32 public:
21 FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {} 33 FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {}
22 34
23 void ReturnResources(const ReturnedResourceArray& resources) override {} 35 void ReturnResources(const ReturnedResourceArray& resources) override {}
24 36
25 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override { 37 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {
26 begin_frame_source_ = begin_frame_source; 38 begin_frame_source_ = begin_frame_source;
27 } 39 }
28 40
29 BeginFrameSource* begin_frame_source() { return begin_frame_source_; } 41 BeginFrameSource* begin_frame_source() { return begin_frame_source_; }
30 42
31 private: 43 private:
32 BeginFrameSource* begin_frame_source_; 44 BeginFrameSource* begin_frame_source_;
33 }; 45 };
34 46
47 // Surface 1 is blocked on Surface 2 and Surface 3.
48 TEST(SurfaceTest, DisplayCompositorLockingBlockedOnTwo) {
49 SurfaceManager manager;
50 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
51 new FakeExternalBeginFrameSource(0.f, false));
52
53 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker(
54 new SurfaceDependencyTracker(&manager, begin_frame_source.get()));
55 manager.SetDependencyTracker(std::move(dependency_tracker));
56
57 LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create());
58 SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1);
59
60 LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create());
61 SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2);
62
63 LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create());
64 SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3);
65
66 FakeSurfaceFactoryClient surface_factory_client1;
67 SurfaceFactory factory1(FrameSinkId(1, 1), &manager,
68 &surface_factory_client1);
69 factory1.SubmitCompositorFrame(
70 local_surface_id1, MakeCompositorFrame({surface_id2, surface_id3}),
71 SurfaceFactory::DrawCallback());
72 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
73
74 // |factory1| is blocked on |surface_id2| and |surface_id3|.
75 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
76 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
77
78 FakeSurfaceFactoryClient surface_factory_client2;
79 SurfaceFactory factory2(FrameSinkId(2, 2), &manager,
80 &surface_factory_client2);
81 factory2.SubmitCompositorFrame(local_surface_id2,
82 MakeCompositorFrame(std::vector<SurfaceId>()),
83 SurfaceFactory::DrawCallback());
84
85 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
86 EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame());
87 EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame());
88
89 // |factory1| is blocked on just |surface_id3|.
90 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
91 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
92
93 FakeSurfaceFactoryClient surface_factory_client3;
94 SurfaceFactory factory3(FrameSinkId(3, 3), &manager,
95 &surface_factory_client3);
96 factory3.SubmitCompositorFrame(local_surface_id3,
97 MakeCompositorFrame(std::vector<SurfaceId>()),
98 SurfaceFactory::DrawCallback());
99 EXPECT_FALSE(manager.dependency_tracker()->has_deadline());
100
101 // |factory1|'s Frame is now active.
102 EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame());
103 EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame());
104
105 factory1.EvictSurface();
106 factory2.EvictSurface();
107 factory3.EvictSurface();
108
109 // Destroy the SurfaceDependencyTracker before we destroy the
110 // BeginFrameSource.
111 manager.SetDependencyTracker(nullptr);
112 }
113
114 // Surface 1 is blocked on Surface 2 which is blocked on Surface 3.
115 TEST(SurfaceTest, DisplayCompositorLockingBlockedChain) {
116 SurfaceManager manager;
117 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
118 new FakeExternalBeginFrameSource(0.f, false));
119
120 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker(
121 new SurfaceDependencyTracker(&manager, begin_frame_source.get()));
122 manager.SetDependencyTracker(std::move(dependency_tracker));
123
124 LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create());
125 SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1);
126
127 LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create());
128 SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2);
129
130 LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create());
131 SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3);
132
133 FakeSurfaceFactoryClient surface_factory_client1;
134 SurfaceFactory factory1(FrameSinkId(1, 1), &manager,
135 &surface_factory_client1);
136 factory1.SubmitCompositorFrame(local_surface_id1,
137 MakeCompositorFrame({surface_id2}),
138 SurfaceFactory::DrawCallback());
139
140 // |factory1| is blocked on |surface_id2|.
141 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
142 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
143
144 FakeSurfaceFactoryClient surface_factory_client2;
145 SurfaceFactory factory2(FrameSinkId(2, 2), &manager,
146 &surface_factory_client2);
147 factory2.SubmitCompositorFrame(local_surface_id2,
148 MakeCompositorFrame({surface_id3}),
149 SurfaceFactory::DrawCallback());
150
151 // |factory2| is blocked on |surface_id3|.
152 EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame());
153 EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame());
154
155 // |factory1| is still blocked on just |surface_id2|.
156 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
157 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
158
159 FakeSurfaceFactoryClient surface_factory_client3;
160 SurfaceFactory factory3(FrameSinkId(3, 3), &manager,
161 &surface_factory_client3);
162 CompositorFrame frame3;
163 factory3.SubmitCompositorFrame(local_surface_id3,
164 MakeCompositorFrame(std::vector<SurfaceId>()),
165 SurfaceFactory::DrawCallback());
166
167 // |factory1|'s Frame is now active.
168 EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame());
169 EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame());
170
171 // |factory2|'s Frame is now active.
172 EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame());
173 EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame());
174
175 factory1.EvictSurface();
176 factory2.EvictSurface();
177 factory3.EvictSurface();
178
179 // Destroy the SurfaceDependencyTracker before we destroy the
180 // BeginFrameSource.
181 manager.SetDependencyTracker(nullptr);
182 }
183
184 // Surface 1 and Surface 2 are blocked on Surface 3.
185 TEST(SurfaceTest, DisplayCompositorLockingTwoBlockedOnOne) {
186 SurfaceManager manager;
187 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
188 new FakeExternalBeginFrameSource(0.f, false));
189
190 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker(
191 new SurfaceDependencyTracker(&manager, begin_frame_source.get()));
192 manager.SetDependencyTracker(std::move(dependency_tracker));
193
194 LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create());
195 SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1);
196
197 LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create());
198 SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2);
199
200 LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create());
201 SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3);
202
203 FakeSurfaceFactoryClient surface_factory_client1;
204 SurfaceFactory factory1(FrameSinkId(1, 1), &manager,
205 &surface_factory_client1);
206 factory1.SubmitCompositorFrame(local_surface_id1,
207 MakeCompositorFrame({surface_id3}),
208 SurfaceFactory::DrawCallback());
209
210 // |factory1| is blocked on |surface_id3|.
211 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
212 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
213
214 FakeSurfaceFactoryClient surface_factory_client2;
215 SurfaceFactory factory2(FrameSinkId(2, 2), &manager,
216 &surface_factory_client2);
217 factory2.SubmitCompositorFrame(local_surface_id2,
218 MakeCompositorFrame({surface_id3}),
219 SurfaceFactory::DrawCallback());
220
221 // |factory2| is blocked on |surface_id3|.
222 EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame());
223 EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame());
224
225 // |factory1| is still blocked on |surface_id3|.
226 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
227 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
228
229 FakeSurfaceFactoryClient surface_factory_client3;
230 SurfaceFactory factory3(FrameSinkId(3, 3), &manager,
231 &surface_factory_client3);
232 factory3.SubmitCompositorFrame(local_surface_id3,
233 MakeCompositorFrame(std::vector<SurfaceId>()),
234 SurfaceFactory::DrawCallback());
235
236 // |factory1|'s Frame is now active.
237 EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame());
238 EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame());
239
240 // |factory2|'s Frame is now active.
241 EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame());
242 EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame());
243
244 factory1.EvictSurface();
245 factory2.EvictSurface();
246 factory3.EvictSurface();
247
248 // Destroy the SurfaceDependencyTracker before we destroy the
249 // BeginFrameSource.
250 manager.SetDependencyTracker(nullptr);
251 }
252
253 // |factory1| is blocked on |surface_id2| but the deadline hits.
254 TEST(SurfaceTest, DisplayCompositorLockingDeadlineHits) {
255 SurfaceManager manager;
256 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
257 new FakeExternalBeginFrameSource(0.f, false));
258
259 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker(
260 new SurfaceDependencyTracker(&manager, begin_frame_source.get()));
261 manager.SetDependencyTracker(std::move(dependency_tracker));
262
263 LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create());
264 SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1);
265
266 LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create());
267 SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2);
268
269 LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create());
270 SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3);
271
272 FakeSurfaceFactoryClient surface_factory_client1;
273 SurfaceFactory factory1(FrameSinkId(1, 1), &manager,
274 &surface_factory_client1);
275 CompositorFrame frame;
276 factory1.SubmitCompositorFrame(local_surface_id1,
277 MakeCompositorFrame({surface_id2}),
278 SurfaceFactory::DrawCallback());
279 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
280
281 // |factory1| is blocked on |surface_id2|.
282 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
283 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
284
285 FakeSurfaceFactoryClient surface_factory_client2;
286 SurfaceFactory factory2(FrameSinkId(2, 2), &manager,
287 &surface_factory_client2);
288 factory2.SubmitCompositorFrame(local_surface_id2,
289 MakeCompositorFrame({surface_id3}),
290 SurfaceFactory::DrawCallback());
291 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
292
293 // |factory2| is blocked on |surface_id3|.
294 EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame());
295 EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame());
296
297 BeginFrameArgs args =
298 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
299
300 for (int i = 0; i < 3; ++i) {
301 begin_frame_source->TestOnBeginFrame(args);
302 // |factory1| is still blocked on |surface_id2|.
303 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
304 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
305
306 // |factory2| is still blcoked on |surface_id3|.
307 EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame());
308 EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame());
309 }
310
311 begin_frame_source->TestOnBeginFrame(args);
312
313 // |factory1| and |factory2| are no longer blocked.
314 EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame());
315 EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame());
316 EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame());
317 EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame());
318 EXPECT_FALSE(manager.dependency_tracker()->has_deadline());
319
320 factory1.EvictSurface();
321 factory2.EvictSurface();
322
323 // Destroy the SurfaceDependencyTracker before we destroy the
324 // BeginFrameSource.
325 manager.SetDependencyTracker(nullptr);
326 }
327
328 // Verifies that the deadline does not reset if we submit CompositorFrames
329 // to new Surfaces with unresolved dependencies.
330 TEST(SurfaceTest, DisplayCompositorLockingFramesSubmittedAfterDeadlineSet) {
331 SurfaceManager manager;
332 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
333 new FakeExternalBeginFrameSource(0.f, false));
334
335 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker(
336 new SurfaceDependencyTracker(&manager, begin_frame_source.get()));
337 manager.SetDependencyTracker(std::move(dependency_tracker));
338
339 LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create());
340 SurfaceId surface_id(FrameSinkId(1, 1), local_surface_id);
341
342 std::vector<std::unique_ptr<SurfaceFactoryClient>> surface_factory_clients;
343 std::vector<std::unique_ptr<SurfaceFactory>> surface_factories;
344
345 BeginFrameArgs args =
346 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
347
348 // Issue BeginFrames and create new surfaces with dependencies.
349 for (int i = 0; i < 3; ++i) {
350 LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create());
351 std::unique_ptr<SurfaceFactoryClient> surface_factory_client(
352 base::MakeUnique<FakeSurfaceFactoryClient>());
353 std::unique_ptr<SurfaceFactory> surface_factory(
354 base::MakeUnique<SurfaceFactory>(FrameSinkId(2 + i, 2 + i), &manager,
355 surface_factory_client.get()));
356 surface_factory->SubmitCompositorFrame(local_surface_id,
357 MakeCompositorFrame({surface_id}),
358 SurfaceFactory::DrawCallback());
359 // The deadline has been set.
360 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
361
362 // |surface_factory| is blocked on |surface_id2|.
363 EXPECT_FALSE(
364 surface_factory->current_surface_for_testing()->HasActiveFrame());
365 EXPECT_TRUE(
366 surface_factory->current_surface_for_testing()->HasPendingFrame());
367
368 // Issue a BeginFrame.
369 begin_frame_source->TestOnBeginFrame(args);
370
371 surface_factory_clients.push_back(std::move(surface_factory_client));
372 surface_factories.push_back(std::move(surface_factory));
373 }
374
375 // This BeginFrame should cause all the Surfaces to activate.
376 begin_frame_source->TestOnBeginFrame(args);
377
378 // Verify that all the Surfaces have activated.
379 for (int i = 0; i < 3; ++i) {
380 EXPECT_TRUE(
381 surface_factories[i]->current_surface_for_testing()->HasActiveFrame());
382 EXPECT_FALSE(
383 surface_factories[i]->current_surface_for_testing()->HasPendingFrame());
384 // We must evict the surface before we destroy the factories.
385 surface_factories[i]->EvictSurface();
386 }
387
388 // Destroy all the SurfaceFactories and their clients.
389 surface_factories.clear();
390 surface_factory_clients.clear();
391
392 // Destroy the SurfaceDependencyTracker before we destroy the
393 // BeginFrameSource.
394 manager.SetDependencyTracker(nullptr);
395 }
396
397 // Frame activates once a new frame is submitted.
398 TEST(SurfaceTest, DisplayCompositorLockingNewFrameOverridesOldDependencies) {
399 SurfaceManager manager;
400 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source(
401 new FakeExternalBeginFrameSource(0.f, false));
402
403 manager.SetDependencyTracker(base::MakeUnique<SurfaceDependencyTracker>(
404 &manager, begin_frame_source.get()));
405
406 LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create());
407 SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1);
408
409 LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create());
410 SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2);
411
412 FakeSurfaceFactoryClient surface_factory_client1;
413 SurfaceFactory factory1(FrameSinkId(1, 1), &manager,
414 &surface_factory_client1);
415 factory1.SubmitCompositorFrame(local_surface_id1,
416 MakeCompositorFrame({surface_id2}),
417 SurfaceFactory::DrawCallback());
418
419 // |factory1|'s Frame is blocked on |surface_id2|.
420 EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame());
421 EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame());
422 EXPECT_TRUE(manager.dependency_tracker()->has_deadline());
423
424 // Another frame is submitted to |factory1| that has no dependencies.
425 factory1.SubmitCompositorFrame(local_surface_id1,
426 MakeCompositorFrame(std::vector<SurfaceId>()),
427 SurfaceFactory::DrawCallback());
428 EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame());
429 EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame());
430 EXPECT_FALSE(manager.dependency_tracker()->has_deadline());
431
432 factory1.EvictSurface();
433
434 // Destroy the SurfaceDependencyTracker before we destroy the
435 // BeginFrameSource.
436 manager.SetDependencyTracker(nullptr);
437 }
438
35 TEST(SurfaceTest, SurfaceLifetime) { 439 TEST(SurfaceTest, SurfaceLifetime) {
36 SurfaceManager manager; 440 SurfaceManager manager;
37 FakeSurfaceFactoryClient surface_factory_client; 441 FakeSurfaceFactoryClient surface_factory_client;
38 SurfaceFactory factory(kArbitraryFrameSinkId, &manager, 442 SurfaceFactory factory(kArbitraryFrameSinkId, &manager,
39 &surface_factory_client); 443 &surface_factory_client);
40 444
41 LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); 445 LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create());
42 SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); 446 SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id);
43 factory.SubmitCompositorFrame(local_surface_id, CompositorFrame(), 447 factory.SubmitCompositorFrame(local_surface_id, CompositorFrame(),
44 SurfaceFactory::DrawCallback()); 448 SurfaceFactory::DrawCallback());
45 EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); 449 EXPECT_TRUE(manager.GetSurfaceForId(surface_id));
46 factory.EvictSurface(); 450 factory.EvictSurface();
47 451
48 EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id)); 452 EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id));
49 } 453 }
50 454
51 TEST(SurfaceTest, SurfaceIds) { 455 TEST(SurfaceTest, SurfaceIds) {
52 for (size_t i = 0; i < 3; ++i) { 456 for (size_t i = 0; i < 3; ++i) {
53 SurfaceIdAllocator allocator; 457 SurfaceIdAllocator allocator;
54 LocalSurfaceId id1 = allocator.GenerateId(); 458 LocalSurfaceId id1 = allocator.GenerateId();
55 LocalSurfaceId id2 = allocator.GenerateId(); 459 LocalSurfaceId id2 = allocator.GenerateId();
56 EXPECT_NE(id1, id2); 460 EXPECT_NE(id1, id2);
57 } 461 }
58 } 462 }
59 463
60 } // namespace 464 } // namespace
61 } // namespace cc 465 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698