Index: cc/scheduler/scheduler.cc |
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
index 14d5e69e6a0b6521be64398bb0755aca1ce5e559..8d3686277e9b3378728d8158b719542d5e2f6b67 100644 |
--- a/cc/scheduler/scheduler.cc |
+++ b/cc/scheduler/scheduler.cc |
@@ -322,7 +322,11 @@ void Scheduler::BeginImplFrameWithDeadline(const BeginFrameArgs& args) { |
// Discard missed begin frames if they are too late. |
if (adjusted_args.type == BeginFrameArgs::MISSED && |
now > adjusted_args.deadline) { |
- begin_frame_source_->DidFinishFrame(this, 0); |
+ BeginFrameAck ack( |
+ adjusted_args.source_id, adjusted_args.sequence_number, |
+ state_machine_.last_frame_number_compositor_frame_was_fresh(), 0, |
+ false); |
+ begin_frame_source_->DidFinishFrame(this, ack); |
return; |
} |
@@ -332,7 +336,11 @@ void Scheduler::BeginImplFrameWithDeadline(const BeginFrameArgs& args) { |
OnBeginImplFrameDeadline(); |
// We may not need begin frames any longer. |
if (!observing_begin_frame_source_) { |
- begin_frame_source_->DidFinishFrame(this, 0); |
+ BeginFrameAck ack( |
+ adjusted_args.source_id, adjusted_args.sequence_number, |
+ state_machine_.last_frame_number_compositor_frame_was_fresh(), 0, |
+ false); |
+ begin_frame_source_->DidFinishFrame(this, ack); |
return; |
} |
} |
@@ -391,8 +399,13 @@ void Scheduler::BeginImplFrameWithDeadline(const BeginFrameArgs& args) { |
can_activate_before_deadline)) { |
TRACE_EVENT_INSTANT0("cc", "SkipBeginImplFrameToReduceLatency", |
TRACE_EVENT_SCOPE_THREAD); |
- if (begin_frame_source_) |
- begin_frame_source_->DidFinishFrame(this, 0); |
+ if (begin_frame_source_) { |
+ BeginFrameAck ack( |
+ adjusted_args.source_id, adjusted_args.sequence_number, |
+ state_machine_.last_frame_number_compositor_frame_was_fresh(), 0, |
+ false); |
+ begin_frame_source_->DidFinishFrame(this, ack); |
+ } |
return; |
} |
@@ -420,8 +433,14 @@ void Scheduler::FinishImplFrame() { |
ProcessScheduledActions(); |
client_->DidFinishImplFrame(); |
- if (begin_frame_source_) |
- begin_frame_source_->DidFinishFrame(this, 0); |
+ if (begin_frame_source_) { |
+ BeginFrameAck ack( |
+ begin_main_frame_args_.source_id, |
+ begin_main_frame_args_.sequence_number, |
+ state_machine_.last_frame_number_compositor_frame_was_fresh(), 0, |
+ state_machine_.did_submit_in_last_frame()); |
+ begin_frame_source_->DidFinishFrame(this, ack); |
+ } |
begin_impl_frame_tracker_.Finish(); |
} |
@@ -435,7 +454,7 @@ void Scheduler::BeginImplFrame(const BeginFrameArgs& args) { |
DCHECK(state_machine_.HasInitializedCompositorFrameSink()); |
begin_impl_frame_tracker_.Start(args); |
- state_machine_.OnBeginImplFrame(); |
+ state_machine_.OnBeginImplFrame(args.source_id, args.sequence_number); |
devtools_instrumentation::DidBeginFrame(layer_tree_host_id_); |
compositor_timing_history_->WillBeginImplFrame( |
state_machine_.NewActiveTreeLikely()); |
@@ -757,4 +776,16 @@ bool Scheduler::IsBeginMainFrameSentOrStarted() const { |
SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED); |
} |
+uint64_t Scheduler::CurrentBeginFrameSourceId() { |
+ return begin_main_frame_args_.source_id; |
+} |
+ |
+uint64_t Scheduler::CurrentBeginFrameNumber() { |
+ return begin_main_frame_args_.sequence_number; |
+} |
+ |
+uint64_t Scheduler::OldestIncorporatedFrameForActiveTree() { |
+ return state_machine_.last_frame_number_active_tree_was_fresh(); |
+} |
+ |
} // namespace cc |