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

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

Issue 2854163003: [cc] Plumb BeginFrameAcks through SurfaceManager to DisplayScheduler. (Closed)
Patch Set: fix clang compile error Created 3 years, 6 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
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 } 376 }
377 377
378 void Display::DidReceiveTextureInUseResponses( 378 void Display::DidReceiveTextureInUseResponses(
379 const gpu::TextureInUseResponses& responses) { 379 const gpu::TextureInUseResponses& responses) {
380 if (renderer_) 380 if (renderer_)
381 renderer_->DidReceiveTextureInUseResponses(responses); 381 renderer_->DidReceiveTextureInUseResponses(responses);
382 } 382 }
383 383
384 void Display::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { 384 void Display::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
385 aggregator_->SetFullDamageForSurface(current_surface_id_); 385 aggregator_->SetFullDamageForSurface(current_surface_id_);
386 if (scheduler_) 386 if (scheduler_) {
387 scheduler_->SurfaceDamaged(current_surface_id_); 387 BeginFrameAck ack;
388 ack.has_damage = true;
389 scheduler_->SurfaceDamaged(current_surface_id_, ack, true);
390 }
388 } 391 }
389 392
390 void Display::OnSurfaceDamaged(const SurfaceId& surface_id, bool* changed) { 393 void Display::OnSurfaceDamaged(const SurfaceId& surface_id,
391 if (aggregator_ && 394 const BeginFrameAck& ack,
392 aggregator_->previous_contained_surfaces().count(surface_id)) { 395 bool* changed) {
393 Surface* surface = surface_manager_->GetSurfaceForId(surface_id); 396 if (ack.has_damage) {
394 if (surface) { 397 if (aggregator_ &&
395 if (!surface->HasActiveFrame() || 398 aggregator_->previous_contained_surfaces().count(surface_id)) {
396 surface->GetActiveFrame().resource_list.empty()) { 399 Surface* surface = surface_manager_->GetSurfaceForId(surface_id);
397 aggregator_->ReleaseResources(surface_id); 400 if (surface) {
401 DCHECK(surface->HasActiveFrame());
402 if (surface->GetActiveFrame().resource_list.empty())
403 aggregator_->ReleaseResources(surface_id);
398 } 404 }
405 *changed = true;
406 } else if (surface_id == current_surface_id_) {
407 *changed = true;
399 } 408 }
400 if (scheduler_)
401 scheduler_->SurfaceDamaged(surface_id);
402 *changed = true;
403 } else if (surface_id == current_surface_id_) {
404 if (scheduler_)
405 scheduler_->SurfaceDamaged(surface_id);
406 *changed = true;
407 } 409 }
408 410
411 if (scheduler_)
412 scheduler_->SurfaceDamaged(surface_id, ack, *changed);
413
409 if (surface_id == current_surface_id_) 414 if (surface_id == current_surface_id_)
410 UpdateRootSurfaceResourcesLocked(); 415 UpdateRootSurfaceResourcesLocked();
411 } 416 }
412 417
413 void Display::OnSurfaceCreated(const SurfaceInfo& surface_info) {} 418 bool Display::SurfaceHasUndrawnFrame(const SurfaceId& surface_id) const {
419 if (!surface_manager_)
420 return false;
421
422 Surface* surface = surface_manager_->GetSurfaceForId(surface_id);
423 if (!surface)
424 return false;
425
426 return surface->HasUndrawnActiveFrame();
427 }
428
429 void Display::OnSurfaceCreated(const SurfaceInfo& surface_info) {
430 if (scheduler_)
431 scheduler_->SurfaceCreated(surface_info);
432 }
433
434 void Display::OnSurfaceDestroyed(const SurfaceId& surface_id) {
435 if (scheduler_)
436 scheduler_->SurfaceDestroyed(surface_id);
437 }
438
439 void Display::OnSurfaceDamageExpected(const SurfaceId& surface_id,
440 const BeginFrameArgs& args) {
441 if (scheduler_)
442 scheduler_->SurfaceDamageExpected(surface_id, args);
443 }
414 444
415 void Display::OnSurfaceDiscarded(const SurfaceId& surface_id) { 445 void Display::OnSurfaceDiscarded(const SurfaceId& surface_id) {
416 if (aggregator_) 446 if (aggregator_)
417 aggregator_->ReleaseResources(surface_id); 447 aggregator_->ReleaseResources(surface_id);
418 } 448 }
419 449
420 const SurfaceId& Display::CurrentSurfaceId() { 450 const SurfaceId& Display::CurrentSurfaceId() {
421 return current_surface_id_; 451 return current_surface_id_;
422 } 452 }
423 453
424 void Display::ForceImmediateDrawAndSwapIfPossible() { 454 void Display::ForceImmediateDrawAndSwapIfPossible() {
425 if (scheduler_) 455 if (scheduler_)
426 scheduler_->ForceImmediateSwapIfPossible(); 456 scheduler_->ForceImmediateSwapIfPossible();
427 } 457 }
428 458
429 } // namespace cc 459 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698