Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: cc/surfaces/display_scheduler.cc

Issue 2591013004: [cc] Add and use BeginFrameAck for DidFinishFrame. (Closed)
Patch Set: remove ipc struct traits for BeginFrameAck. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/surfaces/display_scheduler.h ('k') | cc/surfaces/display_scheduler_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « cc/surfaces/display_scheduler.h ('k') | cc/surfaces/display_scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698