| Index: cc/scheduler/scheduler_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
|
| index 256acd5bd8f6a211637b8d72b24e295485d0db86..efb895f5589275d66b4de388a47765649981f151 100644
|
| --- a/cc/scheduler/scheduler_unittest.cc
|
| +++ b/cc/scheduler/scheduler_unittest.cc
|
| @@ -45,12 +45,31 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
|
|
| class FakeSchedulerClient : public SchedulerClient {
|
| public:
|
| + struct FakeBeginFrameSourceForFakeSchedulerClient
|
| + : public FakeBeginFrameSource {
|
| + FakeSchedulerClient* client_;
|
| +
|
| + explicit FakeBeginFrameSourceForFakeSchedulerClient(
|
| + FakeSchedulerClient* client)
|
| + : client_(client) {}
|
| +
|
| + virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE {
|
| + FakeBeginFrameSource::SetNeedsBeginFrames(needs_begin_frames);
|
| + if (needs_begin_frames) {
|
| + client_->actions_.push_back("SetNeedsBeginFrames(true)");
|
| + } else {
|
| + client_->actions_.push_back("SetNeedsBeginFrames(false)");
|
| + }
|
| + client_->states_.push_back(client_->scheduler_->AsValue());
|
| + }
|
| + };
|
| +
|
| FakeSchedulerClient()
|
| - : needs_begin_frame_(false),
|
| - automatic_swap_ack_(true),
|
| + : automatic_swap_ack_(true),
|
| swap_contains_incomplete_tile_(false),
|
| redraw_will_happen_if_update_visible_tiles_happens_(false),
|
| - now_src_(TestNowSource::Create()) {
|
| + now_src_(TestNowSource::Create()),
|
| + fake_frame_source_(this) {
|
| Reset();
|
| }
|
|
|
| @@ -65,6 +84,7 @@ class FakeSchedulerClient : public SchedulerClient {
|
|
|
| TestScheduler* CreateScheduler(const SchedulerSettings& settings) {
|
| scheduler_ = TestScheduler::Create(now_src_, this, settings, 0);
|
| + DCHECK(scheduler_);
|
| // Fail if we need to run 100 tasks in a row.
|
| task_runner().SetRunTaskLimit(100);
|
| return scheduler_.get();
|
| @@ -75,7 +95,7 @@ class FakeSchedulerClient : public SchedulerClient {
|
| void set_log_anticipated_draw_time_change(bool log) {
|
| log_anticipated_draw_time_change_ = log;
|
| }
|
| - bool needs_begin_frame() { return needs_begin_frame_; }
|
| + bool needs_begin_frames() { return fake_frame_source_.NeedsBeginFrames(); }
|
| int num_draws() const { return num_draws_; }
|
| int num_actions_() const { return static_cast<int>(actions_.size()); }
|
| const char* Action(int i) const { return actions_[i]; }
|
| @@ -84,13 +104,25 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return posted_begin_impl_frame_deadline_;
|
| }
|
|
|
| - void AdvanceFrame() {
|
| - bool external_begin_frame =
|
| - scheduler_->settings().begin_frame_scheduling_enabled &&
|
| - scheduler_->settings().throttle_frame_production;
|
| + bool ExternalBeginFrame() {
|
| + return scheduler_->settings().begin_frame_scheduling_enabled &&
|
| + scheduler_->settings().throttle_frame_production;
|
| + }
|
| + virtual FakeBeginFrameSource* ExternalBeginFrameSource() OVERRIDE {
|
| + return &fake_frame_source_;
|
| + }
|
|
|
| - if (external_begin_frame) {
|
| - scheduler_->BeginFrame(CreateBeginFrameArgsForTesting(now_src_));
|
| + void AdvanceFrame() {
|
| + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"),
|
| + "FakeSchedulerClient::AdvanceFrame");
|
| + // EXPECT_TRUE(needs_begin_frames());
|
| + if (ExternalBeginFrame()) {
|
| + // Creep the time forward so that any BeginFrameArgs is not equal to the
|
| + // last one otherwise we violate the BeginFrameSource contract.
|
| + now_src_->AdvanceNowMicroseconds(1);
|
| + fake_frame_source_.TestOnBeginFrame(
|
| + CreateBeginFrameArgsForTesting(now_src_));
|
| + EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
|
| }
|
|
|
| EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false)));
|
| @@ -128,11 +160,6 @@ class FakeSchedulerClient : public SchedulerClient {
|
| redraw_will_happen_if_update_visible_tiles_happens_ = redraw;
|
| }
|
| // SchedulerClient implementation.
|
| - virtual void SetNeedsBeginFrame(bool enable) OVERRIDE {
|
| - actions_.push_back("SetNeedsBeginFrame");
|
| - states_.push_back(scheduler_->AsValue());
|
| - needs_begin_frame_ = enable;
|
| - }
|
| virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE {
|
| actions_.push_back("WillBeginImplFrame");
|
| states_.push_back(scheduler_->AsValue());
|
| @@ -221,7 +248,6 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return scheduler_->BeginImplFrameDeadlinePending() == state;
|
| }
|
|
|
| - bool needs_begin_frame_;
|
| bool draw_will_happen_;
|
| bool swap_will_happen_if_draw_happens_;
|
| bool automatic_swap_ack_;
|
| @@ -234,6 +260,7 @@ class FakeSchedulerClient : public SchedulerClient {
|
| std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_;
|
| scoped_ptr<TestScheduler> scheduler_;
|
| scoped_refptr<TestNowSource> now_src_;
|
| + FakeBeginFrameSourceForFakeSchedulerClient fake_frame_source_;
|
| };
|
|
|
| void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| @@ -248,22 +275,29 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| if (scheduler->settings().impl_side_painting)
|
| scheduler->NotifyReadyToActivate();
|
|
|
| - // Go through the motions to draw the commit.
|
| - client->AdvanceFrame();
|
| + {
|
| + SCOPED_TRACE("Go through the motions to draw the commit");
|
| + client->AdvanceFrame();
|
| + }
|
|
|
| // Run the posted deadline task.
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client->task_runner().RunTasksWhile(client->ImplFrameDeadlinePending(true));
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| - // We need another BeginImplFrame so Scheduler calls
|
| - // SetNeedsBeginFrame(false).
|
| - client->AdvanceFrame();
|
| + {
|
| + SCOPED_TRACE(
|
| + "We need another BeginImplFrame so Scheduler calls "
|
| + "SetNeedsBeginFrame(false).");
|
| + client->AdvanceFrame();
|
| + }
|
|
|
| // Run the posted deadline task.
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client->task_runner().RunTasksWhile(client->ImplFrameDeadlinePending(true));
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| +
|
| + // EXPECT_FALSE(client->needs_begin_frames());
|
| }
|
|
|
| TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
|
| @@ -294,29 +328,28 @@ TEST(SchedulerTest, RequestCommit) {
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
|
|
| client.AdvanceFrame();
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginFrame.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame should prepare the draw.
|
| @@ -324,14 +357,14 @@ TEST(SchedulerTest, RequestCommit) {
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame deadline should draw.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
|
| @@ -342,8 +375,7 @@ TEST(SchedulerTest, RequestCommit) {
|
| client.Reset();
|
|
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| client.Reset();
|
| }
|
|
|
| @@ -361,7 +393,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
|
|
| // SetNeedsCommit should begin the frame.
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -369,7 +401,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
|
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Now SetNeedsCommit again. Calling here means we need a second commit.
|
| @@ -390,7 +422,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
|
|
| // Because we just swapped, the Scheduler should also request the next
|
| // BeginImplFrame from the OutputSurface.
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
| // Since another commit is needed, the next BeginImplFrame should initiate
|
| // the second commit.
|
| @@ -411,14 +443,14 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // On the next BeginImplFrame, verify we go back to a quiescent state and
|
| // no longer request BeginImplFrames.
|
| client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
| }
|
|
|
| @@ -459,20 +491,20 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| 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());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| client.AdvanceFrame();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| @@ -480,7 +512,7 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| }
|
|
|
| // Test that requesting redraw inside a failed draw doesn't lose the request.
|
| @@ -498,7 +530,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| @@ -510,7 +542,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| // request.
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Fail the draw again.
|
| client.AdvanceFrame();
|
| @@ -518,7 +550,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| @@ -527,7 +559,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| }
|
|
|
| class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient {
|
| @@ -573,11 +605,11 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| client.Reset();
|
|
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_EQ(0, client.num_draws());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| client.SetNeedsCommitOnNextDraw();
|
| client.AdvanceFrame();
|
| @@ -585,7 +617,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
|
|
| @@ -595,7 +627,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
|
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| EXPECT_FALSE(scheduler->CommitPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| @@ -604,7 +636,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| EXPECT_FALSE(scheduler->CommitPending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| }
|
|
|
| // Tests that when a draw fails then the pending commit should not be dropped.
|
| @@ -622,7 +654,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| @@ -634,7 +666,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| // request.
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Fail the draw again.
|
| client.AdvanceFrame();
|
| @@ -643,7 +675,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| @@ -652,7 +684,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| }
|
|
|
| TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
| @@ -667,7 +699,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Draw successfully, this starts a new frame.
|
| @@ -678,7 +710,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Fail to draw, this should not start a frame.
|
| client.SetDrawWillHappen(false);
|
| @@ -714,7 +746,7 @@ TEST(SchedulerTest, ManageTiles) {
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_TRUE(scheduler->ManageTilesPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
| EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles"));
|
| EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
|
| @@ -744,7 +776,7 @@ TEST(SchedulerTest, ManageTiles) {
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_FALSE(scheduler->ManageTilesPending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // We have no immediate actions to perform, so the BeginImplFrame should post
|
| @@ -776,17 +808,16 @@ TEST(SchedulerTest, ManageTiles) {
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Now trigger a ManageTiles outside of a draw. We will then need
|
| // a begin-frame for the ManageTiles, but we don't need a draw.
|
| client.Reset();
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| scheduler->SetNeedsManageTiles();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_TRUE(scheduler->ManageTilesPending());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
|
|
| @@ -938,7 +969,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| // SetNeedsCommit should begin the frame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -981,8 +1012,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| // No more UpdateVisibleTiles().
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| }
|
|
|
| TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
|
| @@ -1123,7 +1153,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
|
|
| BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src());
|
| frame_args.interval = base::TimeDelta::FromMilliseconds(1000);
|
| - scheduler->BeginFrame(frame_args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(frame_args);
|
|
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| @@ -1136,7 +1166,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| // the NotifyReadyToCommit for now.
|
| EXPECT_FALSE(scheduler->CommitPending());
|
| scheduler->SetNeedsCommit();
|
| - scheduler->BeginFrame(frame_args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(frame_args);
|
| EXPECT_TRUE(scheduler->CommitPending());
|
|
|
| // Draw and swap the frame, but don't ack the swap to simulate the Browser
|
| @@ -1188,39 +1218,38 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
|
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame should prepare the draw.
|
| @@ -1228,14 +1257,14 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame deadline should draw.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
|
| @@ -1246,8 +1275,7 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
| client.Reset();
|
|
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| client.Reset();
|
| }
|
|
|
| @@ -1267,25 +1295,24 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
|
|
| // Create a BeginFrame with a long deadline to avoid race conditions.
|
| // This is the first BeginFrame, which will be handled immediately.
|
| BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Queue BeginFrame while we are still handling the previous BeginFrame.
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -1294,7 +1321,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Swapping will put us into a swap throttled state.
|
| @@ -1302,7 +1329,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // While swap throttled, BeginRetroFrames should trigger BeginImplFrames
|
| @@ -1311,22 +1338,22 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| client.task_runner().RunPendingTasks(); // Run posted BeginRetroFrame.
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Queue BeginFrame while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Take us out of a swap throttled state.
|
| scheduler->DidSwapBuffersComplete();
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame deadline should draw.
|
| @@ -1338,7 +1365,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| client.Reset();
|
| }
|
|
|
| @@ -1359,7 +1386,7 @@ void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled,
|
| // without calling SetNeedsBeginFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| EXPECT_NO_ACTION(client);
|
| client.Reset();
|
|
|
| @@ -1369,21 +1396,21 @@ void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled,
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginFrame.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame should prepare the draw.
|
| @@ -1391,14 +1418,14 @@ void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled,
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame deadline should draw.
|
| client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
|
| @@ -1412,7 +1439,7 @@ void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled,
|
| // when the BeginFrame is no longer needed.
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
| }
|
|
|
| @@ -1457,7 +1484,7 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled,
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| EXPECT_NO_ACTION(client);
|
| client.Reset();
|
|
|
| @@ -1466,14 +1493,14 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled,
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // NotifyReadyToCommit should trigger the pending commit and draw.
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Swapping will put us into a swap throttled state.
|
| @@ -1481,7 +1508,7 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled,
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // While swap throttled, BeginFrames should trigger BeginImplFrames,
|
| @@ -1490,14 +1517,14 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled,
|
| client.task_runner().RunPendingTasks(); // Run posted BeginFrame.
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // Take us out of a swap throttled state.
|
| scheduler->DidSwapBuffersComplete();
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
|
|
| // BeginImplFrame deadline should draw.
|
| @@ -1506,7 +1533,7 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled,
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_FALSE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
| }
|
|
|
| @@ -1562,7 +1589,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
|
| // SetNeedsCommit should begin the frame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -1573,7 +1600,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
|
| client.Reset();
|
| scheduler->DidLoseOutputSurface();
|
| // Do nothing when impl frame is in deadine pending state.
|
| - EXPECT_NO_ACTION(client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
|
|
| client.Reset();
|
| scheduler->NotifyBeginMainFrameStarted();
|
| @@ -1601,7 +1628,7 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
|
| // SetNeedsCommit should begin the frame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -1612,7 +1639,7 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
|
| client.Reset();
|
| scheduler->DidLoseOutputSurface();
|
| // Do nothing when impl frame is in deadine pending state.
|
| - EXPECT_NO_ACTION(client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
|
|
| client.Reset();
|
| // Run posted deadline.
|
| @@ -1668,7 +1695,7 @@ void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) {
|
| // SetNeedsCommit should begin the frame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -1685,10 +1712,10 @@ void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) {
|
| scheduler->DidLoseOutputSurface();
|
| if (impl_side_painting) {
|
| // Sync tree should be forced to activate.
|
| - EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client);
|
| + EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 1, 2);
|
| } else {
|
| - // Do nothing when impl frame is in deadine pending state.
|
| - EXPECT_NO_ACTION(client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| }
|
|
|
| client.Reset();
|
| @@ -1716,8 +1743,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) {
|
| client.Reset();
|
| scheduler->SetNeedsManageTiles();
|
| scheduler->SetNeedsRedraw();
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| client.AdvanceFrame();
|
| @@ -1727,7 +1753,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) {
|
|
|
| client.Reset();
|
| scheduler->DidLoseOutputSurface();
|
| - EXPECT_NO_ACTION(client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
|
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| @@ -1747,45 +1773,44 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| // 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(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| client.Reset();
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| client.Reset();
|
| EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
|
| scheduler->DidLoseOutputSurface();
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2);
|
| EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
|
|
|
| // Posted BeginRetroFrame is aborted.
|
| @@ -1806,39 +1831,38 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| - EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| // 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(client.now_src());
|
| args.deadline += base::TimeDelta::FromHours(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Queue BeginFrames while we are still handling the previous BeginFrame.
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
| args.frame_time += base::TimeDelta::FromSeconds(1);
|
| - scheduler->BeginFrame(args);
|
| + client.ExternalBeginFrameSource()->TestOnBeginFrame(args);
|
|
|
| // If we don't swap on the deadline, we wait for the next BeginImplFrame.
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_NO_ACTION(client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| client.Reset();
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // BeginImplFrame should prepare the draw.
|
| client.Reset();
|
| @@ -1846,12 +1870,12 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| client.Reset();
|
| EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
|
| scheduler->DidLoseOutputSurface();
|
| - EXPECT_NO_ACTION(client);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
|
| EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
|
|
|
| // BeginImplFrame deadline should abort drawing.
|
| @@ -1859,7 +1883,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(client.needs_begin_frame());
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
|
|
| // No more BeginRetroFrame because BeginRetroFrame queue is cleared.
|
| client.Reset();
|
| @@ -1880,33 +1904,33 @@ TEST(SchedulerTest,
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| client.Reset();
|
| - EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
|
| scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
|
|
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted Tick.
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - EXPECT_TRUE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
|
|
|
| // NotifyReadyToCommit should trigger the commit.
|
| client.Reset();
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| - EXPECT_TRUE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
|
|
|
| client.Reset();
|
| scheduler->DidLoseOutputSurface();
|
| - EXPECT_EQ(0, client.num_actions_());
|
| - EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_NO_ACTION(client);
|
| + EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
|
|
|
| client.Reset();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - EXPECT_FALSE(scheduler->IsSyntheticBeginFrameSourceActive());
|
| + EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
|
| }
|
|
|
| } // namespace
|
|
|