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

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

Issue 2854163003: [cc] Plumb BeginFrameAcks through SurfaceManager to DisplayScheduler. (Closed)
Patch Set: Track state per surface. Created 3 years, 7 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/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 // This must be done in Initialize() so that the caller can delay this until 88 // This must be done in Initialize() so that the caller can delay this until
89 // they are ready to receive a BeginFrameSource. 89 // they are ready to receive a BeginFrameSource.
90 if (begin_frame_source_) { 90 if (begin_frame_source_) {
91 surface_manager_->RegisterBeginFrameSource(begin_frame_source_, 91 surface_manager_->RegisterBeginFrameSource(begin_frame_source_,
92 frame_sink_id_); 92 frame_sink_id_);
93 } 93 }
94 94
95 output_surface_->BindToClient(this); 95 output_surface_->BindToClient(this);
96 InitializeRenderer(); 96 InitializeRenderer();
97 97
98 if (scheduler_)
99 scheduler_->SetSurfaceManager(surface_manager_);
100
98 if (auto* context = output_surface_->context_provider()) { 101 if (auto* context = output_surface_->context_provider()) {
99 // This depends on assumptions that Display::Initialize will happen 102 // This depends on assumptions that Display::Initialize will happen
100 // on the same callstack as the ContextProvider being created/initialized 103 // on the same callstack as the ContextProvider being created/initialized
101 // or else it could miss a callback before setting this. 104 // or else it could miss a callback before setting this.
102 context->SetLostContextCallback(base::Bind( 105 context->SetLostContextCallback(base::Bind(
103 &Display::DidLoseContextProvider, 106 &Display::DidLoseContextProvider,
104 // Unretained is safe since the callback is unset in this class' 107 // Unretained is safe since the callback is unset in this class'
105 // destructor and is never posted. 108 // destructor and is never posted.
106 base::Unretained(this))); 109 base::Unretained(this)));
107 } 110 }
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 if (scheduler_) { 364 if (scheduler_) {
362 scheduler_->DidSwapBuffers(); 365 scheduler_->DidSwapBuffers();
363 scheduler_->DidReceiveSwapBuffersAck(); 366 scheduler_->DidReceiveSwapBuffersAck();
364 } 367 }
365 } 368 }
366 369
367 client_->DisplayDidDrawAndSwap(); 370 client_->DisplayDidDrawAndSwap();
368 return true; 371 return true;
369 } 372 }
370 373
374 const SurfaceAggregator::SurfaceIndexMap&
375 Display::GetPreviousContainedSurfaces() {
376 DCHECK(aggregator_);
377 return aggregator_->previous_contained_surfaces();
378 }
379
371 void Display::DidReceiveSwapBuffersAck() { 380 void Display::DidReceiveSwapBuffersAck() {
372 if (scheduler_) 381 if (scheduler_)
373 scheduler_->DidReceiveSwapBuffersAck(); 382 scheduler_->DidReceiveSwapBuffersAck();
374 if (renderer_) 383 if (renderer_)
375 renderer_->SwapBuffersComplete(); 384 renderer_->SwapBuffersComplete();
376 } 385 }
377 386
378 void Display::DidReceiveTextureInUseResponses( 387 void Display::DidReceiveTextureInUseResponses(
379 const gpu::TextureInUseResponses& responses) { 388 const gpu::TextureInUseResponses& responses) {
380 if (renderer_) 389 if (renderer_)
(...skipping 24 matching lines...) Expand all
405 scheduler_->SurfaceDamaged(surface_id); 414 scheduler_->SurfaceDamaged(surface_id);
406 *changed = true; 415 *changed = true;
407 } 416 }
408 417
409 if (surface_id == current_surface_id_) 418 if (surface_id == current_surface_id_)
410 UpdateRootSurfaceResourcesLocked(); 419 UpdateRootSurfaceResourcesLocked();
411 } 420 }
412 421
413 void Display::OnSurfaceCreated(const SurfaceInfo& surface_info) {} 422 void Display::OnSurfaceCreated(const SurfaceInfo& surface_info) {}
414 423
424 void Display::OnSurfaceProducerStateChanged(const SurfaceId& surface_id) {
425 if (!scheduler_)
426 return;
427
428 if ((aggregator_ &&
429 aggregator_->previous_contained_surfaces().count(surface_id)) ||
430 surface_id == current_surface_id_) {
431 scheduler_->OnSurfaceProducerStateChanged(surface_id);
432 }
433 }
434
415 const SurfaceId& Display::CurrentSurfaceId() { 435 const SurfaceId& Display::CurrentSurfaceId() {
416 return current_surface_id_; 436 return current_surface_id_;
417 } 437 }
418 438
419 void Display::ForceImmediateDrawAndSwapIfPossible() { 439 void Display::ForceImmediateDrawAndSwapIfPossible() {
420 if (scheduler_) 440 if (scheduler_)
421 scheduler_->ForceImmediateSwapIfPossible(); 441 scheduler_->ForceImmediateSwapIfPossible();
422 } 442 }
423 443
424 } // namespace cc 444 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698