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

Side by Side Diff: cc/tile_manager.cc

Issue 12208123: [cc] Only NOW-binned tiles should contribute to over-memory accounting (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . 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
« no previous file with comments | « no previous file | 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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 // currently waiting for raster to idle state. 488 // currently waiting for raster to idle state.
489 // Call DidTileRasterStateChange() for each of these tiles to 489 // Call DidTileRasterStateChange() for each of these tiles to
490 // have this state change take effect. 490 // have this state change take effect.
491 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 491 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
492 Tile* tile = *it; 492 Tile* tile = *it;
493 if (tile->managed_state().raster_state == WAITING_FOR_RASTER_STATE) 493 if (tile->managed_state().raster_state == WAITING_FOR_RASTER_STATE)
494 DidTileRasterStateChange(tile, IDLE_STATE); 494 DidTileRasterStateChange(tile, IDLE_STATE);
495 } 495 }
496 496
497 size_t bytes_allocatable = global_state_.memory_limit_in_bytes - unreleasable_ bytes; 497 size_t bytes_allocatable = global_state_.memory_limit_in_bytes - unreleasable_ bytes;
498 size_t bytes_that_exceeded_memory_budget = 0; 498 size_t bytes_that_exceeded_memory_budget_in_now_bin = 0;
499 size_t bytes_left = bytes_allocatable; 499 size_t bytes_left = bytes_allocatable;
500 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 500 for (TileVector::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
501 Tile* tile = *it; 501 Tile* tile = *it;
502 size_t tile_bytes = tile->bytes_consumed_if_allocated(); 502 size_t tile_bytes = tile->bytes_consumed_if_allocated();
503 ManagedTileState& managed_tile_state = tile->managed_state(); 503 ManagedTileState& managed_tile_state = tile->managed_state();
504 if (!managed_tile_state.can_be_freed) 504 if (!managed_tile_state.can_be_freed)
505 continue; 505 continue;
506 if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NEVER_BIN && 506 if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NEVER_BIN &&
507 managed_tile_state.bin[LOW_PRIORITY_BIN] == NEVER_BIN) { 507 managed_tile_state.bin[LOW_PRIORITY_BIN] == NEVER_BIN) {
508 managed_tile_state.can_use_gpu_memory = false; 508 managed_tile_state.can_use_gpu_memory = false;
509 FreeResourcesForTile(tile); 509 FreeResourcesForTile(tile);
510 continue; 510 continue;
511 } 511 }
512 if (tile_bytes > bytes_left) { 512 if (tile_bytes > bytes_left) {
513 managed_tile_state.can_use_gpu_memory = false; 513 managed_tile_state.can_use_gpu_memory = false;
514 bytes_that_exceeded_memory_budget += tile_bytes; 514 if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NOW_BIN ||
515 managed_tile_state.bin[LOW_PRIORITY_BIN] == NOW_BIN)
516 bytes_that_exceeded_memory_budget_in_now_bin += tile_bytes;
515 FreeResourcesForTile(tile); 517 FreeResourcesForTile(tile);
516 continue; 518 continue;
517 } 519 }
518 bytes_left -= tile_bytes; 520 bytes_left -= tile_bytes;
519 managed_tile_state.can_use_gpu_memory = true; 521 managed_tile_state.can_use_gpu_memory = true;
520 if (!managed_tile_state.resource && 522 if (!managed_tile_state.resource &&
521 !managed_tile_state.resource_is_being_initialized) { 523 !managed_tile_state.resource_is_being_initialized) {
522 tiles_that_need_to_be_rasterized_.push_back(tile); 524 tiles_that_need_to_be_rasterized_.push_back(tile);
523 DidTileRasterStateChange(tile, WAITING_FOR_RASTER_STATE); 525 DidTileRasterStateChange(tile, WAITING_FOR_RASTER_STATE);
524 } 526 }
525 } 527 }
526 528
527 ever_exceeded_memory_budget_ |= bytes_that_exceeded_memory_budget > 0; 529 ever_exceeded_memory_budget_ |=
530 bytes_that_exceeded_memory_budget_in_now_bin > 0;
528 if (ever_exceeded_memory_budget_) { 531 if (ever_exceeded_memory_budget_) {
529 TRACE_COUNTER_ID2("cc", "over_memory_budget", this, 532 TRACE_COUNTER_ID2("cc", "over_memory_budget", this,
530 "budget", global_state_.memory_limit_in_bytes, 533 "budget", global_state_.memory_limit_in_bytes,
531 "over", bytes_that_exceeded_memory_budget); 534 "over", bytes_that_exceeded_memory_budget_in_now_bin);
532 } 535 }
533 memory_stats_from_last_assign_.total_budget_in_bytes = 536 memory_stats_from_last_assign_.total_budget_in_bytes =
534 global_state_.memory_limit_in_bytes; 537 global_state_.memory_limit_in_bytes;
535 memory_stats_from_last_assign_.bytes_allocated = 538 memory_stats_from_last_assign_.bytes_allocated =
536 bytes_allocatable - bytes_left; 539 bytes_allocatable - bytes_left;
537 memory_stats_from_last_assign_.bytes_unreleasable = unreleasable_bytes; 540 memory_stats_from_last_assign_.bytes_unreleasable = unreleasable_bytes;
538 memory_stats_from_last_assign_.bytes_over = 541 memory_stats_from_last_assign_.bytes_over =
539 bytes_that_exceeded_memory_budget; 542 bytes_that_exceeded_memory_budget_in_now_bin;
540 543
541 // Reverse two tiles_that_need_* vectors such that pop_back gets 544 // Reverse two tiles_that_need_* vectors such that pop_back gets
542 // the highest priority tile. 545 // the highest priority tile.
543 std::reverse( 546 std::reverse(
544 tiles_that_need_to_be_rasterized_.begin(), 547 tiles_that_need_to_be_rasterized_.begin(),
545 tiles_that_need_to_be_rasterized_.end()); 548 tiles_that_need_to_be_rasterized_.end());
546 } 549 }
547 550
548 void TileManager::FreeResourcesForTile(Tile* tile) { 551 void TileManager::FreeResourcesForTile(Tile* tile) {
549 ManagedTileState& managed_tile_state = tile->managed_state(); 552 ManagedTileState& managed_tile_state = tile->managed_state();
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 decode_begin_time = base::TimeTicks::Now(); 888 decode_begin_time = base::TimeTicks::Now();
886 pixel_ref->Decode(); 889 pixel_ref->Decode();
887 if (stats) { 890 if (stats) {
888 stats->totalDeferredImageDecodeCount++; 891 stats->totalDeferredImageDecodeCount++;
889 stats->totalDeferredImageDecodeTime += 892 stats->totalDeferredImageDecodeTime +=
890 base::TimeTicks::Now() - decode_begin_time; 893 base::TimeTicks::Now() - decode_begin_time;
891 } 894 }
892 } 895 }
893 896
894 } // namespace cc 897 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698