| Index: cc/scheduler/scheduler_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
|
| index f416cec008fabc87c04786e619bc2b1bb0ffea5d..e29a47f53d0b94e4d5d2fdc2e7a4deca630d2fc2 100644
|
| --- a/cc/scheduler/scheduler_unittest.cc
|
| +++ b/cc/scheduler/scheduler_unittest.cc
|
| @@ -43,47 +43,14 @@ class FakeSchedulerClient;
|
| void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| FakeSchedulerClient* client);
|
|
|
| -class TestScheduler : public Scheduler {
|
| - public:
|
| - static scoped_ptr<TestScheduler> Create(
|
| - SchedulerClient* client,
|
| - const SchedulerSettings& scheduler_settings,
|
| - int layer_tree_host_id,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& impl_task_runner) {
|
| - return make_scoped_ptr(new TestScheduler(
|
| - client, scheduler_settings, layer_tree_host_id, impl_task_runner));
|
| - }
|
| -
|
| - virtual ~TestScheduler() {}
|
| -
|
| - bool IsBeginRetroFrameArgsEmpty() const {
|
| - return begin_retro_frame_args_.empty();
|
| - }
|
| -
|
| - bool IsSyntheticBeginFrameSourceActive() const {
|
| - return synthetic_begin_frame_source_->IsActive();
|
| - }
|
| -
|
| - private:
|
| - TestScheduler(
|
| - SchedulerClient* client,
|
| - const SchedulerSettings& scheduler_settings,
|
| - int layer_tree_host_id,
|
| - const scoped_refptr<base::SingleThreadTaskRunner> & impl_task_runner)
|
| - : Scheduler(client,
|
| - scheduler_settings,
|
| - layer_tree_host_id,
|
| - impl_task_runner) {
|
| - }
|
| -};
|
| -
|
| class FakeSchedulerClient : public SchedulerClient {
|
| public:
|
| FakeSchedulerClient()
|
| : needs_begin_frame_(false),
|
| automatic_swap_ack_(true),
|
| swap_contains_incomplete_tile_(false),
|
| - redraw_will_happen_if_update_visible_tiles_happens_(false) {
|
| + redraw_will_happen_if_update_visible_tiles_happens_(false),
|
| + now_src_(TestNowSource::Create()) {
|
| Reset();
|
| }
|
|
|
| @@ -97,8 +64,7 @@ class FakeSchedulerClient : public SchedulerClient {
|
| }
|
|
|
| TestScheduler* CreateScheduler(const SchedulerSettings& settings) {
|
| - task_runner_ = new OrderedSimpleTaskRunner;
|
| - scheduler_ = TestScheduler::Create(this, settings, 0, task_runner_);
|
| + scheduler_ = TestScheduler::Create(now_src_, this, settings, 0);
|
| return scheduler_.get();
|
| }
|
|
|
| @@ -116,7 +82,24 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return posted_begin_impl_frame_deadline_;
|
| }
|
|
|
| - OrderedSimpleTaskRunner& task_runner() { return *task_runner_; }
|
| + void AdvanceFrame() {
|
| + bool external_begin_frame =
|
| + scheduler_->settings().begin_frame_scheduling_enabled &&
|
| + scheduler_->settings().throttle_frame_production;
|
| +
|
| + if (external_begin_frame) {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerUnitTest::AdvanceFrame",
|
| + "external_begin_frame",
|
| + external_begin_frame);
|
| + scheduler_->BeginFrame(CreateBeginFrameArgsForTesting(now_src_));
|
| + } else {
|
| + task_runner().RunPendingTasks();
|
| + }
|
| + }
|
| +
|
| + OrderedSimpleTaskRunner& task_runner() { return scheduler_->task_runner(); }
|
| + scoped_refptr<TestNowSource> now_src() { return now_src_; }
|
|
|
| int ActionIndex(const char* action) const {
|
| for (size_t i = 0; i < actions_.size(); i++)
|
| @@ -241,14 +224,13 @@ class FakeSchedulerClient : public SchedulerClient {
|
| std::vector<const char*> actions_;
|
| std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_;
|
| scoped_ptr<TestScheduler> scheduler_;
|
| - scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
|
| + scoped_refptr<TestNowSource> now_src_;
|
| };
|
|
|
| void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| FakeSchedulerClient* client) {
|
| - bool client_initiates_begin_frame =
|
| - scheduler->settings().begin_frame_scheduling_enabled &&
|
| - scheduler->settings().throttle_frame_production;
|
| + TRACE_EVENT0("cc",
|
| + "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
|
|
|
| scheduler->DidCreateAndInitializeOutputSurface();
|
| scheduler->SetNeedsCommit();
|
| @@ -256,26 +238,19 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| scheduler->NotifyReadyToCommit();
|
| if (scheduler->settings().impl_side_painting)
|
| scheduler->NotifyReadyToActivate();
|
| +
|
| // Go through the motions to draw the commit.
|
| - if (client_initiates_begin_frame)
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| - else
|
| - client->task_runner().RunPendingTasks(); // Run posted BeginFrame.
|
| + client->AdvanceFrame();
|
|
|
| // Run the posted deadline task.
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client->task_runner().RunPendingTasks();
|
| - EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| // We need another BeginImplFrame so Scheduler calls
|
| // SetNeedsBeginFrame(false).
|
| - if (client_initiates_begin_frame)
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| - else
|
| - client->task_runner().RunPendingTasks(); // Run posted BeginFrame.
|
| + client->AdvanceFrame();
|
|
|
| // Run the posted deadline task.
|
| - EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client->task_runner().RunPendingTasks();
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| }
|
| @@ -312,7 +287,7 @@ TEST(SchedulerTest, RequestCommit) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| client.Reset();
|
|
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -334,7 +309,7 @@ TEST(SchedulerTest, RequestCommit) {
|
| client.Reset();
|
|
|
| // BeginImplFrame should prepare the draw.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -350,7 +325,7 @@ TEST(SchedulerTest, RequestCommit) {
|
|
|
| // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
|
| // to avoid excessive toggles.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -378,7 +353,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -408,7 +383,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| client.Reset();
|
| // Since another commit is needed, the next BeginImplFrame should initiate
|
| // the second commit.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -430,7 +405,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
|
|
| // On the next BeginImplFrame, verify we go back to a quiescent state and
|
| // no longer request BeginImplFrames.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_FALSE(client.needs_begin_frame());
|
| client.Reset();
|
| @@ -476,13 +451,13 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
| EXPECT_TRUE(client.needs_begin_frame());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_TRUE(client.needs_begin_frame());
|
|
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -490,7 +465,7 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -516,7 +491,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -527,7 +502,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_TRUE(client.needs_begin_frame());
|
|
|
| // Fail the draw again.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -536,7 +511,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -594,7 +569,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| EXPECT_TRUE(client.needs_begin_frame());
|
|
|
| client.SetNeedsCommitOnNextDraw();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.SetNeedsCommitOnNextDraw();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
| @@ -603,7 +578,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
|
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
|
|
| @@ -613,7 +588,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -640,7 +615,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -651,7 +626,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_TRUE(client.needs_begin_frame());
|
|
|
| // Fail the draw again.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
|
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| @@ -661,7 +636,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -686,7 +661,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
|
|
| // Draw successfully, this starts a new frame.
|
| client.SetNeedsCommitOnNextDraw();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -697,7 +672,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
| // Fail to draw, this should not start a frame.
|
| client.SetDrawWillHappen(false);
|
| client.SetNeedsCommitOnNextDraw();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| }
|
| @@ -736,7 +711,7 @@ TEST(SchedulerTest, ManageTiles) {
|
| // We have no immediate actions to perform, so the BeginImplFrame should post
|
| // the deadline task.
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -764,7 +739,7 @@ TEST(SchedulerTest, ManageTiles) {
|
| // We have no immediate actions to perform, so the BeginImplFrame should post
|
| // the deadline task.
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -785,7 +760,7 @@ TEST(SchedulerTest, ManageTiles) {
|
|
|
| // We need a BeginImplFrame where we don't swap to go idle.
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -806,7 +781,7 @@ TEST(SchedulerTest, ManageTiles) {
|
|
|
| // BeginImplFrame. There will be no draw, only ManageTiles.
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -832,7 +807,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -854,7 +829,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -877,7 +852,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -900,7 +875,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -919,7 +894,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -955,7 +930,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -977,7 +952,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| @@ -988,7 +963,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 2, 3);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| @@ -1010,7 +985,7 @@ TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
|
|
|
| client.Reset();
|
| scheduler->SetNeedsRedraw();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
|
|
| // The deadline should be zero since there is no work other than drawing
|
| // pending.
|
| @@ -1066,7 +1041,7 @@ void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms,
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| @@ -1078,7 +1053,7 @@ void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms,
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(scheduler->MainThreadIsInHighLatencyMode(),
|
| @@ -1135,9 +1110,15 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| scheduler->NotifyReadyToCommit();
|
| scheduler->SetNeedsRedraw();
|
|
|
| - BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting();
|
| + BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src());
|
| frame_args.interval = base::TimeDelta::FromMilliseconds(1000);
|
| - scheduler->BeginFrame(frame_args);
|
| + {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerTest::PollForCommitCompletion",
|
| + "frame_args",
|
| + frame_args.AsValue());
|
| + scheduler->BeginFrame(frame_args);
|
| + }
|
|
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| @@ -1150,7 +1131,13 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| // the NotifyReadyToCommit for now.
|
| EXPECT_FALSE(scheduler->CommitPending());
|
| scheduler->SetNeedsCommit();
|
| - scheduler->BeginFrame(frame_args);
|
| + {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerTest::PollForCommitCompletion",
|
| + "frame_args",
|
| + frame_args.AsValue());
|
| + scheduler->BeginFrame(frame_args);
|
| + }
|
| EXPECT_TRUE(scheduler->CommitPending());
|
|
|
| // Draw and swap the frame, but don't ack the swap to simulate the Browser
|
| @@ -1167,7 +1154,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| // Does three iterations to make sure that the timer is properly repeating.
|
| for (int i = 0; i < 3; ++i) {
|
| EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
|
| - client.task_runner().NextPendingTaskDelay().InMicroseconds())
|
| + client.task_runner().DelayToNextPendingTask().InMicroseconds())
|
| << scheduler->AsValue()->ToString();
|
| client.task_runner().RunPendingTasks();
|
| EXPECT_GT(client.num_actions_(), actions_so_far);
|
| @@ -1180,7 +1167,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| scheduler->NotifyBeginMainFrameStarted();
|
| for (int i = 0; i < 3; ++i) {
|
| EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
|
| - client.task_runner().NextPendingTaskDelay().InMicroseconds())
|
| + client.task_runner().DelayToNextPendingTask().InMicroseconds())
|
| << scheduler->AsValue()->ToString();
|
| client.task_runner().RunPendingTasks();
|
| EXPECT_GT(client.num_actions_(), actions_so_far);
|
| @@ -1208,9 +1195,13 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
|
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| - BeginFrameArgs args = CreateBeginFrameArgsForTesting();
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc", "SchedulerTest::BeginRetroFrame", "frame_args", args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1219,9 +1210,17 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc", "SchedulerTest::BeginRetroFrame", "frame_args", args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc", "SchedulerTest::BeginRetroFrame", "frame_args", args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| @@ -1287,9 +1286,15 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
|
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| - BeginFrameArgs args = CreateBeginFrameArgsForTesting();
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerTest::BeginRetroFrame_SwapThrottled",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1299,7 +1304,13 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| // Queue BeginFrame while we are still handling the previous BeginFrame.
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerTest::BeginRetroFrame_SwapThrottled",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -1330,7 +1341,13 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
|
|
| // Queue BeginFrame while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1("cc",
|
| + "SchedulerTest::BeginRetroFrame_SwapThrottled",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| EXPECT_TRUE(client.needs_begin_frame());
|
| @@ -1345,7 +1362,12 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
|
|
| // BeginImplFrame deadline should draw.
|
| scheduler->SetNeedsRedraw();
|
| +
|
| + // As we are now in polling mode - force time forward to next
|
| + // ScheduleBeginImplFrameDeadline task.
|
| + client.now_src()->AdvanceNow(base::TimeDelta::FromSeconds(1));
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| +
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1577,7 +1599,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1616,7 +1638,7 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1633,7 +1655,7 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
|
| EXPECT_NO_ACTION(client);
|
|
|
| // BeginImplFrame is not started.
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| @@ -1679,7 +1701,7 @@ void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1728,7 +1750,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) {
|
| EXPECT_TRUE(client.needs_begin_frame());
|
|
|
| client.Reset();
|
| - scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1761,9 +1783,16 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| client.Reset();
|
| - BeginFrameArgs args = CreateBeginFrameArgsForTesting();
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceAfterBeginRetroFramePosted",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1771,9 +1800,23 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceAfterBeginRetroFramePosted",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceAfterBeginRetroFramePosted",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.Reset();
|
| @@ -1820,9 +1863,16 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| client.Reset();
|
| - BeginFrameArgs args = CreateBeginFrameArgsForTesting();
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceDuringBeginRetroFrameRunning",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1830,9 +1880,23 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceDuringBeginRetroFrameRunning",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + {
|
| + TRACE_EVENT1(
|
| + "cc",
|
| + "SchedulerTest::DidLoseOutputSurfaceDuringBeginRetroFrameRunning",
|
| + "frame_args",
|
| + args.AsValue());
|
| + scheduler->BeginFrame(args);
|
| + }
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.Reset();
|
|
|