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

Side by Side Diff: cc/resources/tile_manager.cc

Issue 23231002: cc: Prevent the tile manager from allocating more memory than allowed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: s/resources_/unused_resources_/ Created 7 years, 4 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
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/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 502
503 all_tiles_that_need_to_be_rasterized_have_memory_ = true; 503 all_tiles_that_need_to_be_rasterized_have_memory_ = true;
504 all_tiles_required_for_activation_have_memory_ = true; 504 all_tiles_required_for_activation_have_memory_ = true;
505 all_tiles_required_for_activation_have_been_initialized_ = true; 505 all_tiles_required_for_activation_have_been_initialized_ = true;
506 506
507 // Cast to prevent overflow. 507 // Cast to prevent overflow.
508 int64 bytes_available = 508 int64 bytes_available =
509 static_cast<int64>(bytes_releasable) + 509 static_cast<int64>(bytes_releasable) +
510 static_cast<int64>(global_state_.memory_limit_in_bytes) - 510 static_cast<int64>(global_state_.memory_limit_in_bytes) -
511 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); 511 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes());
512 int resources_available = resources_releasable + 512 int resources_available =
513 global_state_.num_resources_limit - 513 resources_releasable +
514 resource_pool_->NumResources(); 514 global_state_.num_resources_limit -
515 resource_pool_->acquired_resource_count();
515 516
516 size_t bytes_allocatable = 517 size_t bytes_allocatable =
517 std::max(static_cast<int64>(0), bytes_available); 518 std::max(static_cast<int64>(0), bytes_available);
518 size_t resources_allocatable = std::max(0, resources_available); 519 size_t resources_allocatable = std::max(0, resources_available);
519 520
520 size_t bytes_that_exceeded_memory_budget = 0; 521 size_t bytes_that_exceeded_memory_budget = 0;
521 size_t bytes_left = bytes_allocatable; 522 size_t bytes_left = bytes_allocatable;
522 size_t resources_left = resources_allocatable; 523 size_t resources_left = resources_allocatable;
523 bool oomed = false; 524 bool oomed = false;
524 525
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 703
703 DCHECK(tile_version.requires_resource()); 704 DCHECK(tile_version.requires_resource());
704 DCHECK(!tile_version.resource_); 705 DCHECK(!tile_version.resource_);
705 706
706 if (tile_version.raster_task_.is_null()) 707 if (tile_version.raster_task_.is_null())
707 tile_version.raster_task_ = CreateRasterTask(tile); 708 tile_version.raster_task_ = CreateRasterTask(tile);
708 709
709 tasks.Append(tile_version.raster_task_, tile->required_for_activation()); 710 tasks.Append(tile_version.raster_task_, tile->required_for_activation());
710 } 711 }
711 712
713 // We must reduce the amount of unused memory before calling
714 // ScheduleTasks to prevent usage from rising above limit.
715 resource_pool_->ReduceMemoryUsage();
vmpstr 2013/08/15 18:26:37 I'm not sure I follow this. Wouldn't we want to Re
reveman 2013/08/15 19:13:55 ScheduleTasks can't create new resources. It can o
716
712 // Schedule running of |tasks|. This replaces any previously 717 // Schedule running of |tasks|. This replaces any previously
713 // scheduled tasks and effectively cancels all tasks not present 718 // scheduled tasks and effectively cancels all tasks not present
714 // in |tasks|. 719 // in |tasks|.
715 raster_worker_pool_->ScheduleTasks(&tasks); 720 raster_worker_pool_->ScheduleTasks(&tasks);
716 } 721 }
717 722
718 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( 723 RasterWorkerPool::Task TileManager::CreateImageDecodeTask(
719 Tile* tile, skia::LazyPixelRef* pixel_ref) { 724 Tile* tile, skia::LazyPixelRef* pixel_ref) {
720 return RasterWorkerPool::CreateImageDecodeTask( 725 return RasterWorkerPool::CreateImageDecodeTask(
721 pixel_ref, 726 pixel_ref,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 tile_version.set_use_resource(); 843 tile_version.set_use_resource();
839 tile_version.resource_ = resource.Pass(); 844 tile_version.resource_ = resource.Pass();
840 } 845 }
841 846
842 FreeUnusedResourcesForTile(tile); 847 FreeUnusedResourcesForTile(tile);
843 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 848 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
844 did_initialize_visible_tile_ = true; 849 did_initialize_visible_tile_ = true;
845 } 850 }
846 851
847 } // namespace cc 852 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698