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

Side by Side Diff: cc/scheduler/scheduler_unittest.cc

Issue 1418273002: cc: Move draw params from SetExternalDrawConstraints to OnDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EXPECT_SCOPED Created 5 years 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/scheduler/scheduler.cc ('k') | cc/surfaces/display.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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 328
329 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks()); 329 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks());
330 scheduler_->NotifyReadyToCommit(); 330 scheduler_->NotifyReadyToCommit();
331 scheduler_->NotifyReadyToActivate(); 331 scheduler_->NotifyReadyToActivate();
332 scheduler_->NotifyReadyToDraw(); 332 scheduler_->NotifyReadyToDraw();
333 333
334 EXPECT_FALSE(scheduler_->CommitPending()); 334 EXPECT_FALSE(scheduler_->CommitPending());
335 335
336 if (scheduler_settings_.using_synchronous_renderer_compositor) { 336 if (scheduler_settings_.using_synchronous_renderer_compositor) {
337 scheduler_->SetNeedsRedraw(); 337 scheduler_->SetNeedsRedraw();
338 scheduler_->OnDrawForOutputSurface(); 338 bool resourceless_software_draw = false;
339 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
339 } else { 340 } else {
340 // Run the posted deadline task. 341 // Run the posted deadline task.
341 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); 342 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
342 task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(true)); 343 task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(true));
343 } 344 }
344 345
345 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 346 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
346 } 347 }
347 348
348 client_->Reset(); 349 client_->Reset();
(...skipping 2735 matching lines...) Expand 10 before | Expand all | Expand 10 after
3084 3085
3085 // Next vsync. 3086 // Next vsync.
3086 AdvanceFrame(); 3087 AdvanceFrame();
3087 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3088 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3088 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3089 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3089 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3090 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3090 client_->Reset(); 3091 client_->Reset();
3091 3092
3092 // Android onDraw. This doesn't consume the single begin frame request. 3093 // Android onDraw. This doesn't consume the single begin frame request.
3093 scheduler_->SetNeedsRedraw(); 3094 scheduler_->SetNeedsRedraw();
3094 scheduler_->OnDrawForOutputSurface(); 3095 bool resourceless_software_draw = false;
3096 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3095 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); 3097 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
3096 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3098 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3097 client_->Reset(); 3099 client_->Reset();
3098 3100
3099 // The animation inside of WillBeginImplFrame changes stuff on the screen, but 3101 // The animation inside of WillBeginImplFrame changes stuff on the screen, but
3100 // ends here, so does not cause another frame to happen. 3102 // ends here, so does not cause another frame to happen.
3101 client_->SetWillBeginImplFrameCausesRedraw(true); 3103 client_->SetWillBeginImplFrameCausesRedraw(true);
3102 3104
3103 // Next vsync. 3105 // Next vsync.
3104 AdvanceFrame(); 3106 AdvanceFrame();
3105 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3107 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3106 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3108 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3107 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3109 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3108 client_->Reset(); 3110 client_->Reset();
3109 3111
3110 // Android onDraw. 3112 // Android onDraw.
3111 scheduler_->SetNeedsRedraw(); 3113 scheduler_->SetNeedsRedraw();
3112 scheduler_->OnDrawForOutputSurface(); 3114 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3113 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); 3115 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
3114 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3116 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3115 client_->Reset(); 3117 client_->Reset();
3116 3118
3117 // Idle on next vsync, as the animation has completed. 3119 // Idle on next vsync, as the animation has completed.
3118 AdvanceFrame(); 3120 AdvanceFrame();
3119 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); 3121 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3);
3120 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3); 3122 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3);
3121 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); 3123 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3);
3122 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3124 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3123 client_->Reset(); 3125 client_->Reset();
3124 } 3126 }
3125 3127
3126 TEST_F(SchedulerTest, SynchronousCompositorOnDrawDuringIdle) { 3128 TEST_F(SchedulerTest, SynchronousCompositorOnDrawDuringIdle) {
3127 scheduler_settings_.using_synchronous_renderer_compositor = true; 3129 scheduler_settings_.using_synchronous_renderer_compositor = true;
3128 scheduler_settings_.use_external_begin_frame_source = true; 3130 scheduler_settings_.use_external_begin_frame_source = true;
3129 SetUpScheduler(true); 3131 SetUpScheduler(true);
3130 3132
3131 scheduler_->SetNeedsRedraw(); 3133 scheduler_->SetNeedsRedraw();
3132 scheduler_->OnDrawForOutputSurface(); 3134 bool resourceless_software_draw = false;
3135 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3133 EXPECT_ACTION("SetNeedsBeginFrames(true)", client_, 0, 2); 3136 EXPECT_ACTION("SetNeedsBeginFrames(true)", client_, 0, 2);
3134 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2); 3137 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
3135 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3138 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3136 client_->Reset(); 3139 client_->Reset();
3137 3140
3138 // Idle on next vsync. 3141 // Idle on next vsync.
3139 AdvanceFrame(); 3142 AdvanceFrame();
3140 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); 3143 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3);
3141 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3); 3144 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3);
3142 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); 3145 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
3217 3220
3218 // Next vsync. 3221 // Next vsync.
3219 AdvanceFrame(); 3222 AdvanceFrame();
3220 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3223 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3221 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3224 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3222 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3225 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3223 client_->Reset(); 3226 client_->Reset();
3224 3227
3225 // Android onDraw. 3228 // Android onDraw.
3226 scheduler_->SetNeedsRedraw(); 3229 scheduler_->SetNeedsRedraw();
3227 scheduler_->OnDrawForOutputSurface(); 3230 bool resourceless_software_draw = false;
3231 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3228 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); 3232 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
3229 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3233 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3230 client_->Reset(); 3234 client_->Reset();
3231 3235
3232 // Idle on next vsync. 3236 // Idle on next vsync.
3233 AdvanceFrame(); 3237 AdvanceFrame();
3234 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); 3238 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3);
3235 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3); 3239 EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 3);
3236 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3); 3240 EXPECT_ACTION("SendBeginMainFrameNotExpectedSoon", client_, 2, 3);
3237 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3241 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3308 client_->Reset(); 3312 client_->Reset();
3309 3313
3310 // Next vsync. 3314 // Next vsync.
3311 EXPECT_SCOPED(AdvanceFrame()); 3315 EXPECT_SCOPED(AdvanceFrame());
3312 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3316 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3313 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3317 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3314 client_->Reset(); 3318 client_->Reset();
3315 3319
3316 // Android onDraw. 3320 // Android onDraw.
3317 scheduler_->SetNeedsRedraw(); 3321 scheduler_->SetNeedsRedraw();
3318 scheduler_->OnDrawForOutputSurface(); 3322 bool resourceless_software_draw = false;
3323 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3319 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2); 3324 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2);
3320 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2); 3325 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2);
3321 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3326 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3322 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 3327 EXPECT_FALSE(scheduler_->PrepareTilesPending());
3323 client_->Reset(); 3328 client_->Reset();
3324 3329
3325 // Android onDraw. 3330 // Android onDraw.
3326 scheduler_->SetNeedsRedraw(); 3331 scheduler_->SetNeedsRedraw();
3327 scheduler_->OnDrawForOutputSurface(); 3332 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3328 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2); 3333 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2);
3329 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2); 3334 EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 1, 2);
3330 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3335 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3331 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 3336 EXPECT_FALSE(scheduler_->PrepareTilesPending());
3332 client_->Reset(); 3337 client_->Reset();
3333 3338
3334 // Next vsync. 3339 // Next vsync.
3335 EXPECT_SCOPED(AdvanceFrame()); 3340 EXPECT_SCOPED(AdvanceFrame());
3336 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 3341 EXPECT_FALSE(scheduler_->PrepareTilesPending());
3337 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); 3342 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3);
(...skipping 14 matching lines...) Expand all
3352 client_->Reset(); 3357 client_->Reset();
3353 3358
3354 // Next vsync. 3359 // Next vsync.
3355 EXPECT_SCOPED(AdvanceFrame()); 3360 EXPECT_SCOPED(AdvanceFrame());
3356 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3361 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3357 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3362 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3358 client_->Reset(); 3363 client_->Reset();
3359 3364
3360 // Android onDraw. 3365 // Android onDraw.
3361 scheduler_->SetNeedsRedraw(); 3366 scheduler_->SetNeedsRedraw();
3362 scheduler_->OnDrawForOutputSurface(); 3367 bool resourceless_software_draw = false;
3368 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3363 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); 3369 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
3364 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3370 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3365 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 3371 EXPECT_FALSE(scheduler_->PrepareTilesPending());
3366 client_->Reset(); 3372 client_->Reset();
3367 3373
3368 // Simulate SetNeedsBeginMainFrame due to input event. 3374 // Simulate SetNeedsBeginMainFrame due to input event.
3369 scheduler_->SetNeedsBeginMainFrame(); 3375 scheduler_->SetNeedsBeginMainFrame();
3370 EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_); 3376 EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_);
3371 client_->Reset(); 3377 client_->Reset();
3372 3378
3373 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks()); 3379 scheduler_->NotifyBeginMainFrameStarted(base::TimeTicks());
3374 scheduler_->NotifyReadyToCommit(); 3380 scheduler_->NotifyReadyToCommit();
3375 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); 3381 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
3376 client_->Reset(); 3382 client_->Reset();
3377 3383
3378 scheduler_->NotifyReadyToActivate(); 3384 scheduler_->NotifyReadyToActivate();
3379 EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client_); 3385 EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client_);
3380 client_->Reset(); 3386 client_->Reset();
3381 3387
3382 // Next vsync. 3388 // Next vsync.
3383 EXPECT_SCOPED(AdvanceFrame()); 3389 EXPECT_SCOPED(AdvanceFrame());
3384 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); 3390 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
3385 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2); 3391 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 1, 2);
3386 client_->Reset(); 3392 client_->Reset();
3387 3393
3388 // Android onDraw. 3394 // Android onDraw.
3389 scheduler_->SetNeedsRedraw(); 3395 scheduler_->SetNeedsRedraw();
3390 scheduler_->OnDrawForOutputSurface(); 3396 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3391 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); 3397 EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
3392 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3398 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3393 EXPECT_FALSE(scheduler_->PrepareTilesPending()); 3399 EXPECT_FALSE(scheduler_->PrepareTilesPending());
3394 client_->Reset(); 3400 client_->Reset();
3395 3401
3396 // Simulate SetNeedsBeginMainFrame due to input event. 3402 // Simulate SetNeedsBeginMainFrame due to input event.
3397 scheduler_->SetNeedsBeginMainFrame(); 3403 scheduler_->SetNeedsBeginMainFrame();
3398 EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_); 3404 EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_);
3399 client_->Reset(); 3405 client_->Reset();
3400 } 3406 }
3401 3407
3402 TEST_F(SchedulerTest, SynchronousCompositorResourcelessOnDrawWhenInvisible) { 3408 TEST_F(SchedulerTest, SynchronousCompositorResourcelessOnDrawWhenInvisible) {
3403 scheduler_settings_.using_synchronous_renderer_compositor = true; 3409 scheduler_settings_.using_synchronous_renderer_compositor = true;
3404 scheduler_settings_.use_external_begin_frame_source = true; 3410 scheduler_settings_.use_external_begin_frame_source = true;
3405 SetUpScheduler(true); 3411 SetUpScheduler(true);
3406 3412
3407 scheduler_->SetVisible(false); 3413 scheduler_->SetVisible(false);
3408 scheduler_->SetResourcelessSoftareDraw(true);
3409 3414
3410 scheduler_->SetNeedsRedraw(); 3415 scheduler_->SetNeedsRedraw();
3411 scheduler_->OnDrawForOutputSurface(); 3416 bool resourceless_software_draw = true;
3417 scheduler_->OnDrawForOutputSurface(resourceless_software_draw);
3412 // SynchronousCompositor has to draw regardless of visibility. 3418 // SynchronousCompositor has to draw regardless of visibility.
3413 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1); 3419 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
3414 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); 3420 EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
3415 client_->Reset(); 3421 client_->Reset();
3416 } 3422 }
3417 3423
3418 TEST_F(SchedulerTest, AuthoritativeVSyncInterval) { 3424 TEST_F(SchedulerTest, AuthoritativeVSyncInterval) {
3419 SetUpScheduler(true); 3425 SetUpScheduler(true);
3420 base::TimeDelta initial_interval = scheduler_->BeginImplFrameInterval(); 3426 base::TimeDelta initial_interval = scheduler_->BeginImplFrameInterval();
3421 base::TimeDelta authoritative_interval = 3427 base::TimeDelta authoritative_interval =
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
3546 } 3552 }
3547 3553
3548 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHS) { 3554 TEST_F(SchedulerTest, BeginMainFrameOnCriticalPath_AHS) {
3549 EXPECT_FALSE(BeginMainFrameOnCriticalPath( 3555 EXPECT_FALSE(BeginMainFrameOnCriticalPath(
3550 SMOOTHNESS_TAKES_PRIORITY, 3556 SMOOTHNESS_TAKES_PRIORITY,
3551 ScrollHandlerState::SCROLL_AFFECTS_SCROLL_HANDLER, kSlowDuration)); 3557 ScrollHandlerState::SCROLL_AFFECTS_SCROLL_HANDLER, kSlowDuration));
3552 } 3558 }
3553 3559
3554 } // namespace 3560 } // namespace
3555 } // namespace cc 3561 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler.cc ('k') | cc/surfaces/display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698