OLD | NEW |
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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 void ScheduledActionCommit() override { PushAction("ScheduledActionCommit"); } | 136 void ScheduledActionCommit() override { PushAction("ScheduledActionCommit"); } |
137 void ScheduledActionActivateSyncTree() override { | 137 void ScheduledActionActivateSyncTree() override { |
138 PushAction("ScheduledActionActivateSyncTree"); | 138 PushAction("ScheduledActionActivateSyncTree"); |
139 } | 139 } |
140 void ScheduledActionBeginOutputSurfaceCreation() override { | 140 void ScheduledActionBeginOutputSurfaceCreation() override { |
141 PushAction("ScheduledActionBeginOutputSurfaceCreation"); | 141 PushAction("ScheduledActionBeginOutputSurfaceCreation"); |
142 } | 142 } |
143 void ScheduledActionPrepareTiles() override { | 143 void ScheduledActionPrepareTiles() override { |
144 PushAction("ScheduledActionPrepareTiles"); | 144 PushAction("ScheduledActionPrepareTiles"); |
145 } | 145 } |
| 146 void ScheduledActionInvalidateOutputSurface() override { |
| 147 actions_.push_back("ScheduledActionInvalidateOutputSurface"); |
| 148 states_.push_back(scheduler_->AsValue()); |
| 149 } |
146 void DidAnticipatedDrawTimeChange(base::TimeTicks) override { | 150 void DidAnticipatedDrawTimeChange(base::TimeTicks) override { |
147 if (log_anticipated_draw_time_change_) | 151 if (log_anticipated_draw_time_change_) |
148 PushAction("DidAnticipatedDrawTimeChange"); | 152 PushAction("DidAnticipatedDrawTimeChange"); |
149 } | 153 } |
150 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } | 154 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } |
151 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { | 155 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { |
152 return base::TimeDelta(); | 156 return base::TimeDelta(); |
153 } | 157 } |
154 base::TimeDelta CommitToActivateDurationEstimate() override { | 158 base::TimeDelta CommitToActivateDurationEstimate() override { |
155 return base::TimeDelta(); | 159 return base::TimeDelta(); |
(...skipping 2184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2340 EXPECT_SCOPED(AdvanceFrame()); | 2344 EXPECT_SCOPED(AdvanceFrame()); |
2341 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); | 2345 EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
2342 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); | 2346 EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2); |
2343 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); | 2347 EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
2344 EXPECT_TRUE(client_->needs_begin_frames()); | 2348 EXPECT_TRUE(client_->needs_begin_frames()); |
2345 client_->Reset(); | 2349 client_->Reset(); |
2346 task_runner().RunPendingTasks(); // Run posted deadline. | 2350 task_runner().RunPendingTasks(); // Run posted deadline. |
2347 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1); | 2351 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1); |
2348 } | 2352 } |
2349 | 2353 |
| 2354 TEST(SchedulerTest, UsingSynchronousCompositor) { |
| 2355 FakeSchedulerClient client; |
| 2356 SchedulerSettings settings; |
| 2357 settings.using_synchronous_renderer_compositor = true; |
| 2358 settings.use_external_begin_frame_source = true; |
| 2359 settings.impl_side_painting = true; |
| 2360 |
| 2361 TestScheduler* scheduler = client.CreateScheduler(settings); |
| 2362 |
| 2363 scheduler->SetCanStart(); |
| 2364 scheduler->SetVisible(true); |
| 2365 scheduler->SetCanDraw(true); |
| 2366 |
| 2367 EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client); |
| 2368 client.Reset(); |
| 2369 |
| 2370 scheduler->DidCreateAndInitializeOutputSurface(); |
| 2371 scheduler->SetNeedsCommit(); |
| 2372 |
| 2373 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 2374 client.Reset(); |
| 2375 |
| 2376 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2377 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(), |
| 2378 base::TimeTicks(), |
| 2379 BeginFrameArgs::DefaultInterval(), |
| 2380 BeginFrameArgs::SYNCHRONOUS_ANIMATE)); |
| 2381 |
| 2382 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 2383 EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
| 2384 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2385 client.Reset(); |
| 2386 |
| 2387 scheduler->NotifyBeginMainFrameStarted(); |
| 2388 EXPECT_NO_ACTION(client); |
| 2389 |
| 2390 scheduler->NotifyReadyToCommit(); |
| 2391 EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); |
| 2392 client.Reset(); |
| 2393 |
| 2394 scheduler->NotifyReadyToActivate(); |
| 2395 EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client); |
| 2396 client.Reset(); |
| 2397 |
| 2398 // Next VSync. |
| 2399 client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval()); |
| 2400 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2401 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(), |
| 2402 base::TimeTicks(), |
| 2403 BeginFrameArgs::DefaultInterval(), |
| 2404 BeginFrameArgs::SYNCHRONOUS_ANIMATE)); |
| 2405 |
| 2406 EXPECT_ACTION("WillBeginImplFrame", client, 0, 3); |
| 2407 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 3); |
| 2408 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client, 2, 3); |
| 2409 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2410 client.Reset(); |
| 2411 |
| 2412 // Android onDraw. |
| 2413 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2414 BeginFrameArgs::Create( |
| 2415 BEGINFRAME_FROM_HERE, client.now_src()->Now(), base::TimeTicks(), |
| 2416 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::SYNCHRONOUS_DRAW)); |
| 2417 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 2418 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); |
| 2419 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2420 client.Reset(); |
| 2421 |
| 2422 // Next VSync. |
| 2423 client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval()); |
| 2424 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2425 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(), |
| 2426 base::TimeTicks(), |
| 2427 BeginFrameArgs::DefaultInterval(), |
| 2428 BeginFrameArgs::SYNCHRONOUS_ANIMATE)); |
| 2429 |
| 2430 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 2431 EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 1, 2); |
| 2432 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2433 client.Reset(); |
| 2434 |
| 2435 // Steady-state. |
| 2436 // Static page. Scrolling initiated by webview. |
| 2437 scheduler->SetNeedsAnimate(); |
| 2438 // Ask for BeginFrames. |
| 2439 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
| 2440 client.Reset(); |
| 2441 |
| 2442 client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval()); |
| 2443 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2444 BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(), |
| 2445 base::TimeTicks(), |
| 2446 BeginFrameArgs::DefaultInterval(), |
| 2447 BeginFrameArgs::SYNCHRONOUS_ANIMATE)); |
| 2448 EXPECT_ACTION("WillBeginImplFrame", client, 0, 3); |
| 2449 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 3); |
| 2450 EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client, 2, 3); |
| 2451 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2452 client.Reset(); |
| 2453 |
| 2454 // Android onDraw. |
| 2455 client.fake_external_begin_frame_source()->TestOnBeginFrame( |
| 2456 BeginFrameArgs::Create( |
| 2457 BEGINFRAME_FROM_HERE, client.now_src()->Now(), base::TimeTicks(), |
| 2458 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::SYNCHRONOUS_DRAW)); |
| 2459 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
| 2460 EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2); |
| 2461 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
| 2462 client.Reset(); |
| 2463 } |
| 2464 |
2350 } // namespace | 2465 } // namespace |
2351 } // namespace cc | 2466 } // namespace cc |
OLD | NEW |