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 |