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

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

Issue 2591013004: [cc] Add and use BeginFrameAck for DidFinishFrame. (Closed)
Patch Set: address Brian's comments + fix DisplaySchedulerTests. Created 3 years, 12 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/display_scheduler.cc ('k') | cc/test/fake_external_begin_frame_source.h » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/display_scheduler.h" 5 #include "cc/surfaces/display_scheduler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/test/null_task_runner.h" 8 #include "base/test/null_task_runner.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 int max_pending_swaps) 47 int max_pending_swaps)
48 : DisplayScheduler(task_runner, max_pending_swaps), 48 : DisplayScheduler(task_runner, max_pending_swaps),
49 scheduler_begin_frame_deadline_count_(0) { 49 scheduler_begin_frame_deadline_count_(0) {
50 SetBeginFrameSource(begin_frame_source); 50 SetBeginFrameSource(begin_frame_source);
51 } 51 }
52 52
53 base::TimeTicks DesiredBeginFrameDeadlineTimeForTest() { 53 base::TimeTicks DesiredBeginFrameDeadlineTimeForTest() {
54 return DesiredBeginFrameDeadlineTime(); 54 return DesiredBeginFrameDeadlineTime();
55 } 55 }
56 56
57 void BeginFrameDeadlineForTest() { OnBeginFrameDeadline(); } 57 void BeginFrameDeadlineForTest() {
58 // Ensure that any missed BeginFrames were handled by the scheduler. We need
59 // to run the scheduled task ourselves since the NullTaskRunner won't.
60 if (!missed_begin_frame_task_.IsCancelled())
61 missed_begin_frame_task_.callback().Run();
62 OnBeginFrameDeadline();
63 }
58 64
59 void ScheduleBeginFrameDeadline() override { 65 void ScheduleBeginFrameDeadline() override {
60 scheduler_begin_frame_deadline_count_++; 66 scheduler_begin_frame_deadline_count_++;
61 DisplayScheduler::ScheduleBeginFrameDeadline(); 67 DisplayScheduler::ScheduleBeginFrameDeadline();
62 } 68 }
63 69
64 int scheduler_begin_frame_deadline_count() { 70 int scheduler_begin_frame_deadline_count() {
65 return scheduler_begin_frame_deadline_count_; 71 return scheduler_begin_frame_deadline_count_;
66 } 72 }
67 73
74 bool inside_begin_frame_deadline_interval() {
75 return inside_begin_frame_deadline_interval_;
76 }
77
68 protected: 78 protected:
69 int scheduler_begin_frame_deadline_count_; 79 int scheduler_begin_frame_deadline_count_;
70 }; 80 };
71 81
72 class DisplaySchedulerTest : public testing::Test { 82 class DisplaySchedulerTest : public testing::Test {
73 public: 83 public:
74 DisplaySchedulerTest() 84 DisplaySchedulerTest()
75 : fake_begin_frame_source_(0.f, false), 85 : fake_begin_frame_source_(0.f, false),
76 task_runner_(new base::NullTaskRunner), 86 task_runner_(new base::NullTaskRunner),
77 scheduler_(&fake_begin_frame_source_, 87 scheduler_(&fake_begin_frame_source_,
78 task_runner_.get(), 88 task_runner_.get(),
79 kMaxPendingSwaps) { 89 kMaxPendingSwaps) {
80 now_src_.Advance(base::TimeDelta::FromMicroseconds(10000)); 90 now_src_.Advance(base::TimeDelta::FromMicroseconds(10000));
81 scheduler_.SetClient(&client_); 91 scheduler_.SetClient(&client_);
82 } 92 }
83 93
84 ~DisplaySchedulerTest() override {} 94 ~DisplaySchedulerTest() override {}
85 95
86 void SetUp() override { scheduler_.SetRootSurfaceResourcesLocked(false); } 96 void SetUp() override { scheduler_.SetRootSurfaceResourcesLocked(false); }
87 97
88 void BeginFrameForTest() { 98 void BeginFrameForTest() {
99 now_src_.Advance(base::TimeDelta::FromMicroseconds(10000));
brianderson 2017/01/03 19:30:16 To help test readability, can you make it explicit
Eric Seckler 2017/01/04 10:14:49 Done.
89 base::TimeTicks frame_time = now_src_.NowTicks(); 100 base::TimeTicks frame_time = now_src_.NowTicks();
90 base::TimeDelta interval = BeginFrameArgs::DefaultInterval(); 101 base::TimeDelta interval = BeginFrameArgs::DefaultInterval();
91 base::TimeTicks deadline = frame_time + interval; 102 base::TimeTicks deadline = frame_time + interval;
92 // FakeBeginFrameSource deals with |source_id| and |sequence_number|. 103 // FakeBeginFrameSource deals with |source_id| and |sequence_number|.
93 fake_begin_frame_source_.TestOnBeginFrame( 104 fake_begin_frame_source_.TestOnBeginFrame(
94 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, 0, 1, frame_time, deadline, 105 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, 0, 1, frame_time, deadline,
95 interval, BeginFrameArgs::NORMAL)); 106 interval, BeginFrameArgs::NORMAL));
96 } 107 }
97 108
98 protected: 109 protected:
(...skipping 20 matching lines...) Expand all
119 130
120 scheduler_.SetVisible(true); 131 scheduler_.SetVisible(true);
121 132
122 // Go trough an initial BeginFrame cycle with the root surface. 133 // Go trough an initial BeginFrame cycle with the root surface.
123 BeginFrameForTest(); 134 BeginFrameForTest();
124 scheduler_.SetNewRootSurface(root_surface_id1); 135 scheduler_.SetNewRootSurface(root_surface_id1);
125 scheduler_.BeginFrameDeadlineForTest(); 136 scheduler_.BeginFrameDeadlineForTest();
126 137
127 // Resize on the next begin frame cycle should cause the deadline to wait 138 // Resize on the next begin frame cycle should cause the deadline to wait
128 // for a new root surface. 139 // for a new root surface.
140 BeginFrameForTest();
129 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 141 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
130 BeginFrameForTest();
131 scheduler_.SurfaceDamaged(sid1); 142 scheduler_.SurfaceDamaged(sid1);
132 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 143 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
133 scheduler_.DisplayResized(); 144 scheduler_.DisplayResized();
134 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 145 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
135 scheduler_.SetNewRootSurface(root_surface_id2); 146 scheduler_.SetNewRootSurface(root_surface_id2);
136 EXPECT_GE(now_src().NowTicks(), 147 EXPECT_GE(now_src().NowTicks(),
137 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 148 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
138 scheduler_.BeginFrameDeadlineForTest(); 149 scheduler_.BeginFrameDeadlineForTest();
139 150
140 // Verify deadline goes back to normal after resize. 151 // Verify deadline goes back to normal after resize.
(...skipping 16 matching lines...) Expand all
157 168
158 scheduler_.SetVisible(true); 169 scheduler_.SetVisible(true);
159 170
160 // Go trough an initial BeginFrame cycle with the root surface. 171 // Go trough an initial BeginFrame cycle with the root surface.
161 BeginFrameForTest(); 172 BeginFrameForTest();
162 scheduler_.SetNewRootSurface(root_surface_id); 173 scheduler_.SetNewRootSurface(root_surface_id);
163 scheduler_.BeginFrameDeadlineForTest(); 174 scheduler_.BeginFrameDeadlineForTest();
164 175
165 // Resize on the next begin frame cycle should cause the deadline to wait 176 // Resize on the next begin frame cycle should cause the deadline to wait
166 // for a new root surface. 177 // for a new root surface.
178 BeginFrameForTest();
167 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 179 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
168 BeginFrameForTest();
169 scheduler_.SurfaceDamaged(sid1); 180 scheduler_.SurfaceDamaged(sid1);
170 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 181 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
171 scheduler_.DisplayResized(); 182 scheduler_.DisplayResized();
172 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 183 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
173 scheduler_.SurfaceDamaged(root_surface_id); 184 scheduler_.SurfaceDamaged(root_surface_id);
174 EXPECT_GE(now_src().NowTicks(), 185 EXPECT_GE(now_src().NowTicks(),
175 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 186 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
176 scheduler_.BeginFrameDeadlineForTest(); 187 scheduler_.BeginFrameDeadlineForTest();
177 188
178 // Verify deadline goes back to normal after resize. 189 // Verify deadline goes back to normal after resize.
190 BeginFrameForTest();
179 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 191 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
180 BeginFrameForTest();
181 scheduler_.SurfaceDamaged(sid1); 192 scheduler_.SurfaceDamaged(sid1);
182 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 193 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
183 scheduler_.SurfaceDamaged(root_surface_id); 194 scheduler_.SurfaceDamaged(root_surface_id);
184 EXPECT_GE(now_src().NowTicks(), 195 EXPECT_GE(now_src().NowTicks(),
185 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 196 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
186 scheduler_.BeginFrameDeadlineForTest(); 197 scheduler_.BeginFrameDeadlineForTest();
187 } 198 }
188 199
189 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { 200 TEST_F(DisplaySchedulerTest, SurfaceDamaged) {
190 SurfaceId root_surface_id(kArbitraryFrameSinkId, 201 SurfaceId root_surface_id(kArbitraryFrameSinkId,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 246 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
236 scheduler_.SurfaceDamaged(sid2); 247 scheduler_.SurfaceDamaged(sid2);
237 EXPECT_GE(now_src().NowTicks(), 248 EXPECT_GE(now_src().NowTicks(),
238 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 249 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
239 scheduler_.BeginFrameDeadlineForTest(); 250 scheduler_.BeginFrameDeadlineForTest();
240 251
241 // Make the system idle 252 // Make the system idle
242 BeginFrameForTest(); 253 BeginFrameForTest();
243 scheduler_.BeginFrameDeadlineForTest(); 254 scheduler_.BeginFrameDeadlineForTest();
244 BeginFrameForTest(); 255 BeginFrameForTest();
245 scheduler_.BeginFrameDeadlineForTest(); 256 EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval());
246 257
247 // Deadline should trigger early if child surfaces are idle and 258 // Deadline should trigger early if child surfaces are idle and
248 // we get damage on the root surface. 259 // we get damage on the root surface.
249 BeginFrameForTest(); 260 BeginFrameForTest();
250 EXPECT_LT(now_src().NowTicks(), 261 EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval());
251 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
252 scheduler_.SurfaceDamaged(root_surface_id); 262 scheduler_.SurfaceDamaged(root_surface_id);
253 EXPECT_GE(now_src().NowTicks(), 263 EXPECT_GE(now_src().NowTicks(),
254 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 264 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
255 scheduler_.BeginFrameDeadlineForTest(); 265 scheduler_.BeginFrameDeadlineForTest();
256 } 266 }
257 267
258 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { 268 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
259 SurfaceId root_surface_id(kArbitraryFrameSinkId, 269 SurfaceId root_surface_id(kArbitraryFrameSinkId,
260 LocalFrameId(0, base::UnguessableToken::Create())); 270 LocalFrameId(0, base::UnguessableToken::Create()));
261 SurfaceId sid1(kArbitraryFrameSinkId, 271 SurfaceId sid1(kArbitraryFrameSinkId,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 // DrawAndSwap normally. 426 // DrawAndSwap normally.
417 BeginFrameForTest(); 427 BeginFrameForTest();
418 EXPECT_LT(now_src().NowTicks(), 428 EXPECT_LT(now_src().NowTicks(),
419 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 429 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
420 EXPECT_EQ(0, client_.draw_and_swap_count()); 430 EXPECT_EQ(0, client_.draw_and_swap_count());
421 scheduler_.SurfaceDamaged(sid1); 431 scheduler_.SurfaceDamaged(sid1);
422 scheduler_.BeginFrameDeadlineForTest(); 432 scheduler_.BeginFrameDeadlineForTest();
423 EXPECT_EQ(1, client_.draw_and_swap_count()); 433 EXPECT_EQ(1, client_.draw_and_swap_count());
424 434
425 // Deadline triggers late while root resources are locked. 435 // Deadline triggers late while root resources are locked.
436 BeginFrameForTest();
426 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 437 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
427 BeginFrameForTest();
428 scheduler_.SurfaceDamaged(sid1); 438 scheduler_.SurfaceDamaged(sid1);
429 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 439 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
430 scheduler_.SetRootSurfaceResourcesLocked(true); 440 scheduler_.SetRootSurfaceResourcesLocked(true);
431 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 441 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
432 442
433 // Deadline does not DrawAndSwap while root resources are locked. 443 // Deadline does not DrawAndSwap while root resources are locked.
434 EXPECT_EQ(1, client_.draw_and_swap_count()); 444 EXPECT_EQ(1, client_.draw_and_swap_count());
435 scheduler_.SurfaceDamaged(sid1); 445 scheduler_.SurfaceDamaged(sid1);
436 scheduler_.BeginFrameDeadlineForTest(); 446 scheduler_.BeginFrameDeadlineForTest();
437 EXPECT_EQ(1, client_.draw_and_swap_count()); 447 EXPECT_EQ(1, client_.draw_and_swap_count());
438 448
439 // Deadline triggers normally when root resources are unlocked. 449 // Deadline triggers normally when root resources are unlocked.
450 BeginFrameForTest();
440 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 451 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
441 BeginFrameForTest();
442 scheduler_.SurfaceDamaged(sid1); 452 scheduler_.SurfaceDamaged(sid1);
443 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 453 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
444 scheduler_.SetRootSurfaceResourcesLocked(false); 454 scheduler_.SetRootSurfaceResourcesLocked(false);
445 scheduler_.SurfaceDamaged(root_surface_id); 455 scheduler_.SurfaceDamaged(root_surface_id);
446 EXPECT_EQ(base::TimeTicks(), 456 EXPECT_EQ(base::TimeTicks(),
447 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 457 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
448 458
449 EXPECT_EQ(1, client_.draw_and_swap_count()); 459 EXPECT_EQ(1, client_.draw_and_swap_count());
450 scheduler_.BeginFrameDeadlineForTest(); 460 scheduler_.BeginFrameDeadlineForTest();
451 EXPECT_EQ(2, client_.draw_and_swap_count()); 461 EXPECT_EQ(2, client_.draw_and_swap_count());
(...skipping 27 matching lines...) Expand all
479 EXPECT_LT(now_src().NowTicks(), 489 EXPECT_LT(now_src().NowTicks(),
480 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 490 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
481 EXPECT_EQ(2, client_.draw_and_swap_count()); 491 EXPECT_EQ(2, client_.draw_and_swap_count());
482 scheduler_.SurfaceDamaged(sid1); 492 scheduler_.SurfaceDamaged(sid1);
483 scheduler_.SurfaceDamaged(sid2); 493 scheduler_.SurfaceDamaged(sid2);
484 scheduler_.BeginFrameDeadlineForTest(); 494 scheduler_.BeginFrameDeadlineForTest();
485 EXPECT_EQ(3, client_.draw_and_swap_count()); 495 EXPECT_EQ(3, client_.draw_and_swap_count());
486 scheduler_.DidSwapBuffers(); 496 scheduler_.DidSwapBuffers();
487 497
488 // Deadline triggers late when swap throttled. 498 // Deadline triggers late when swap throttled.
499 BeginFrameForTest();
489 base::TimeTicks late_deadline = 500 base::TimeTicks late_deadline =
490 now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 501 now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
491 BeginFrameForTest();
492 // Damage surface 1, but not surface 2 so we avoid triggering deadline 502 // Damage surface 1, but not surface 2 so we avoid triggering deadline
493 // early because all surfaces are ready. 503 // early because all surfaces are ready.
494 scheduler_.SurfaceDamaged(sid1); 504 scheduler_.SurfaceDamaged(sid1);
495 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 505 EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
496 506
497 // Don't draw and swap in deadline while swap throttled. 507 // Don't draw and swap in deadline while swap throttled.
498 EXPECT_EQ(3, client_.draw_and_swap_count()); 508 EXPECT_EQ(3, client_.draw_and_swap_count());
499 scheduler_.BeginFrameDeadlineForTest(); 509 scheduler_.BeginFrameDeadlineForTest();
500 EXPECT_EQ(3, client_.draw_and_swap_count()); 510 EXPECT_EQ(3, client_.draw_and_swap_count());
501 511
502 // Deadline triggers normally once not swap throttled. 512 // Deadline triggers normally once not swap throttled.
503 // Damage from previous BeginFrame should cary over, so don't damage again. 513 // Damage from previous BeginFrame should cary over, so don't damage again.
514 scheduler_.DidReceiveSwapBuffersAck();
515 BeginFrameForTest();
504 base::TimeTicks expected_deadline = 516 base::TimeTicks expected_deadline =
505 scheduler_.LastUsedBeginFrameArgs().deadline - 517 scheduler_.LastUsedBeginFrameArgs().deadline -
506 BeginFrameArgs::DefaultEstimatedParentDrawTime(); 518 BeginFrameArgs::DefaultEstimatedParentDrawTime();
507 scheduler_.DidReceiveSwapBuffersAck();
508 BeginFrameForTest();
509 EXPECT_EQ(expected_deadline, 519 EXPECT_EQ(expected_deadline,
510 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 520 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
511 // Still waiting for surface 2. Once it updates, deadline should trigger 521 // Still waiting for surface 2. Once it updates, deadline should trigger
512 // immediately again. 522 // immediately again.
513 scheduler_.SurfaceDamaged(sid2); 523 scheduler_.SurfaceDamaged(sid2);
514 EXPECT_EQ(scheduler_.DesiredBeginFrameDeadlineTimeForTest(), 524 EXPECT_EQ(scheduler_.DesiredBeginFrameDeadlineTimeForTest(),
515 base::TimeTicks()); 525 base::TimeTicks());
516 // Draw and swap now that we aren't throttled. 526 // Draw and swap now that we aren't throttled.
517 EXPECT_EQ(3, client_.draw_and_swap_count()); 527 EXPECT_EQ(3, client_.draw_and_swap_count());
518 scheduler_.BeginFrameDeadlineForTest(); 528 scheduler_.BeginFrameDeadlineForTest();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 581
572 scheduler_.SetRootSurfaceResourcesLocked(true); 582 scheduler_.SetRootSurfaceResourcesLocked(true);
573 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); 583 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
574 584
575 scheduler_.OutputSurfaceLost(); 585 scheduler_.OutputSurfaceLost();
576 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); 586 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
577 } 587 }
578 588
579 } // namespace 589 } // namespace
580 } // namespace cc 590 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/test/fake_external_begin_frame_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698