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

Side by Side Diff: cc/tile_manager.cc

Issue 12149004: [cc] Show GPU memory usage and overage below FPS counter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: works Created 7 years, 10 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 | Annotate | Revision Log
« cc/heads_up_display_layer_impl.cc ('K') | « cc/tile_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/tile_manager.h" 5 #include "cc/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 // tiles_with_image_decoding_tasks_ list above we move all tiles 456 // tiles_with_image_decoding_tasks_ list above we move all tiles
457 // currently waiting for raster to idle state. 457 // currently waiting for raster to idle state.
458 // Call DidTileRasterStateChange() for each of these tiles to 458 // Call DidTileRasterStateChange() for each of these tiles to
459 // have this state change take effect. 459 // have this state change take effect.
460 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 460 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
461 Tile* tile = *it; 461 Tile* tile = *it;
462 if (tile->managed_state().raster_state == WAITING_FOR_RASTER_STATE) 462 if (tile->managed_state().raster_state == WAITING_FOR_RASTER_STATE)
463 DidTileRasterStateChange(tile, IDLE_STATE); 463 DidTileRasterStateChange(tile, IDLE_STATE);
464 } 464 }
465 465
466 size_t bytes_left = global_state_.memory_limit_in_bytes - unreleasable_bytes; 466 size_t bytes_allocatable = global_state_.memory_limit_in_bytes - unreleasable_ bytes;
467 size_t bytes_that_exceeded_memory_budget = 0; 467 size_t bytes_that_exceeded_memory_budget = 0;
468 size_t bytes_left = bytes_allocatable;
468 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 469 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
469 Tile* tile = *it; 470 Tile* tile = *it;
470 size_t tile_bytes = tile->bytes_consumed_if_allocated(); 471 size_t tile_bytes = tile->bytes_consumed_if_allocated();
471 ManagedTileState& managed_tile_state = tile->managed_state(); 472 ManagedTileState& managed_tile_state = tile->managed_state();
472 if (!managed_tile_state.can_be_freed) 473 if (!managed_tile_state.can_be_freed)
473 continue; 474 continue;
474 if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NEVER_BIN && 475 if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NEVER_BIN &&
475 managed_tile_state.bin[LOW_PRIORITY_BIN] == NEVER_BIN) { 476 managed_tile_state.bin[LOW_PRIORITY_BIN] == NEVER_BIN) {
476 managed_tile_state.can_use_gpu_memory = false; 477 managed_tile_state.can_use_gpu_memory = false;
477 FreeResourcesForTile(tile); 478 FreeResourcesForTile(tile);
478 continue; 479 continue;
479 } 480 }
480 if (tile_bytes > bytes_left) { 481 if (tile_bytes > bytes_left) {
481 managed_tile_state.can_use_gpu_memory = false; 482 managed_tile_state.can_use_gpu_memory = false;
482 bytes_that_exceeded_memory_budget += tile_bytes; 483 bytes_that_exceeded_memory_budget += tile_bytes;
483 FreeResourcesForTile(tile); 484 FreeResourcesForTile(tile);
484 continue; 485 continue;
485 } 486 }
486 bytes_left -= tile_bytes; 487 bytes_left -= tile_bytes;
487 managed_tile_state.can_use_gpu_memory = true; 488 managed_tile_state.can_use_gpu_memory = true;
488 if (!managed_tile_state.resource && 489 if (!managed_tile_state.resource &&
489 !managed_tile_state.resource_is_being_initialized) { 490 !managed_tile_state.resource_is_being_initialized) {
490 tiles_that_need_to_be_rasterized_.push_back(tile); 491 tiles_that_need_to_be_rasterized_.push_back(tile);
491 DidTileRasterStateChange(tile, WAITING_FOR_RASTER_STATE); 492 DidTileRasterStateChange(tile, WAITING_FOR_RASTER_STATE);
492 } 493 }
493 } 494 }
494 495
495 if (bytes_that_exceeded_memory_budget) 496 ever_exceeded_memory_budget_ |= bytes_that_exceeded_memory_budget;
496 ever_exceeded_memory_budget_ = true;
497
498 if (ever_exceeded_memory_budget_) { 497 if (ever_exceeded_memory_budget_) {
499 TRACE_COUNTER_ID2("cc", "over_memory_budget", this, 498 TRACE_COUNTER_ID2("cc", "over_memory_budget", this,
500 "budget", global_state_.memory_limit_in_bytes, 499 "budget", global_state_.memory_limit_in_bytes,
501 "over", bytes_that_exceeded_memory_budget); 500 "over", bytes_that_exceeded_memory_budget);
502 } 501 }
502 memory_stats_from_last_assign_.bytes_allocated =
503 bytes_allocatable - bytes_left;
504 memory_stats_from_last_assign_.bytes_unreleasable = unreleasable_bytes;
505 memory_stats_from_last_assign_.bytes_over =
506 bytes_that_exceeded_memory_budget;
503 507
504 // Reverse two tiles_that_need_* vectors such that pop_back gets 508 // Reverse two tiles_that_need_* vectors such that pop_back gets
505 // the highest priority tile. 509 // the highest priority tile.
506 std::reverse( 510 std::reverse(
507 tiles_that_need_to_be_rasterized_.begin(), 511 tiles_that_need_to_be_rasterized_.begin(),
508 tiles_that_need_to_be_rasterized_.end()); 512 tiles_that_need_to_be_rasterized_.end());
509 } 513 }
510 514
511 void TileManager::FreeResourcesForTile(Tile* tile) { 515 void TileManager::FreeResourcesForTile(Tile* tile) {
512 ManagedTileState& managed_tile_state = tile->managed_state(); 516 ManagedTileState& managed_tile_state = tile->managed_state();
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 RenderingStats* stats) { 777 RenderingStats* stats) {
774 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask"); 778 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask");
775 base::TimeTicks decode_begin_time = base::TimeTicks::Now(); 779 base::TimeTicks decode_begin_time = base::TimeTicks::Now();
776 pixel_ref->Decode(); 780 pixel_ref->Decode();
777 stats->totalDeferredImageDecodeCount++; 781 stats->totalDeferredImageDecodeCount++;
778 stats->totalDeferredImageDecodeTime += 782 stats->totalDeferredImageDecodeTime +=
779 base::TimeTicks::Now() - decode_begin_time; 783 base::TimeTicks::Now() - decode_begin_time;
780 } 784 }
781 785
782 } // namespace cc 786 } // namespace cc
OLDNEW
« cc/heads_up_display_layer_impl.cc ('K') | « cc/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698