Commit 22c5f0f2 authored by simonhong's avatar simonhong Committed by Commit bot

cc: Trigger BeginFrame when children needs it without SetNeedsCommit

Browser scheduler should trigger BeginFrame when children needs even if
it doesn't have a pending commit.

R=brianderson@chromium.org
BUG=372086
TEST=cc_unittests

Review URL: https://codereview.chromium.org/802353002

Cr-Commit-Position: refs/heads/master@{#308467}
parent d193f6bb
...@@ -446,7 +446,7 @@ bool Scheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { ...@@ -446,7 +446,7 @@ bool Scheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) {
void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) { void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) {
DCHECK(settings_.forward_begin_frames_to_children); DCHECK(settings_.forward_begin_frames_to_children);
state_machine_.SetChildrenNeedBeginFrames(children_need_begin_frames); state_machine_.SetChildrenNeedBeginFrames(children_need_begin_frames);
DCHECK_EQ(state_machine_.NextAction(), SchedulerStateMachine::ACTION_NONE); ProcessScheduledActions();
} }
// BeginRetroFrame is called for BeginFrames that we've deferred because // BeginRetroFrame is called for BeginFrames that we've deferred because
......
...@@ -384,17 +384,42 @@ TEST(SchedulerTest, SendBeginFramesToChildren) { ...@@ -384,17 +384,42 @@ TEST(SchedulerTest, SendBeginFramesToChildren) {
EXPECT_FALSE(client.begin_frame_is_sent_to_children()); EXPECT_FALSE(client.begin_frame_is_sent_to_children());
scheduler->SetNeedsCommit(); scheduler->SetNeedsCommit();
EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
client.Reset(); EXPECT_TRUE(client.needs_begin_frames());
scheduler->SetChildrenNeedBeginFrames(true); scheduler->SetChildrenNeedBeginFrames(true);
client.Reset();
client.AdvanceFrame(); client.AdvanceFrame();
EXPECT_TRUE(client.begin_frame_is_sent_to_children()); EXPECT_TRUE(client.begin_frame_is_sent_to_children());
EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
EXPECT_TRUE(client.needs_begin_frames()); 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;
TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
scheduler->SetCanStart();
scheduler->SetVisible(true);
scheduler->SetCanDraw(true);
EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
client.Reset();
EXPECT_FALSE(client.needs_begin_frames());
scheduler->SetChildrenNeedBeginFrames(true);
EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
EXPECT_TRUE(client.needs_begin_frames());
client.Reset(); client.Reset();
client.AdvanceFrame();
EXPECT_TRUE(client.begin_frame_is_sent_to_children());
} }
TEST(SchedulerTest, RequestCommit) { TEST(SchedulerTest, RequestCommit) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment