| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 99 |
| 100 void DisplayScheduler::DrawAndSwap() { | 100 void DisplayScheduler::DrawAndSwap() { |
| 101 TRACE_EVENT0("cc", "DisplayScheduler::DrawAndSwap"); | 101 TRACE_EVENT0("cc", "DisplayScheduler::DrawAndSwap"); |
| 102 DCHECK_LT(pending_swaps_, max_pending_swaps_); | 102 DCHECK_LT(pending_swaps_, max_pending_swaps_); |
| 103 DCHECK(!output_surface_lost_); | 103 DCHECK(!output_surface_lost_); |
| 104 | 104 |
| 105 bool success = client_->DrawAndSwap(); | 105 bool success = client_->DrawAndSwap(); |
| 106 if (!success) | 106 if (!success) |
| 107 return; | 107 return; |
| 108 | 108 |
| 109 needs_draw_ = false; | |
| 110 entire_display_damaged_ = false; | |
| 111 all_active_child_surfaces_ready_to_draw_ = false; | |
| 112 | |
| 113 expect_damage_from_root_surface_ = root_surface_damaged_; | |
| 114 root_surface_damaged_ = false; | |
| 115 | |
| 116 child_surface_ids_to_expect_damage_from_ = | 109 child_surface_ids_to_expect_damage_from_ = |
| 117 base::STLSetIntersection<std::vector<SurfaceId>>( | 110 base::STLSetIntersection<std::vector<SurfaceId>>( |
| 118 child_surface_ids_damaged_, child_surface_ids_damaged_prev_); | 111 child_surface_ids_damaged_, child_surface_ids_damaged_prev_); |
| 119 | 112 |
| 120 child_surface_ids_damaged_prev_.swap(child_surface_ids_damaged_); | 113 child_surface_ids_damaged_prev_.swap(child_surface_ids_damaged_); |
| 121 child_surface_ids_damaged_.clear(); | 114 child_surface_ids_damaged_.clear(); |
| 115 |
| 116 needs_draw_ = false; |
| 117 entire_display_damaged_ = false; |
| 118 all_active_child_surfaces_ready_to_draw_ = |
| 119 child_surface_ids_to_expect_damage_from_.empty(); |
| 120 |
| 121 expect_damage_from_root_surface_ = root_surface_damaged_; |
| 122 root_surface_damaged_ = false; |
| 122 } | 123 } |
| 123 | 124 |
| 124 bool DisplayScheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { | 125 bool DisplayScheduler::OnBeginFrameMixInDelegate(const BeginFrameArgs& args) { |
| 125 base::TimeTicks now = base::TimeTicks::Now(); | 126 base::TimeTicks now = base::TimeTicks::Now(); |
| 126 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), | 127 TRACE_EVENT2("cc", "DisplayScheduler::BeginFrame", "args", args.AsValue(), |
| 127 "now", now); | 128 "now", now); |
| 128 | 129 |
| 129 // Only service missed BeginFrames if they haven't already expired. | 130 // Only service missed BeginFrames if they haven't already expired. |
| 130 base::TimeTicks adjusted_deadline = | 131 base::TimeTicks adjusted_deadline = |
| 131 args.deadline - BeginFrameArgs::DefaultEstimatedParentDrawTime(); | 132 args.deadline - BeginFrameArgs::DefaultEstimatedParentDrawTime(); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 | 251 |
| 251 void DisplayScheduler::AttemptDrawAndSwap() { | 252 void DisplayScheduler::AttemptDrawAndSwap() { |
| 252 inside_begin_frame_deadline_interval_ = false; | 253 inside_begin_frame_deadline_interval_ = false; |
| 253 begin_frame_deadline_task_.Cancel(); | 254 begin_frame_deadline_task_.Cancel(); |
| 254 begin_frame_deadline_task_time_ = base::TimeTicks(); | 255 begin_frame_deadline_task_time_ = base::TimeTicks(); |
| 255 | 256 |
| 256 if (needs_draw_ && !output_surface_lost_) { | 257 if (needs_draw_ && !output_surface_lost_) { |
| 257 if (pending_swaps_ < max_pending_swaps_ && !root_surface_resources_locked_) | 258 if (pending_swaps_ < max_pending_swaps_ && !root_surface_resources_locked_) |
| 258 DrawAndSwap(); | 259 DrawAndSwap(); |
| 259 } else { | 260 } else { |
| 261 // We are going idle, so reset expectations. |
| 262 child_surface_ids_to_expect_damage_from_.clear(); |
| 263 child_surface_ids_damaged_prev_.clear(); |
| 264 child_surface_ids_damaged_.clear(); |
| 265 all_active_child_surfaces_ready_to_draw_ = true; |
| 266 expect_damage_from_root_surface_ = false; |
| 267 |
| 260 begin_frame_source_->SetNeedsBeginFrames(false); | 268 begin_frame_source_->SetNeedsBeginFrames(false); |
| 261 } | 269 } |
| 262 } | 270 } |
| 263 | 271 |
| 264 void DisplayScheduler::OnBeginFrameDeadline() { | 272 void DisplayScheduler::OnBeginFrameDeadline() { |
| 265 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); | 273 TRACE_EVENT0("cc", "DisplayScheduler::OnBeginFrameDeadline"); |
| 266 | 274 |
| 267 AttemptDrawAndSwap(); | 275 AttemptDrawAndSwap(); |
| 268 begin_frame_source_->DidFinishFrame(0); | 276 begin_frame_source_->DidFinishFrame(0); |
| 269 } | 277 } |
| 270 | 278 |
| 271 void DisplayScheduler::DidSwapBuffers() { | 279 void DisplayScheduler::DidSwapBuffers() { |
| 272 pending_swaps_++; | 280 pending_swaps_++; |
| 273 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffers", "pending_frames", | 281 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffers", "pending_frames", |
| 274 pending_swaps_); | 282 pending_swaps_); |
| 275 } | 283 } |
| 276 | 284 |
| 277 void DisplayScheduler::DidSwapBuffersComplete() { | 285 void DisplayScheduler::DidSwapBuffersComplete() { |
| 278 pending_swaps_--; | 286 pending_swaps_--; |
| 279 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffersComplete", | 287 TRACE_EVENT1("cc", "DisplayScheduler::DidSwapBuffersComplete", |
| 280 "pending_frames", pending_swaps_); | 288 "pending_frames", pending_swaps_); |
| 281 ScheduleBeginFrameDeadline(); | 289 ScheduleBeginFrameDeadline(); |
| 282 } | 290 } |
| 283 | 291 |
| 284 } // namespace cc | 292 } // namespace cc |
| OLD | NEW |