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

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

Issue 817603002: cc: Make scheduling be driven by vsync for android webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix misc bugs introduced in last two patches Created 5 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698