Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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_ |= bytes_that_exceeded_memory_budget_in_now_bin > 0; |
|
reveman
2013/02/12 06:30:06
nit: long line
| |
| 528 if (ever_exceeded_memory_budget_) { | 530 if (ever_exceeded_memory_budget_) { |
| 529 TRACE_COUNTER_ID2("cc", "over_memory_budget", this, | 531 TRACE_COUNTER_ID2("cc", "over_memory_budget", this, |
| 530 "budget", global_state_.memory_limit_in_bytes, | 532 "budget", global_state_.memory_limit_in_bytes, |
| 531 "over", bytes_that_exceeded_memory_budget); | 533 "over", bytes_that_exceeded_memory_budget_in_now_bin); |
| 532 } | 534 } |
| 533 memory_stats_from_last_assign_.total_budget_in_bytes = | 535 memory_stats_from_last_assign_.total_budget_in_bytes = |
| 534 global_state_.memory_limit_in_bytes; | 536 global_state_.memory_limit_in_bytes; |
| 535 memory_stats_from_last_assign_.bytes_allocated = | 537 memory_stats_from_last_assign_.bytes_allocated = |
| 536 bytes_allocatable - bytes_left; | 538 bytes_allocatable - bytes_left; |
| 537 memory_stats_from_last_assign_.bytes_unreleasable = unreleasable_bytes; | 539 memory_stats_from_last_assign_.bytes_unreleasable = unreleasable_bytes; |
| 538 memory_stats_from_last_assign_.bytes_over = | 540 memory_stats_from_last_assign_.bytes_over = |
| 539 bytes_that_exceeded_memory_budget; | 541 bytes_that_exceeded_memory_budget_in_now_bin; |
| 540 | 542 |
| 541 // Reverse two tiles_that_need_* vectors such that pop_back gets | 543 // Reverse two tiles_that_need_* vectors such that pop_back gets |
| 542 // the highest priority tile. | 544 // the highest priority tile. |
| 543 std::reverse( | 545 std::reverse( |
| 544 tiles_that_need_to_be_rasterized_.begin(), | 546 tiles_that_need_to_be_rasterized_.begin(), |
| 545 tiles_that_need_to_be_rasterized_.end()); | 547 tiles_that_need_to_be_rasterized_.end()); |
| 546 } | 548 } |
| 547 | 549 |
| 548 void TileManager::FreeResourcesForTile(Tile* tile) { | 550 void TileManager::FreeResourcesForTile(Tile* tile) { |
| 549 ManagedTileState& managed_tile_state = tile->managed_state(); | 551 ManagedTileState& managed_tile_state = tile->managed_state(); |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 885 decode_begin_time = base::TimeTicks::Now(); | 887 decode_begin_time = base::TimeTicks::Now(); |
| 886 pixel_ref->Decode(); | 888 pixel_ref->Decode(); |
| 887 if (stats) { | 889 if (stats) { |
| 888 stats->totalDeferredImageDecodeCount++; | 890 stats->totalDeferredImageDecodeCount++; |
| 889 stats->totalDeferredImageDecodeTime += | 891 stats->totalDeferredImageDecodeTime += |
| 890 base::TimeTicks::Now() - decode_begin_time; | 892 base::TimeTicks::Now() - decode_begin_time; |
| 891 } | 893 } |
| 892 } | 894 } |
| 893 | 895 |
| 894 } // namespace cc | 896 } // namespace cc |
| OLD | NEW |