| Index: cc/surfaces/display_scheduler.cc
|
| diff --git a/cc/surfaces/display_scheduler.cc b/cc/surfaces/display_scheduler.cc
|
| index 46f26ff331f2306d8f504b58f907fbc060d0affd..1e91f5fd43004ad3867b92a21595f9fefc0ec044 100644
|
| --- a/cc/surfaces/display_scheduler.cc
|
| +++ b/cc/surfaces/display_scheduler.cc
|
| @@ -73,9 +73,9 @@ void DisplayScheduler::SetRootSurfaceResourcesLocked(bool locked) {
|
| void DisplayScheduler::ForceImmediateSwapIfPossible() {
|
| TRACE_EVENT0("cc", "DisplayScheduler::ForceImmediateSwapIfPossible");
|
| bool in_begin = inside_begin_frame_deadline_interval_;
|
| - AttemptDrawAndSwap();
|
| + bool did_draw = AttemptDrawAndSwap();
|
| if (in_begin)
|
| - begin_frame_source_->DidFinishFrame(this, 0);
|
| + DidFinishFrame(did_draw);
|
| }
|
|
|
| void DisplayScheduler::DisplayResized() {
|
| @@ -128,14 +128,14 @@ void DisplayScheduler::OutputSurfaceLost() {
|
| ScheduleBeginFrameDeadline();
|
| }
|
|
|
| -void DisplayScheduler::DrawAndSwap() {
|
| +bool DisplayScheduler::DrawAndSwap() {
|
| TRACE_EVENT0("cc", "DisplayScheduler::DrawAndSwap");
|
| DCHECK_LT(pending_swaps_, max_pending_swaps_);
|
| DCHECK(!output_surface_lost_);
|
|
|
| bool success = client_->DrawAndSwap();
|
| if (!success)
|
| - return;
|
| + return false;
|
|
|
| child_surface_ids_to_expect_damage_from_ =
|
| base::STLSetIntersection<std::vector<SurfaceId>>(
|
| @@ -150,6 +150,7 @@ void DisplayScheduler::DrawAndSwap() {
|
|
|
| expect_damage_from_root_surface_ = root_surface_damaged_;
|
| root_surface_damaged_ = false;
|
| + return true;
|
| }
|
|
|
| bool DisplayScheduler::OnBeginFrameDerivedImpl(const BeginFrameArgs& args) {
|
| @@ -332,14 +333,14 @@ void DisplayScheduler::ScheduleBeginFrameDeadline() {
|
| "desired_deadline", desired_deadline);
|
| }
|
|
|
| -void DisplayScheduler::AttemptDrawAndSwap() {
|
| +bool DisplayScheduler::AttemptDrawAndSwap() {
|
| inside_begin_frame_deadline_interval_ = false;
|
| begin_frame_deadline_task_.Cancel();
|
| begin_frame_deadline_task_time_ = base::TimeTicks();
|
|
|
| if (ShouldDraw()) {
|
| if (pending_swaps_ < max_pending_swaps_ && !root_surface_resources_locked_)
|
| - DrawAndSwap();
|
| + return DrawAndSwap();
|
| } else {
|
| // We are going idle, so reset expectations.
|
| child_surface_ids_to_expect_damage_from_.clear();
|
| @@ -350,13 +351,23 @@ void DisplayScheduler::AttemptDrawAndSwap() {
|
|
|
| StopObservingBeginFrames();
|
| }
|
| + return false;
|
| }
|
|
|
| void DisplayScheduler::OnBeginFrameDeadline() {
|
| TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline");
|
| + DCHECK(inside_begin_frame_deadline_interval_);
|
| +
|
| + bool did_draw = AttemptDrawAndSwap();
|
| + DidFinishFrame(did_draw);
|
| +}
|
|
|
| - AttemptDrawAndSwap();
|
| - begin_frame_source_->DidFinishFrame(this, 0);
|
| +void DisplayScheduler::DidFinishFrame(bool did_draw) {
|
| + // TODO(eseckler): Determine and set correct |ack.latest_confirmed_frame|.
|
| + BeginFrameAck ack(current_begin_frame_args_.source_id,
|
| + current_begin_frame_args_.sequence_number,
|
| + current_begin_frame_args_.sequence_number, 0, did_draw);
|
| + begin_frame_source_->DidFinishFrame(this, ack);
|
| }
|
|
|
| void DisplayScheduler::DidSwapBuffers() {
|
|
|