OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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.h" | 5 #include "cc/surfaces/display.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
241 CompositorFrame frame = aggregator_->Aggregate(current_surface_id_); | 241 CompositorFrame frame = aggregator_->Aggregate(current_surface_id_); |
242 if (!frame.delegated_frame_data) { | 242 if (!frame.delegated_frame_data) { |
243 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", | 243 TRACE_EVENT_INSTANT0("cc", "Empty aggregated frame.", |
244 TRACE_EVENT_SCOPE_THREAD); | 244 TRACE_EVENT_SCOPE_THREAD); |
245 return false; | 245 return false; |
246 } | 246 } |
247 | 247 |
248 // Run callbacks early to allow pipelining. | 248 // Run callbacks early to allow pipelining. |
249 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { | 249 for (const auto& id_entry : aggregator_->previous_contained_surfaces()) { |
250 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first); | 250 Surface* surface = surface_manager_->GetSurfaceForId(id_entry.first); |
251 if (surface) | 251 if (surface && surface->surface_id() != current_surface_id_) |
252 surface->RunDrawCallbacks(); | 252 surface->RunDrawCallbacks(); |
253 } | 253 } |
254 | 254 |
255 DelegatedFrameData* frame_data = frame.delegated_frame_data.get(); | 255 DelegatedFrameData* frame_data = frame.delegated_frame_data.get(); |
256 | 256 |
257 frame.metadata.latency_info.insert(frame.metadata.latency_info.end(), | 257 frame.metadata.latency_info.insert(frame.metadata.latency_info.end(), |
258 stored_latency_info_.begin(), | 258 stored_latency_info_.begin(), |
259 stored_latency_info_.end()); | 259 stored_latency_info_.end()); |
260 stored_latency_info_.clear(); | 260 stored_latency_info_.clear(); |
261 bool have_copy_requests = false; | 261 bool have_copy_requests = false; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
318 device_color_space_, device_viewport_rect, | 318 device_color_space_, device_viewport_rect, |
319 device_clip_rect); | 319 device_clip_rect); |
320 } else { | 320 } else { |
321 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); | 321 TRACE_EVENT_INSTANT0("cc", "Draw skipped.", TRACE_EVENT_SCOPE_THREAD); |
322 } | 322 } |
323 | 323 |
324 bool should_swap = should_draw && size_matches; | 324 bool should_swap = should_draw && size_matches; |
325 if (should_swap) { | 325 if (should_swap) { |
326 swapped_since_resize_ = true; | 326 swapped_since_resize_ = true; |
327 for (auto& latency : frame.metadata.latency_info) { | 327 for (auto& latency : frame.metadata.latency_info) { |
328 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", | 328 TRACE_EVENT_WITH_FLOW1( |
329 "input,benchmark", "LatencyInfo.Flow", | |
329 TRACE_ID_DONT_MANGLE(latency.trace_id()), | 330 TRACE_ID_DONT_MANGLE(latency.trace_id()), |
330 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, | 331 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "step", |
331 "step", "Display::DrawAndSwap"); | 332 "Display::DrawAndSwap"); |
332 } | 333 } |
333 benchmark_instrumentation::IssueDisplayRenderingStatsEvent(); | 334 benchmark_instrumentation::IssueDisplayRenderingStatsEvent(); |
334 renderer_->SwapBuffers(std::move(frame.metadata)); | 335 renderer_->SwapBuffers(std::move(frame.metadata)); |
335 if (scheduler_) | 336 if (scheduler_) |
336 scheduler_->DidSwapBuffers(); | 337 scheduler_->DidSwapBuffers(); |
337 } else { | 338 } else { |
338 if (have_damage && !size_matches) | 339 if (have_damage && !size_matches) |
339 aggregator_->SetFullDamageForSurface(current_surface_id_); | 340 aggregator_->SetFullDamageForSurface(current_surface_id_); |
340 TRACE_EVENT_INSTANT0("cc", "Swap skipped.", TRACE_EVENT_SCOPE_THREAD); | 341 TRACE_EVENT_INSTANT0("cc", "Swap skipped.", TRACE_EVENT_SCOPE_THREAD); |
341 stored_latency_info_.insert(stored_latency_info_.end(), | 342 stored_latency_info_.insert(stored_latency_info_.end(), |
342 frame.metadata.latency_info.begin(), | 343 frame.metadata.latency_info.begin(), |
343 frame.metadata.latency_info.end()); | 344 frame.metadata.latency_info.end()); |
344 if (scheduler_) { | 345 if (scheduler_) { |
345 scheduler_->DidSwapBuffers(); | 346 scheduler_->DidSwapBuffers(); |
346 scheduler_->DidSwapBuffersComplete(); | 347 scheduler_->DidSwapBuffersComplete(); |
347 } | 348 } |
348 } | 349 } |
349 | 350 |
351 // Run draw callback for root surface after drawing. | |
enne (OOO)
2016/09/19 22:11:50
Can you make this comment more of a 'why' and less
sunnyps
2016/09/19 23:59:04
Added comment where we run the callbacks for other
| |
352 Surface* root_surface = | |
353 surface_manager_->GetSurfaceForId(current_surface_id_); | |
354 if (root_surface) | |
355 root_surface->RunDrawCallbacks(); | |
356 | |
350 client_->DisplayDidDrawAndSwap(); | 357 client_->DisplayDidDrawAndSwap(); |
351 return true; | 358 return true; |
352 } | 359 } |
353 | 360 |
354 void Display::DidSwapBuffersComplete() { | 361 void Display::DidSwapBuffersComplete() { |
355 if (scheduler_) | 362 if (scheduler_) |
356 scheduler_->DidSwapBuffersComplete(); | 363 scheduler_->DidSwapBuffersComplete(); |
357 if (renderer_) | 364 if (renderer_) |
358 renderer_->SwapBuffersComplete(); | 365 renderer_->SwapBuffersComplete(); |
359 } | 366 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
428 const SurfaceId& Display::CurrentSurfaceId() { | 435 const SurfaceId& Display::CurrentSurfaceId() { |
429 return current_surface_id_; | 436 return current_surface_id_; |
430 } | 437 } |
431 | 438 |
432 void Display::ForceImmediateDrawAndSwapIfPossible() { | 439 void Display::ForceImmediateDrawAndSwapIfPossible() { |
433 if (scheduler_) | 440 if (scheduler_) |
434 scheduler_->ForceImmediateSwapIfPossible(); | 441 scheduler_->ForceImmediateSwapIfPossible(); |
435 } | 442 } |
436 | 443 |
437 } // namespace cc | 444 } // namespace cc |
OLD | NEW |