| Index: cc/scheduler/scheduler_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
|
| index 46242e3d6b97bec4b20f3e17a440f26715da0886..7f8d8908c8a74dff95498315592a3773050dcdc7 100644
|
| --- a/cc/scheduler/scheduler_unittest.cc
|
| +++ b/cc/scheduler/scheduler_unittest.cc
|
| @@ -38,14 +38,21 @@
|
| #define EXPECT_SINGLE_ACTION(action, client) \
|
| EXPECT_ACTION(action, client, 0, 1)
|
|
|
| +#define EXPECT_SCOPED(statements) \
|
| + { \
|
| + SCOPED_TRACE(""); \
|
| + statements; \
|
| + }
|
| +
|
| +#define CREATE_SCHEDULER_AND_INIT_SURFACE(settings) \
|
| + TestScheduler* scheduler = client.CreateScheduler(settings); \
|
| + EXPECT_SCOPED(client.InitializeOutputSurfaceAndFirstCommit(scheduler));
|
| +
|
| namespace cc {
|
| namespace {
|
|
|
| class FakeSchedulerClient;
|
|
|
| -void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| - FakeSchedulerClient* client);
|
| -
|
| class FakeSchedulerClient : public SchedulerClient {
|
| public:
|
| class FakeExternalBeginFrameSource : public BeginFrameSourceMixIn {
|
| @@ -56,9 +63,9 @@ class FakeSchedulerClient : public SchedulerClient {
|
|
|
| void OnNeedsBeginFramesChange(bool needs_begin_frames) override {
|
| if (needs_begin_frames) {
|
| - client_->actions_.push_back("SetNeedsBeginFrames(true)");
|
| + client_->PushAction("SetNeedsBeginFrames(true)");
|
| } else {
|
| - client_->actions_.push_back("SetNeedsBeginFrames(false)");
|
| + client_->PushAction("SetNeedsBeginFrames(false)");
|
| }
|
| client_->states_.push_back(client_->scheduler_->AsValue());
|
| }
|
| @@ -139,8 +146,7 @@ class FakeSchedulerClient : public SchedulerClient {
|
| log_anticipated_draw_time_change_ = log;
|
| }
|
| bool needs_begin_frames() {
|
| - DCHECK(ExternalBeginFrame());
|
| - return fake_external_begin_frame_source_->NeedsBeginFrames();
|
| + return scheduler_->frame_source().NeedsBeginFrames();
|
| }
|
| int num_draws() const { return num_draws_; }
|
| int num_actions_() const { return static_cast<int>(actions_.size()); }
|
| @@ -165,21 +171,81 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return fake_power_monitor_source_;
|
| }
|
|
|
| + // As this function contains EXPECT macros, to allow debugging it should be
|
| + // called inside EXPECT_SCOPED like so;
|
| + // EXPECT_SCOPED(client.InitializeOutputSurfaceAndFirstCommit(scheduler));
|
| + void InitializeOutputSurfaceAndFirstCommit(TestScheduler* scheduler) {
|
| + TRACE_EVENT0("cc",
|
| + "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
|
| + DCHECK(scheduler);
|
| +
|
| + // Check the client doesn't have any actions queued when calling this
|
| + // function.
|
| + EXPECT_NO_ACTION((*this));
|
| + EXPECT_FALSE(needs_begin_frames());
|
| +
|
| + // Start the initial output surface creation.
|
| + EXPECT_FALSE(scheduler->CanStart());
|
| + scheduler->SetCanStart();
|
| + scheduler->SetVisible(true);
|
| + scheduler->SetCanDraw(true);
|
| + EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", (*this));
|
| + Reset();
|
| +
|
| + // Finish the initial output surface creation and run the first commit.
|
| + scheduler->DidCreateAndInitializeOutputSurface();
|
| + scheduler->SetNeedsCommit();
|
| + scheduler->NotifyBeginMainFrameStarted();
|
| + scheduler->NotifyReadyToCommitThenActivateIfNeeded();
|
| +
|
| + {
|
| + SCOPED_TRACE("Go through the motions to draw the commit");
|
| + AdvanceFrame();
|
| +
|
| + // Run the posted deadline task.
|
| + EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| + task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| +
|
| + EXPECT_FALSE(scheduler->CommitPending());
|
| + }
|
| +
|
| + Reset();
|
| +
|
| + {
|
| + SCOPED_TRACE(
|
| + "Run second frame so Scheduler calls SetNeedsBeginFrame(false).");
|
| + AdvanceFrame();
|
| +
|
| + // Run the posted deadline task.
|
| + EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| + task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + }
|
| +
|
| + EXPECT_FALSE(needs_begin_frames());
|
| + Reset();
|
| + }
|
| +
|
| + // As this function contains EXPECT macros, to allow debugging it should be
|
| + // called inside EXPECT_SCOPED like so;
|
| + // EXPECT_SCOPED(client.AdvanceFrame());
|
| void AdvanceFrame() {
|
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"),
|
| "FakeSchedulerClient::AdvanceFrame");
|
| - bool previous_deadline_pending =
|
| - scheduler_->BeginImplFrameDeadlinePending();
|
| + // Consume any previous deadline first, if no deadline is currently
|
| + // pending, ImplFrameDeadlinePending will return false straight away and we
|
| + // will run no tasks.
|
| + task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
|
| + EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
|
| +
|
| + // Send the next BeginFrame message if using an external source, otherwise
|
| + // it will be already in the task queue.
|
| if (ExternalBeginFrame()) {
|
| SendNextBeginFrame();
|
| - // This could be the previous deadline or a new one.
|
| EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
|
| }
|
| - // Consume previous deadline first. It is important that we check for the
|
| - // existence of a previous deadline so that we do not consume the new one.
|
| - if (previous_deadline_pending) {
|
| - EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(true)));
|
| - }
|
| +
|
| // Then run tasks until new deadline is scheduled.
|
| EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false)));
|
| EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
|
| @@ -219,20 +285,16 @@ class FakeSchedulerClient : public SchedulerClient {
|
| }
|
| // SchedulerClient implementation.
|
| void WillBeginImplFrame(const BeginFrameArgs& args) override {
|
| - actions_.push_back("WillBeginImplFrame");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("WillBeginImplFrame");
|
| }
|
| void ScheduledActionSendBeginMainFrame() override {
|
| - actions_.push_back("ScheduledActionSendBeginMainFrame");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionSendBeginMainFrame");
|
| }
|
| void ScheduledActionAnimate() override {
|
| - actions_.push_back("ScheduledActionAnimate");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionAnimate");
|
| }
|
| DrawResult ScheduledActionDrawAndSwapIfPossible() override {
|
| - actions_.push_back("ScheduledActionDrawAndSwapIfPossible");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionDrawAndSwapIfPossible");
|
| num_draws_++;
|
| DrawResult result =
|
| draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
|
| @@ -247,29 +309,22 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return result;
|
| }
|
| DrawResult ScheduledActionDrawAndSwapForced() override {
|
| - actions_.push_back("ScheduledActionDrawAndSwapForced");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionDrawAndSwapForced");
|
| return DRAW_SUCCESS;
|
| }
|
| - void ScheduledActionCommit() override {
|
| - actions_.push_back("ScheduledActionCommit");
|
| - states_.push_back(scheduler_->AsValue());
|
| - }
|
| + void ScheduledActionCommit() override { PushAction("ScheduledActionCommit"); }
|
| void ScheduledActionActivateSyncTree() override {
|
| - actions_.push_back("ScheduledActionActivateSyncTree");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionActivateSyncTree");
|
| }
|
| void ScheduledActionBeginOutputSurfaceCreation() override {
|
| - actions_.push_back("ScheduledActionBeginOutputSurfaceCreation");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionBeginOutputSurfaceCreation");
|
| }
|
| void ScheduledActionPrepareTiles() override {
|
| - actions_.push_back("ScheduledActionPrepareTiles");
|
| - states_.push_back(scheduler_->AsValue());
|
| + PushAction("ScheduledActionPrepareTiles");
|
| }
|
| void DidAnticipatedDrawTimeChange(base::TimeTicks) override {
|
| if (log_anticipated_draw_time_change_)
|
| - actions_.push_back("DidAnticipatedDrawTimeChange");
|
| + PushAction("DidAnticipatedDrawTimeChange");
|
| }
|
| base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); }
|
| base::TimeDelta BeginMainFrameToCommitDurationEstimate() override {
|
| @@ -300,6 +355,11 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return scheduler_->BeginImplFrameDeadlinePending() == state;
|
| }
|
|
|
| + void PushAction(const char* description) {
|
| + actions_.push_back(description);
|
| + states_.push_back(scheduler_->AsValue());
|
| + }
|
| +
|
| bool draw_will_happen_;
|
| bool swap_will_happen_if_draw_happens_;
|
| bool automatic_swap_ack_;
|
| @@ -317,41 +377,6 @@ class FakeSchedulerClient : public SchedulerClient {
|
| scoped_ptr<TestScheduler> scheduler_;
|
| };
|
|
|
| -void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| - FakeSchedulerClient* client) {
|
| - TRACE_EVENT0("cc",
|
| - "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
|
| -
|
| - scheduler->DidCreateAndInitializeOutputSurface();
|
| - scheduler->SetNeedsCommit();
|
| - scheduler->NotifyBeginMainFrameStarted();
|
| - scheduler->NotifyReadyToCommit();
|
| - if (scheduler->settings().impl_side_painting)
|
| - scheduler->NotifyReadyToActivate();
|
| -
|
| - {
|
| - 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());
|
| -
|
| - {
|
| - 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());
|
| -}
|
| -
|
| TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| @@ -372,50 +397,56 @@ TEST(SchedulerTest, SendBeginFramesToChildren) {
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| scheduler_settings.forward_begin_frames_to_children = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| - client.Reset();
|
| EXPECT_FALSE(client.begin_frame_is_sent_to_children());
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| - client.Reset();
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| scheduler->SetChildrenNeedBeginFrames(true);
|
|
|
| - client.AdvanceFrame();
|
| + client.Reset();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_TRUE(client.begin_frame_is_sent_to_children());
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(client.needs_begin_frames());
|
| +}
|
| +
|
| +TEST(SchedulerTest, SendBeginFramesToChildrenWithoutCommit) {
|
| + FakeSchedulerClient client;
|
| + SchedulerSettings scheduler_settings;
|
| + scheduler_settings.use_external_begin_frame_source = true;
|
| + scheduler_settings.forward_begin_frames_to_children = true;
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| + EXPECT_FALSE(client.needs_begin_frames());
|
| + scheduler->SetChildrenNeedBeginFrames(true);
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| + EXPECT_TRUE(client.needs_begin_frames());
|
| +
|
| client.Reset();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| + EXPECT_TRUE(client.begin_frame_is_sent_to_children());
|
| }
|
|
|
| TEST(SchedulerTest, RequestCommit) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -437,7 +468,7 @@ TEST(SchedulerTest, RequestCommit) {
|
| client.Reset();
|
|
|
| // BeginImplFrame should prepare the draw.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -453,7 +484,7 @@ TEST(SchedulerTest, RequestCommit) {
|
|
|
| // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
|
| // to avoid excessive toggles.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -467,21 +498,15 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame.
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -511,7 +536,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
| client.Reset();
|
| // Since another commit is needed, the next BeginImplFrame should initiate
|
| // the second commit.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -533,7 +558,7 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
|
|
| // On the next BeginImplFrame, verify we go back to a quiescent state and
|
| // no longer request BeginImplFrames.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_FALSE(client.needs_begin_frames());
|
| client.Reset();
|
| @@ -541,11 +566,18 @@ TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
|
|
|
| class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
|
| public:
|
| + SchedulerClientThatsetNeedsDrawInsideDraw()
|
| + : FakeSchedulerClient(), request_redraws_(false) {}
|
| +
|
| void ScheduledActionSendBeginMainFrame() override {}
|
| +
|
| + void SetRequestRedrawsInsideDraw(bool enable) { request_redraws_ = enable; }
|
| +
|
| DrawResult ScheduledActionDrawAndSwapIfPossible() override {
|
| // Only SetNeedsRedraw the first time this is called
|
| - if (!num_draws_)
|
| + if (request_redraws_) {
|
| scheduler_->SetNeedsRedraw();
|
| + }
|
| return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible();
|
| }
|
|
|
| @@ -555,8 +587,10 @@ class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
|
| }
|
|
|
| void ScheduledActionCommit() override {}
|
| - void ScheduledActionBeginOutputSurfaceCreation() override {}
|
| void DidAnticipatedDrawTimeChange(base::TimeTicks) override {}
|
| +
|
| + private:
|
| + bool request_redraws_;
|
| };
|
|
|
| // Tests for two different situations:
|
| @@ -567,25 +601,24 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
| SchedulerClientThatsetNeedsDrawInsideDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| + client.SetRequestRedrawsInsideDraw(true);
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| - client.AdvanceFrame();
|
| + client.SetRequestRedrawsInsideDraw(false);
|
| +
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -593,7 +626,7 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) {
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -605,13 +638,9 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| SchedulerClientThatsetNeedsDrawInsideDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
|
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| + client.SetRequestRedrawsInsideDraw(true);
|
| client.SetDrawWillHappen(false);
|
|
|
| scheduler->SetNeedsRedraw();
|
| @@ -620,7 +649,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -630,8 +659,10 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| + client.SetRequestRedrawsInsideDraw(false);
|
| +
|
| // Fail the draw again.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -640,7 +671,7 @@ TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -669,7 +700,6 @@ class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient {
|
| }
|
|
|
| void ScheduledActionCommit() override {}
|
| - void ScheduledActionBeginOutputSurfaceCreation() override {}
|
| void DidAnticipatedDrawTimeChange(base::TimeTicks) override {}
|
|
|
| void SetNeedsCommitOnNextDraw() { set_needs_commit_on_next_draw_ = true; }
|
| @@ -684,12 +714,8 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| SchedulerClientThatSetNeedsCommitInsideDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| EXPECT_FALSE(client.needs_begin_frames());
|
| scheduler->SetNeedsRedraw();
|
| @@ -698,7 +724,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| client.SetNeedsCommitOnNextDraw();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.SetNeedsCommitOnNextDraw();
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
| @@ -707,7 +733,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
|
|
| @@ -717,7 +743,7 @@ TEST(SchedulerTest, RequestCommitInsideDraw) {
|
|
|
| // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
|
| // swap.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| EXPECT_FALSE(scheduler->RedrawPending());
|
| @@ -730,12 +756,8 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| SchedulerClientThatsetNeedsDrawInsideDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| client.SetDrawWillHappen(false);
|
|
|
| @@ -745,7 +767,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_EQ(0, client.num_draws());
|
|
|
| // Fail the draw.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -756,7 +778,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
| EXPECT_TRUE(client.needs_begin_frames());
|
|
|
| // Fail the draw again.
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
|
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| @@ -766,7 +788,7 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
|
|
|
| // Draw successfully.
|
| client.SetDrawWillHappen(true);
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(3, client.num_draws());
|
| EXPECT_TRUE(scheduler->CommitPending());
|
| @@ -778,12 +800,8 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
| SchedulerClientThatSetNeedsCommitInsideDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| - client.Reset();
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_TRUE(scheduler->RedrawPending());
|
| @@ -792,7 +810,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
|
|
| // Draw successfully, this starts a new frame.
|
| client.SetNeedsCommitOnNextDraw();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(1, client.num_draws());
|
|
|
| @@ -803,7 +821,7 @@ TEST(SchedulerTest, NoSwapWhenDrawFails) {
|
| // Fail to draw, this should not start a frame.
|
| client.SetDrawWillHappen(false);
|
| client.SetNeedsCommitOnNextDraw();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(2, client.num_draws());
|
| }
|
| @@ -821,11 +839,8 @@ TEST(SchedulerTest, PrepareTiles) {
|
| SchedulerClientNeedsPrepareTilesInDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // Request both draw and prepare tiles. PrepareTiles shouldn't
|
| // be trigged until BeginImplFrame.
|
| @@ -842,7 +857,7 @@ TEST(SchedulerTest, PrepareTiles) {
|
| // We have no immediate actions to perform, so the BeginImplFrame should post
|
| // the deadline task.
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -870,7 +885,7 @@ TEST(SchedulerTest, PrepareTiles) {
|
| // We have no immediate actions to perform, so the BeginImplFrame should post
|
| // the deadline task.
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -891,7 +906,7 @@ TEST(SchedulerTest, PrepareTiles) {
|
|
|
| // We need a BeginImplFrame where we don't swap to go idle.
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -911,7 +926,7 @@ TEST(SchedulerTest, PrepareTiles) {
|
|
|
| // BeginImplFrame. There will be no draw, only PrepareTiles.
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| client.Reset();
|
| @@ -928,18 +943,15 @@ TEST(SchedulerTest, PrepareTilesOncePerFrame) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // If DidPrepareTiles during a frame, then PrepareTiles should not occur
|
| // again.
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -961,7 +973,7 @@ TEST(SchedulerTest, PrepareTilesOncePerFrame) {
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -984,7 +996,7 @@ TEST(SchedulerTest, PrepareTilesOncePerFrame) {
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1008,7 +1020,7 @@ TEST(SchedulerTest, PrepareTilesOncePerFrame) {
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1027,7 +1039,7 @@ TEST(SchedulerTest, PrepareTilesOncePerFrame) {
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1049,15 +1061,11 @@ TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
|
| SchedulerClientNeedsPrepareTilesInDraw client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| - client.Reset();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| scheduler->SetNeedsRedraw();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
|
|
| // The deadline should be zero since there is no work other than drawing
|
| // pending.
|
| @@ -1101,18 +1109,15 @@ void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms,
|
| base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms));
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| scheduler->SetImplLatencyTakesPriority(impl_latency_takes_priority);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| // Impl thread hits deadline before commit finishes.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| @@ -1124,7 +1129,7 @@ void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms,
|
| client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
|
| client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| EXPECT_EQ(scheduler->MainThreadIsInHighLatencyMode(),
|
| @@ -1166,33 +1171,16 @@ TEST(SchedulerTest, PollForCommitCompletion) {
|
| base::TimeDelta::FromMilliseconds(1),
|
| base::TimeDelta::FromMilliseconds(32),
|
| base::TimeDelta::FromMilliseconds(32));
|
| - client.set_log_anticipated_draw_time_change(true);
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
|
|
| - scheduler->SetCanDraw(true);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->DidCreateAndInitializeOutputSurface();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| - scheduler->SetNeedsCommit();
|
| - EXPECT_TRUE(scheduler->CommitPending());
|
| - scheduler->NotifyBeginMainFrameStarted();
|
| - scheduler->NotifyReadyToCommit();
|
| - scheduler->SetNeedsRedraw();
|
| + client.set_log_anticipated_draw_time_change(true);
|
|
|
| BeginFrameArgs frame_args =
|
| CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src());
|
| frame_args.interval = base::TimeDelta::FromMilliseconds(1000);
|
| - client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args);
|
| -
|
| - EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| - client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| - EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| -
|
| - scheduler->DidSwapBuffers();
|
| - scheduler->DidSwapBuffersComplete();
|
|
|
| // At this point, we've drawn a frame. Start another commit, but hold off on
|
| // the NotifyReadyToCommit for now.
|
| @@ -1242,14 +1230,10 @@ TEST(SchedulerTest, BeginRetroFrame) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
| @@ -1317,12 +1301,9 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| scheduler->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| // To test swap ack throttling, this test disables automatic swap acks.
|
| scheduler->SetMaxSwapsPending(1);
|
| @@ -1334,7 +1315,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| client.Reset();
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1402,19 +1383,15 @@ TEST(SchedulerTest, RetroFrameDoesNotExpireTooEarly) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| - client.Reset();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| scheduler->SetNeedsCommit();
|
| EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1470,19 +1447,15 @@ TEST(SchedulerTest, RetroFrameDoesNotExpireTooLate) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| - client.Reset();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| scheduler->SetNeedsCommit();
|
| EXPECT_TRUE(client.needs_begin_frames());
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1530,17 +1503,13 @@ void BeginFramesNotFromClient(bool use_external_begin_frame_source,
|
| scheduler_settings.use_external_begin_frame_source =
|
| use_external_begin_frame_source;
|
| scheduler_settings.throttle_frame_production = throttle_frame_production;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| DCHECK(!client.fake_external_begin_frame_source());
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame
|
| // without calling SetNeedsBeginFrame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_NO_ACTION(client);
|
| client.Reset();
|
| @@ -1621,12 +1590,9 @@ void BeginFramesNotFromClient_SwapThrottled(
|
| scheduler_settings.use_external_begin_frame_source =
|
| use_external_begin_frame_source;
|
| scheduler_settings.throttle_frame_production = throttle_frame_production;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| scheduler->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| DCHECK(!client.fake_external_begin_frame_source());
|
|
|
| @@ -1641,7 +1607,7 @@ void BeginFramesNotFromClient_SwapThrottled(
|
| client.Reset();
|
|
|
| // Trigger the first BeginImplFrame and BeginMainFrame
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1665,7 +1631,7 @@ void BeginFramesNotFromClient_SwapThrottled(
|
| // but not a BeginMainFrame or draw.
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| - client.AdvanceFrame(); // Run posted BeginFrame.
|
| + EXPECT_SCOPED(client.AdvanceFrame()); // Run posted BeginFrame.
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1739,20 +1705,15 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| // SetNeedsCommit should begin the frame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1778,21 +1739,15 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.impl_side_painting = impl_side_painting;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1846,21 +1801,15 @@ void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) {
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.impl_side_painting = impl_side_painting;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1897,19 +1846,15 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsPrepareTiles) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
|
|
| - client.Reset();
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
| +
|
| scheduler->SetNeedsPrepareTiles();
|
| scheduler->SetNeedsRedraw();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -1928,14 +1873,10 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| @@ -1988,14 +1929,10 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| @@ -2062,14 +1999,10 @@ TEST(SchedulerTest,
|
| StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings scheduler_settings;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame on the next BeginImplFrame.
|
| - client.Reset();
|
| EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
|
| scheduler->SetNeedsCommit();
|
| EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
|
| @@ -2104,21 +2037,15 @@ TEST(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) {
|
| SchedulerSettings scheduler_settings;
|
| scheduler_settings.impl_side_painting = true;
|
| scheduler_settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
|
|
|
| // SetNeedsCommit should begin the frame.
|
| - client.Reset();
|
| scheduler->SetNeedsCommit();
|
| EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
|
|
| client.Reset();
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| @@ -2139,15 +2066,10 @@ TEST(SchedulerTest, SchedulerPowerMonitoring) {
|
| FakeSchedulerClient client;
|
| SchedulerSettings settings;
|
| settings.disable_hi_res_timer_tasks_on_battery = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(settings);
|
| -
|
| - base::TimeTicks before_deadline, after_deadline;
|
|
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
|
|
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + base::TimeTicks before_deadline, after_deadline;
|
|
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| @@ -2156,7 +2078,7 @@ TEST(SchedulerTest, SchedulerPowerMonitoring) {
|
| // On non-battery power
|
| EXPECT_FALSE(client.PowerMonitor()->IsOnBatteryPower());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| client.Reset();
|
|
|
| before_deadline = client.now_src()->Now();
|
| @@ -2171,7 +2093,7 @@ TEST(SchedulerTest, SchedulerPowerMonitoring) {
|
| client.PowerMonitorSource()->GeneratePowerStateEvent(true);
|
| EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| @@ -2188,7 +2110,7 @@ TEST(SchedulerTest, SchedulerPowerMonitoring) {
|
| client.PowerMonitorSource()->GeneratePowerStateEvent(false);
|
| EXPECT_FALSE(client.PowerMonitor()->IsOnBatteryPower());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| @@ -2205,13 +2127,8 @@ TEST(SchedulerTest,
|
| FakeSchedulerClient client;
|
| SchedulerSettings settings;
|
| settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(settings);
|
|
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
| -
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
|
|
|
| // Set needs commit so that the scheduler tries to wait for the main thread
|
| scheduler->SetNeedsCommit();
|
| @@ -2223,7 +2140,7 @@ TEST(SchedulerTest,
|
| client.PowerMonitorSource()->GeneratePowerStateEvent(true);
|
| EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
| @@ -2251,13 +2168,8 @@ TEST(SchedulerTest,
|
| SchedulerSettings settings;
|
| settings.disable_hi_res_timer_tasks_on_battery = true;
|
| settings.use_external_begin_frame_source = true;
|
| - TestScheduler* scheduler = client.CreateScheduler(settings);
|
| -
|
| - scheduler->SetCanStart();
|
| - scheduler->SetVisible(true);
|
| - scheduler->SetCanDraw(true);
|
|
|
| - InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| + CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
|
|
|
| // Set needs commit so that the scheduler tries to wait for the main thread
|
| scheduler->SetNeedsCommit();
|
| @@ -2269,7 +2181,7 @@ TEST(SchedulerTest,
|
| client.PowerMonitorSource()->GeneratePowerStateEvent(true);
|
| EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
|
|
|
| - client.AdvanceFrame();
|
| + EXPECT_SCOPED(client.AdvanceFrame());
|
| scheduler->SetNeedsCommit();
|
| scheduler->SetNeedsRedraw();
|
| client.Reset();
|
|
|