| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/surfaces/display_scheduler.h" | 5 #include "cc/surfaces/display_scheduler.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| 11 #include "cc/output/output_surface.h" | 11 #include "cc/output/output_surface.h" |
| 12 #include "ui/gfx/frame_time.h" | |
| 13 | 12 |
| 14 namespace cc { | 13 namespace cc { |
| 15 | 14 |
| 16 DisplayScheduler::DisplayScheduler( | 15 DisplayScheduler::DisplayScheduler( |
| 17 DisplaySchedulerClient* client, | 16 DisplaySchedulerClient* client, |
| 18 BeginFrameSource* begin_frame_source, | 17 BeginFrameSource* begin_frame_source, |
| 19 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 18 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 20 int max_pending_swaps) | 19 int max_pending_swaps) |
| 21 : client_(client), | 20 : client_(client), |
| 22 begin_frame_source_(begin_frame_source), | 21 begin_frame_source_(begin_frame_source), |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 | 107 |
| 109 child_surface_ids_to_expect_damage_from_ = | 108 child_surface_ids_to_expect_damage_from_ = |
| 110 base::STLSetIntersection<std::vector<SurfaceId>>( | 109 base::STLSetIntersection<std::vector<SurfaceId>>( |
| 111 child_surface_ids_damaged_, child_surface_ids_damaged_prev_); | 110 child_surface_ids_damaged_, child_surface_ids_damaged_prev_); |
| 112 | 111 |
| 113 child_surface_ids_damaged_prev_.swap(child_surface_ids_damaged_); | 112 child_surface_ids_damaged_prev_.swap(child_surface_ids_damaged_); |
| 114 child_surface_ids_damaged_.clear(); | 113 child_surface_ids_damaged_.clear(); |
| 115 } | 114 } |
| 116 | 115 |
| 117 bool DisplayScheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { | 116 bool DisplayScheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { |
| 118 base::TimeTicks now = gfx::FrameTime::Now(); | 117 base::TimeTicks now = base::TimeTicks::Now(); |
| 119 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), | 118 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), |
| 120 "now", now); | 119 "now", now); |
| 121 | 120 |
| 122 // Only service missed BeginFrames if they haven't already expired. | 121 // Only service missed BeginFrames if they haven't already expired. |
| 123 base::TimeTicks adjusted_deadline = | 122 base::TimeTicks adjusted_deadline = |
| 124 args.deadline - BeginFrameArgs::DefaultEstimatedParentDrawTime(); | 123 args.deadline - BeginFrameArgs::DefaultEstimatedParentDrawTime(); |
| 125 if (args.type == BeginFrameArgs::MISSED && now > adjusted_deadline) | 124 if (args.type == BeginFrameArgs::MISSED && now > adjusted_deadline) |
| 126 return false; | 125 return false; |
| 127 | 126 |
| 128 // If we get another BeginFrame before the previous deadline, | 127 // If we get another BeginFrame before the previous deadline, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 TRACE_EVENT_SCOPE_THREAD); | 226 TRACE_EVENT_SCOPE_THREAD); |
| 228 return; | 227 return; |
| 229 } | 228 } |
| 230 | 229 |
| 231 // Schedule the deadline. | 230 // Schedule the deadline. |
| 232 begin_frame_deadline_task_time_ = desired_deadline; | 231 begin_frame_deadline_task_time_ = desired_deadline; |
| 233 begin_frame_deadline_task_.Cancel(); | 232 begin_frame_deadline_task_.Cancel(); |
| 234 begin_frame_deadline_task_.Reset(begin_frame_deadline_closure_); | 233 begin_frame_deadline_task_.Reset(begin_frame_deadline_closure_); |
| 235 | 234 |
| 236 base::TimeDelta delta = | 235 base::TimeDelta delta = |
| 237 std::max(base::TimeDelta(), desired_deadline - gfx::FrameTime::Now()); | 236 std::max(base::TimeDelta(), desired_deadline - base::TimeTicks::Now()); |
| 238 task_runner_->PostDelayedTask(FROM_HERE, | 237 task_runner_->PostDelayedTask(FROM_HERE, |
| 239 begin_frame_deadline_task_.callback(), delta); | 238 begin_frame_deadline_task_.callback(), delta); |
| 240 TRACE_EVENT2("cc", "Using new deadline", "delta", delta.ToInternalValue(), | 239 TRACE_EVENT2("cc", "Using new deadline", "delta", delta.ToInternalValue(), |
| 241 "desired_deadline", desired_deadline); | 240 "desired_deadline", desired_deadline); |
| 242 } | 241 } |
| 243 | 242 |
| 244 void DisplayScheduler::OnBeginFrameDeadline() { | 243 void DisplayScheduler::OnBeginFrameDeadline() { |
| 245 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); | 244 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); |
| 246 inside_begin_frame_deadline_interval_ = false; | 245 inside_begin_frame_deadline_interval_ = false; |
| 247 begin_frame_deadline_task_.Cancel(); | 246 begin_frame_deadline_task_.Cancel(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 264 } | 263 } |
| 265 | 264 |
| 266 void DisplayScheduler::DidSwapBuffersComplete() { | 265 void DisplayScheduler::DidSwapBuffersComplete() { |
| 267 pending_swaps_--; | 266 pending_swaps_--; |
| 268 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffersComplete", | 267 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffersComplete", |
| 269 "pending_frames", pending_swaps_); | 268 "pending_frames", pending_swaps_); |
| 270 ScheduleBeginFrameDeadline(); | 269 ScheduleBeginFrameDeadline(); |
| 271 } | 270 } |
| 272 | 271 |
| 273 } // namespace cc | 272 } // namespace cc |
| OLD | NEW |