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" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 root_surface_resources_locked_ = locked; | 52 root_surface_resources_locked_ = locked; |
53 ScheduleBeginFrameDeadline(); | 53 ScheduleBeginFrameDeadline(); |
54 } | 54 } |
55 | 55 |
56 // This is used to force an immediate swap before a resize. | 56 // This is used to force an immediate swap before a resize. |
57 void DisplayScheduler::ForceImmediateSwapIfPossible() { | 57 void DisplayScheduler::ForceImmediateSwapIfPossible() { |
58 TRACE_EVENT0("cc", "DisplayScheduler::ForceImmediateSwapIfPossible"); | 58 TRACE_EVENT0("cc", "DisplayScheduler::ForceImmediateSwapIfPossible"); |
59 bool in_begin = inside_begin_frame_deadline_interval_; | 59 bool in_begin = inside_begin_frame_deadline_interval_; |
60 AttemptDrawAndSwap(); | 60 AttemptDrawAndSwap(); |
61 if (in_begin) | 61 if (in_begin) |
62 begin_frame_source_->DidFinishFrame(0); | 62 begin_frame_source_->DidFinishFrame(this); |
63 } | 63 } |
64 | 64 |
65 void DisplayScheduler::DisplayResized() { | 65 void DisplayScheduler::DisplayResized() { |
66 expecting_root_surface_damage_because_of_resize_ = true; | 66 expecting_root_surface_damage_because_of_resize_ = true; |
67 expect_damage_from_root_surface_ = true; | 67 expect_damage_from_root_surface_ = true; |
68 needs_draw_ = true; | 68 needs_draw_ = true; |
69 ScheduleBeginFrameDeadline(); | 69 ScheduleBeginFrameDeadline(); |
70 } | 70 } |
71 | 71 |
72 // Notification that there was a resize or the root surface changed and | 72 // Notification that there was a resize or the root surface changed and |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 child_surface_ids_damaged_.clear(); | 128 child_surface_ids_damaged_.clear(); |
129 | 129 |
130 needs_draw_ = false; | 130 needs_draw_ = false; |
131 all_active_child_surfaces_ready_to_draw_ = | 131 all_active_child_surfaces_ready_to_draw_ = |
132 child_surface_ids_to_expect_damage_from_.empty(); | 132 child_surface_ids_to_expect_damage_from_.empty(); |
133 | 133 |
134 expect_damage_from_root_surface_ = root_surface_damaged_; | 134 expect_damage_from_root_surface_ = root_surface_damaged_; |
135 root_surface_damaged_ = false; | 135 root_surface_damaged_ = false; |
136 } | 136 } |
137 | 137 |
138 bool DisplayScheduler::OnBeginFrameDerivedImpl(const BeginFrameArgs& args) { | 138 const BeginFrameArgs& DisplayScheduler::LastUsedBeginFrameArgs() const { |
| 139 return current_begin_frame_args_; |
| 140 } |
| 141 |
| 142 void DisplayScheduler::OnBeginFrame(const BeginFrameArgs& args) { |
139 base::TimeTicks now = base::TimeTicks::Now(); | 143 base::TimeTicks now = base::TimeTicks::Now(); |
140 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), | 144 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), |
141 "now", now); | 145 "now", now); |
142 | 146 |
143 // If we get another BeginFrame before the previous deadline, | 147 // If we get another BeginFrame before the previous deadline, |
144 // synchronously trigger the previous deadline before progressing. | 148 // synchronously trigger the previous deadline before progressing. |
145 if (inside_begin_frame_deadline_interval_) { | 149 if (inside_begin_frame_deadline_interval_) { |
146 OnBeginFrameDeadline(); | 150 OnBeginFrameDeadline(); |
147 } | 151 } |
148 | 152 |
149 // Schedule the deadline. | 153 // Schedule the deadline. |
150 current_begin_frame_args_ = args; | 154 current_begin_frame_args_ = args; |
151 current_begin_frame_args_.deadline -= | 155 current_begin_frame_args_.deadline -= |
152 BeginFrameArgs::DefaultEstimatedParentDrawTime(); | 156 BeginFrameArgs::DefaultEstimatedParentDrawTime(); |
153 inside_begin_frame_deadline_interval_ = true; | 157 inside_begin_frame_deadline_interval_ = true; |
154 ScheduleBeginFrameDeadline(); | 158 ScheduleBeginFrameDeadline(); |
155 | |
156 return true; | |
157 } | 159 } |
158 | 160 |
159 void DisplayScheduler::OnBeginFrameSourcePausedChanged(bool paused) { | 161 void DisplayScheduler::OnBeginFrameSourcePausedChanged(bool paused) { |
160 // BeginFrameSources used with DisplayScheduler do not make use of this | 162 // BeginFrameSources used with DisplayScheduler do not make use of this |
161 // feature. | 163 // feature. |
162 if (paused) | 164 if (paused) |
163 NOTIMPLEMENTED(); | 165 NOTIMPLEMENTED(); |
164 } | 166 } |
165 | 167 |
166 base::TimeTicks DisplayScheduler::DesiredBeginFrameDeadlineTime() { | 168 base::TimeTicks DisplayScheduler::DesiredBeginFrameDeadlineTime() { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 observing_begin_frame_source_ = false; | 288 observing_begin_frame_source_ = false; |
287 begin_frame_source_->RemoveObserver(this); | 289 begin_frame_source_->RemoveObserver(this); |
288 } | 290 } |
289 } | 291 } |
290 } | 292 } |
291 | 293 |
292 void DisplayScheduler::OnBeginFrameDeadline() { | 294 void DisplayScheduler::OnBeginFrameDeadline() { |
293 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); | 295 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); |
294 | 296 |
295 AttemptDrawAndSwap(); | 297 AttemptDrawAndSwap(); |
296 begin_frame_source_->DidFinishFrame(0); | 298 begin_frame_source_->DidFinishFrame(this); |
297 } | 299 } |
298 | 300 |
299 void DisplayScheduler::DidSwapBuffers() { | 301 void DisplayScheduler::DidSwapBuffers() { |
300 pending_swaps_++; | 302 pending_swaps_++; |
301 TRACE_EVENT_ASYNC_BEGIN1("cc", "DisplayScheduler:pending_swaps", this, | 303 TRACE_EVENT_ASYNC_BEGIN1("cc", "DisplayScheduler:pending_swaps", this, |
302 "pending_frames", pending_swaps_); | 304 "pending_frames", pending_swaps_); |
303 } | 305 } |
304 | 306 |
305 void DisplayScheduler::DidSwapBuffersComplete() { | 307 void DisplayScheduler::DidSwapBuffersComplete() { |
306 pending_swaps_--; | 308 pending_swaps_--; |
307 TRACE_EVENT_ASYNC_END1("cc", "DisplayScheduler:pending_swaps", this, | 309 TRACE_EVENT_ASYNC_END1("cc", "DisplayScheduler:pending_swaps", this, |
308 "pending_frames", pending_swaps_); | 310 "pending_frames", pending_swaps_); |
309 ScheduleBeginFrameDeadline(); | 311 ScheduleBeginFrameDeadline(); |
310 } | 312 } |
311 | 313 |
312 } // namespace cc | 314 } // namespace cc |
OLD | NEW |