Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Side by Side Diff: cc/surfaces/display.cc

Issue 2339633003: Reland of cc: Remove frame queuing from the scheduler. (Closed)
Patch Set: expire missed frames in renderer only Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698