Index: cc/scheduler/scheduler_unittest.cc |
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
index 7da62676c6c4a4aeb19f5a1a5c1451bc6e5c8010..91900a277ef7658046c0b9d16e7226263ff5c6cf 100644 |
--- a/cc/scheduler/scheduler_unittest.cc |
+++ b/cc/scheduler/scheduler_unittest.cc |
@@ -1,6 +1,7 @@ |
// Copyright 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+ |
#include "cc/scheduler/scheduler.h" |
#include <string> |
@@ -47,13 +48,11 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, |
class FakeSchedulerClient : public SchedulerClient { |
public: |
- struct FakeBeginFrameSourceForFakeSchedulerClient |
- : public FakeBeginFrameSource { |
- FakeSchedulerClient* client_; |
- |
- explicit FakeBeginFrameSourceForFakeSchedulerClient( |
- FakeSchedulerClient* client) |
+ class FakeExternalBeginFrameSource : public BeginFrameSourceMixIn { |
+ public: |
+ explicit FakeExternalBeginFrameSource(FakeSchedulerClient* client) |
: client_(client) {} |
+ virtual ~FakeExternalBeginFrameSource() {} |
void OnNeedsBeginFramesChange(bool needs_begin_frames) override { |
if (needs_begin_frames) { |
@@ -63,6 +62,13 @@ class FakeSchedulerClient : public SchedulerClient { |
} |
client_->states_.push_back(client_->scheduler_->AsValue()); |
} |
+ |
+ void TestOnBeginFrame(const BeginFrameArgs& args) { |
+ return CallOnBeginFrame(args); |
+ } |
+ |
+ private: |
+ FakeSchedulerClient* client_; |
}; |
class FakePowerMonitorSource : public base::PowerMonitorSource { |
@@ -86,7 +92,7 @@ class FakeSchedulerClient : public SchedulerClient { |
redraw_will_happen_if_update_visible_tiles_happens_(false), |
now_src_(TestNowSource::Create()), |
task_runner_(new OrderedSimpleTaskRunner(now_src_, true)), |
- fake_frame_source_(this), |
+ fake_external_begin_frame_source_(nullptr), |
fake_power_monitor_source_(new FakePowerMonitorSource), |
power_monitor_(make_scoped_ptr<base::PowerMonitorSource>( |
fake_power_monitor_source_)), |
@@ -108,8 +114,21 @@ class FakeSchedulerClient : public SchedulerClient { |
} |
TestScheduler* CreateScheduler(const SchedulerSettings& settings) { |
- scheduler_ = TestScheduler::Create( |
- now_src_, this, settings, 0, task_runner_, &power_monitor_); |
+ scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source; |
+ if (settings.use_external_begin_frame_source && |
+ settings.throttle_frame_production) { |
+ fake_external_begin_frame_source.reset( |
+ new FakeExternalBeginFrameSource(this)); |
+ fake_external_begin_frame_source_ = |
+ fake_external_begin_frame_source.get(); |
+ } |
+ scheduler_ = TestScheduler::Create(now_src_, |
+ this, |
+ settings, |
+ 0, |
+ task_runner_, |
+ &power_monitor_, |
+ fake_external_begin_frame_source.Pass()); |
DCHECK(scheduler_); |
return scheduler_.get(); |
} |
@@ -119,7 +138,10 @@ class FakeSchedulerClient : public SchedulerClient { |
void set_log_anticipated_draw_time_change(bool log) { |
log_anticipated_draw_time_change_ = log; |
} |
- bool needs_begin_frames() { return fake_frame_source_.NeedsBeginFrames(); } |
+ bool needs_begin_frames() { |
+ DCHECK(ExternalBeginFrame()); |
+ return fake_external_begin_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]; } |
@@ -129,11 +151,12 @@ class FakeSchedulerClient : public SchedulerClient { |
} |
bool ExternalBeginFrame() { |
- return scheduler_->settings().begin_frame_scheduling_enabled && |
+ return scheduler_->settings().use_external_begin_frame_source && |
scheduler_->settings().throttle_frame_production; |
} |
- FakeBeginFrameSource* ExternalBeginFrameSource() override { |
- return &fake_frame_source_; |
+ |
+ FakeExternalBeginFrameSource* fake_external_begin_frame_source() const { |
+ return fake_external_begin_frame_source_; |
} |
base::PowerMonitor* PowerMonitor() { return &power_monitor_; } |
@@ -145,12 +168,11 @@ class FakeSchedulerClient : public SchedulerClient { |
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( |
+ fake_external_begin_frame_source_->TestOnBeginFrame( |
CreateBeginFrameArgsForTesting(now_src_)); |
EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
} |
@@ -288,7 +310,7 @@ class FakeSchedulerClient : public SchedulerClient { |
std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat>> states_; |
scoped_refptr<TestNowSource> now_src_; |
scoped_refptr<OrderedSimpleTaskRunner> task_runner_; |
- FakeBeginFrameSourceForFakeSchedulerClient fake_frame_source_; |
+ FakeExternalBeginFrameSource* fake_external_begin_frame_source_; |
FakePowerMonitorSource* fake_power_monitor_source_; |
base::PowerMonitor power_monitor_; |
scoped_ptr<TestScheduler> scheduler_; |
@@ -327,14 +349,13 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler, |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
client->task_runner().RunTasksWhile(client->ImplFrameDeadlinePending(true)); |
EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
- |
- // EXPECT_FALSE(client->needs_begin_frames()); |
} |
TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { |
FakeSchedulerClient client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -348,6 +369,7 @@ TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) { |
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); |
@@ -413,6 +435,7 @@ TEST(SchedulerTest, RequestCommit) { |
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); |
@@ -511,8 +534,9 @@ class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient { |
// 2. the scheduler drawing twice inside a single tick |
TEST(SchedulerTest, RequestRedrawInsideDraw) { |
SchedulerClientThatsetNeedsDrawInsideDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -548,8 +572,9 @@ TEST(SchedulerTest, RequestRedrawInsideDraw) { |
// Test that requesting redraw inside a failed draw doesn't lose the request. |
TEST(SchedulerTest, RequestRedrawInsideFailedDraw) { |
SchedulerClientThatsetNeedsDrawInsideDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -626,8 +651,9 @@ class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient { |
// happen inside a ScheduledActionDrawAndSwap |
TEST(SchedulerTest, RequestCommitInsideDraw) { |
SchedulerClientThatSetNeedsCommitInsideDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -671,8 +697,9 @@ TEST(SchedulerTest, RequestCommitInsideDraw) { |
// Tests that when a draw fails then the pending commit should not be dropped. |
TEST(SchedulerTest, RequestCommitInsideFailedDraw) { |
SchedulerClientThatsetNeedsDrawInsideDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -718,8 +745,9 @@ TEST(SchedulerTest, RequestCommitInsideFailedDraw) { |
TEST(SchedulerTest, NoSwapWhenDrawFails) { |
SchedulerClientThatSetNeedsCommitInsideDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -760,8 +788,9 @@ class SchedulerClientNeedsManageTilesInDraw : public FakeSchedulerClient { |
// Test manage tiles is independant of draws. |
TEST(SchedulerTest, ManageTiles) { |
SchedulerClientNeedsManageTilesInDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -866,8 +895,9 @@ TEST(SchedulerTest, ManageTiles) { |
// initiates it, then the state machine should not ManageTiles on that frame. |
TEST(SchedulerTest, ManageTilesOncePerFrame) { |
FakeSchedulerClient client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -986,6 +1016,7 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) { |
FakeSchedulerClient client; |
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); |
@@ -1045,8 +1076,9 @@ TEST(SchedulerTest, ShouldUpdateVisibleTiles) { |
TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { |
SchedulerClientNeedsManageTilesInDraw client; |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -1096,8 +1128,9 @@ void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms, |
base::TimeDelta::FromMilliseconds( |
begin_main_frame_to_commit_estimate_in_ms), |
base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms)); |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ 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); |
@@ -1163,8 +1196,9 @@ TEST(SchedulerTest, PollForCommitCompletion) { |
base::TimeDelta::FromMilliseconds(32), |
base::TimeDelta::FromMilliseconds(32)); |
client.set_log_anticipated_draw_time_change(true); |
- SchedulerSettings default_scheduler_settings; |
- TestScheduler* scheduler = client.CreateScheduler(default_scheduler_settings); |
+ SchedulerSettings scheduler_settings; |
+ scheduler_settings.use_external_begin_frame_source = true; |
+ TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
scheduler->SetCanDraw(true); |
scheduler->SetCanStart(); |
@@ -1179,7 +1213,7 @@ TEST(SchedulerTest, PollForCommitCompletion) { |
BeginFrameArgs frame_args = CreateBeginFrameArgsForTesting(client.now_src()); |
frame_args.interval = base::TimeDelta::FromMilliseconds(1000); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(frame_args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
client.task_runner().RunPendingTasks(); // Run posted deadline. |
@@ -1192,7 +1226,7 @@ TEST(SchedulerTest, PollForCommitCompletion) { |
// the NotifyReadyToCommit for now. |
EXPECT_FALSE(scheduler->CommitPending()); |
scheduler->SetNeedsCommit(); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(frame_args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args); |
EXPECT_TRUE(scheduler->CommitPending()); |
// Draw and swap the frame, but don't ack the swap to simulate the Browser |
@@ -1235,6 +1269,7 @@ TEST(SchedulerTest, PollForCommitCompletion) { |
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); |
@@ -1251,7 +1286,7 @@ TEST(SchedulerTest, BeginRetroFrame) { |
// This is the first BeginFrame, which will be handled immediately. |
BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); |
args.deadline += base::TimeDelta::FromHours(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
@@ -1260,9 +1295,9 @@ TEST(SchedulerTest, BeginRetroFrame) { |
// Queue BeginFrames while we are still handling the previous BeginFrame. |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
// If we don't swap on the deadline, we wait for the next BeginImplFrame. |
client.task_runner().RunPendingTasks(); // Run posted deadline. |
@@ -1308,6 +1343,7 @@ TEST(SchedulerTest, BeginRetroFrame) { |
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); |
@@ -1328,7 +1364,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
// This is the first BeginFrame, which will be handled immediately. |
BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); |
args.deadline += base::TimeDelta::FromHours(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
@@ -1338,7 +1374,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
// Queue BeginFrame while we are still handling the previous BeginFrame. |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_NO_ACTION(client); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
client.Reset(); |
@@ -1369,7 +1405,7 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
// Queue BeginFrame while we are still handling the previous BeginFrame. |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_NO_ACTION(client); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
EXPECT_TRUE(client.needs_begin_frames()); |
@@ -1395,12 +1431,12 @@ TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) { |
client.Reset(); |
} |
-void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, |
+void BeginFramesNotFromClient(bool use_external_begin_frame_source, |
bool throttle_frame_production) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |
- scheduler_settings.begin_frame_scheduling_enabled = |
- begin_frame_scheduling_enabled; |
+ 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(); |
@@ -1408,11 +1444,12 @@ void BeginFramesNotFromClient(bool begin_frame_scheduling_enabled, |
scheduler->SetCanDraw(true); |
InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
+ DCHECK(!client.fake_external_begin_frame_source()); |
+ |
// SetNeedsCommit should begin the frame on the next BeginImplFrame |
// without calling SetNeedsBeginFrame. |
client.Reset(); |
scheduler->SetNeedsCommit(); |
- EXPECT_FALSE(client.needs_begin_frames()); |
EXPECT_NO_ACTION(client); |
client.Reset(); |
@@ -1422,21 +1459,18 @@ 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_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_frames()); |
client.Reset(); |
// NotifyReadyToCommit should trigger the commit. |
scheduler->NotifyBeginMainFrameStarted(); |
scheduler->NotifyReadyToCommit(); |
EXPECT_SINGLE_ACTION("ScheduledActionCommit", client); |
- EXPECT_FALSE(client.needs_begin_frames()); |
client.Reset(); |
// BeginImplFrame should prepare the draw. |
@@ -1444,14 +1478,12 @@ 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_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_frames()); |
client.Reset(); |
// The following BeginImplFrame deadline should SetNeedsBeginFrame(false) |
@@ -1465,37 +1497,37 @@ 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_frames()); |
client.Reset(); |
} |
TEST(SchedulerTest, SyntheticBeginFrames) { |
- bool begin_frame_scheduling_enabled = false; |
+ bool use_external_begin_frame_source = false; |
bool throttle_frame_production = true; |
- BeginFramesNotFromClient(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient(use_external_begin_frame_source, |
throttle_frame_production); |
} |
TEST(SchedulerTest, VSyncThrottlingDisabled) { |
- bool begin_frame_scheduling_enabled = true; |
+ bool use_external_begin_frame_source = true; |
bool throttle_frame_production = false; |
- BeginFramesNotFromClient(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient(use_external_begin_frame_source, |
throttle_frame_production); |
} |
TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) { |
- bool begin_frame_scheduling_enabled = false; |
+ bool use_external_begin_frame_source = false; |
bool throttle_frame_production = false; |
- BeginFramesNotFromClient(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient(use_external_begin_frame_source, |
throttle_frame_production); |
} |
-void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, |
- bool throttle_frame_production) { |
+void BeginFramesNotFromClient_SwapThrottled( |
+ bool use_external_begin_frame_source, |
+ bool throttle_frame_production) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |
- scheduler_settings.begin_frame_scheduling_enabled = |
- begin_frame_scheduling_enabled; |
+ 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(); |
@@ -1503,6 +1535,8 @@ void BeginFramesNotFromClient_SwapThrottled(bool begin_frame_scheduling_enabled, |
scheduler->SetCanDraw(true); |
InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
+ DCHECK(!client.fake_external_begin_frame_source()); |
+ |
// To test swap ack throttling, this test disables automatic swap acks. |
scheduler->SetMaxSwapsPending(1); |
client.SetAutomaticSwapAck(false); |
@@ -1510,7 +1544,6 @@ 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_frames()); |
EXPECT_NO_ACTION(client); |
client.Reset(); |
@@ -1519,14 +1552,12 @@ 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_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_frames()); |
client.Reset(); |
// Swapping will put us into a swap throttled state. |
@@ -1534,7 +1565,6 @@ 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_frames()); |
client.Reset(); |
// While swap throttled, BeginFrames should trigger BeginImplFrames, |
@@ -1543,14 +1573,12 @@ 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_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_frames()); |
client.Reset(); |
// BeginImplFrame deadline should draw. |
@@ -1559,35 +1587,35 @@ 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_frames()); |
client.Reset(); |
} |
TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) { |
- bool begin_frame_scheduling_enabled = false; |
+ bool use_external_begin_frame_source = false; |
bool throttle_frame_production = true; |
- BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
throttle_frame_production); |
} |
TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) { |
- bool begin_frame_scheduling_enabled = true; |
+ bool use_external_begin_frame_source = true; |
bool throttle_frame_production = false; |
- BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
throttle_frame_production); |
} |
TEST(SchedulerTest, |
SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) { |
- bool begin_frame_scheduling_enabled = false; |
+ bool use_external_begin_frame_source = false; |
bool throttle_frame_production = false; |
- BeginFramesNotFromClient_SwapThrottled(begin_frame_scheduling_enabled, |
+ BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source, |
throttle_frame_production); |
} |
TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |
+ scheduler_settings.use_external_begin_frame_source = true; |
TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
scheduler->SetCanStart(); |
scheduler->SetVisible(true); |
@@ -1605,6 +1633,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) { |
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); |
@@ -1643,6 +1672,7 @@ void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency( |
FakeSchedulerClient client; |
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); |
@@ -1710,6 +1740,7 @@ void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) { |
FakeSchedulerClient client; |
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); |
@@ -1760,6 +1791,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) { |
TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |
+ scheduler_settings.use_external_begin_frame_source = true; |
TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
scheduler->SetCanStart(); |
scheduler->SetVisible(true); |
@@ -1790,6 +1822,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) { |
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); |
@@ -1806,7 +1839,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
client.Reset(); |
BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); |
args.deadline += base::TimeDelta::FromHours(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
@@ -1814,9 +1847,9 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
// Queue BeginFrames while we are still handling the previous BeginFrame. |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
// If we don't swap on the deadline, we wait for the next BeginImplFrame. |
client.Reset(); |
@@ -1848,6 +1881,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
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); |
@@ -1864,7 +1898,7 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { |
client.Reset(); |
BeginFrameArgs args = CreateBeginFrameArgsForTesting(client.now_src()); |
args.deadline += base::TimeDelta::FromHours(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
@@ -1872,9 +1906,9 @@ TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) { |
// Queue BeginFrames while we are still handling the previous BeginFrame. |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
args.frame_time += base::TimeDelta::FromSeconds(1); |
- client.ExternalBeginFrameSource()->TestOnBeginFrame(args); |
+ client.fake_external_begin_frame_source()->TestOnBeginFrame(args); |
// If we don't swap on the deadline, we wait for the next BeginImplFrame. |
client.Reset(); |
@@ -1921,7 +1955,6 @@ TEST(SchedulerTest, |
StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |
- scheduler_settings.begin_frame_scheduling_enabled = false; |
TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
scheduler->SetCanStart(); |
scheduler->SetVisible(true); |
@@ -1963,6 +1996,7 @@ TEST(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) { |
FakeSchedulerClient client; |
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); |
@@ -2063,6 +2097,7 @@ TEST(SchedulerTest, |
SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOff) { |
FakeSchedulerClient client; |
SchedulerSettings settings; |
+ settings.use_external_begin_frame_source = true; |
TestScheduler* scheduler = client.CreateScheduler(settings); |
scheduler->SetCanStart(); |
@@ -2108,6 +2143,7 @@ TEST(SchedulerTest, |
FakeSchedulerClient client; |
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(); |