| 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 |