summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/resources/managed_tile_state.h6
-rw-r--r--cc/resources/picture_layer_tiling_set_unittest.cc13
-rw-r--r--cc/resources/tile_manager.cc35
-rw-r--r--cc/resources/tile_manager.h21
-rw-r--r--cc/test/fake_picture_layer_tiling_client.h4
5 files changed, 44 insertions, 35 deletions
diff --git a/cc/resources/managed_tile_state.h b/cc/resources/managed_tile_state.h
index c6065f9..113c532 100644
--- a/cc/resources/managed_tile_state.h
+++ b/cc/resources/managed_tile_state.h
@@ -86,12 +86,6 @@ class CC_EXPORT ManagedTileState {
size_t GPUMemoryUsageInBytes() const;
- void SetResourceForTesting(scoped_ptr<ResourcePool::Resource> resource) {
- resource_ = resource.Pass();
- }
- const ResourcePool::Resource* GetResourceForTesting() const {
- return resource_.get();
- }
void SetSolidColorForTesting(SkColor color) {
set_solid_color(color);
}
diff --git a/cc/resources/picture_layer_tiling_set_unittest.cc b/cc/resources/picture_layer_tiling_set_unittest.cc
index c47cf4b..134b035 100644
--- a/cc/resources/picture_layer_tiling_set_unittest.cc
+++ b/cc/resources/picture_layer_tiling_set_unittest.cc
@@ -74,17 +74,8 @@ class PictureLayerTilingSetTestWithResources : public testing::Test {
PictureLayerTiling* tiling = set.AddTiling(scale);
tiling->CreateAllTilesForTesting();
std::vector<Tile*> tiles = tiling->AllTilesForTesting();
- for (size_t i = 0; i < tiles.size(); ++i) {
- ManagedTileState::TileVersion& tile_version =
- tiles[i]->GetTileVersionForTesting(HIGH_QUALITY_NO_LCD_RASTER_MODE);
- EXPECT_FALSE(tile_version.GetResourceForTesting());
-
- tile_version.SetResourceForTesting(
- make_scoped_ptr(new ResourcePool::Resource(
- resource_provider.get(),
- gfx::Size(1, 1),
- resource_provider->best_texture_format())));
- }
+ client.tile_manager()->InitializeTilesWithResourcesForTesting(
+ tiles, resource_provider.get());
}
float max_contents_scale = scale;
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index 7cf5096..86de610 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -147,6 +147,8 @@ TileManager::TileManager(
all_tiles_that_need_to_be_rasterized_have_memory_(true),
all_tiles_required_for_activation_have_memory_(true),
all_tiles_required_for_activation_have_been_initialized_(true),
+ bytes_releasable_(0),
+ resources_releasable_(0),
ever_exceeded_memory_budget_(false),
rendering_stats_instrumentation_(rendering_stats_instrumentation),
did_initialize_visible_tile_(false),
@@ -170,6 +172,9 @@ TileManager::~TileManager() {
// resources.
raster_worker_pool_->Shutdown();
raster_worker_pool_->CheckForCompletedTasks();
+
+ DCHECK_EQ(0u, bytes_releasable_);
+ DCHECK_EQ(0u, resources_releasable_);
}
void TileManager::SetGlobalState(
@@ -485,31 +490,16 @@ void TileManager::AssignGpuMemoryToTiles(
// Now give memory out to the tiles until we're out, and build
// the needs-to-be-rasterized queue.
- size_t bytes_releasable = 0;
- size_t resources_releasable = 0;
- for (PrioritizedTileSet::Iterator it(tiles, false);
- it;
- ++it) {
- const Tile* tile = *it;
- const ManagedTileState& mts = tile->managed_state();
- for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) {
- if (mts.tile_versions[mode].resource_) {
- bytes_releasable += tile->bytes_consumed_if_allocated();
- resources_releasable++;
- }
- }
- }
-
all_tiles_that_need_to_be_rasterized_have_memory_ = true;
all_tiles_required_for_activation_have_memory_ = true;
all_tiles_required_for_activation_have_been_initialized_ = true;
// Cast to prevent overflow.
int64 bytes_available =
- static_cast<int64>(bytes_releasable) +
+ static_cast<int64>(bytes_releasable_) +
static_cast<int64>(global_state_.memory_limit_in_bytes) -
static_cast<int64>(resource_pool_->acquired_memory_usage_bytes());
- int resources_available = resources_releasable +
+ int resources_available = resources_releasable_ +
global_state_.num_resources_limit -
resource_pool_->NumResources();
@@ -624,7 +614,7 @@ void TileManager::AssignGpuMemoryToTiles(
memory_stats_from_last_assign_.bytes_allocated =
bytes_allocatable - bytes_left;
memory_stats_from_last_assign_.bytes_unreleasable =
- bytes_allocatable - bytes_releasable;
+ bytes_allocatable - bytes_releasable_;
memory_stats_from_last_assign_.bytes_over =
bytes_that_exceeded_memory_budget;
}
@@ -658,6 +648,12 @@ void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) {
if (mts.tile_versions[mode].resource_) {
resource_pool_->ReleaseResource(
mts.tile_versions[mode].resource_.Pass());
+
+ DCHECK_GE(bytes_releasable_, tile->bytes_consumed_if_allocated());
+ DCHECK_GE(resources_releasable_, 1u);
+
+ bytes_releasable_ -= tile->bytes_consumed_if_allocated();
+ --resources_releasable_;
}
}
@@ -837,6 +833,9 @@ void TileManager::OnRasterTaskCompleted(
} else {
tile_version.set_use_resource();
tile_version.resource_ = resource.Pass();
+
+ bytes_releasable_ += tile->bytes_consumed_if_allocated();
+ ++resources_releasable_;
}
FreeUnusedResourcesForTile(tile);
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h
index 7957fc8..97c4f08 100644
--- a/cc/resources/tile_manager.h
+++ b/cc/resources/tile_manager.h
@@ -80,6 +80,24 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient {
return all_tiles_required_for_activation_have_been_initialized_;
}
+ void InitializeTilesWithResourcesForTesting(
+ const std::vector<Tile*>& tiles,
+ ResourceProvider* resource_provider) {
+ for (size_t i = 0; i < tiles.size(); ++i) {
+ ManagedTileState& mts = tiles[i]->managed_state();
+ ManagedTileState::TileVersion& tile_version =
+ mts.tile_versions[HIGH_QUALITY_NO_LCD_RASTER_MODE];
+
+ tile_version.resource_ = make_scoped_ptr(
+ new ResourcePool::Resource(resource_provider,
+ gfx::Size(1, 1),
+ resource_provider->best_texture_format()));
+
+ bytes_releasable_ += tiles[i]->bytes_consumed_if_allocated();
+ ++resources_releasable_;
+ }
+ }
+
protected:
TileManager(TileManagerClient* client,
ResourceProvider* resource_provider,
@@ -148,6 +166,9 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient {
bool all_tiles_required_for_activation_have_memory_;
bool all_tiles_required_for_activation_have_been_initialized_;
+ size_t bytes_releasable_;
+ size_t resources_releasable_;
+
bool ever_exceeded_memory_budget_;
MemoryHistory::Entry memory_stats_from_last_assign_;
diff --git a/cc/test/fake_picture_layer_tiling_client.h b/cc/test/fake_picture_layer_tiling_client.h
index cacfd66..0d0ab27 100644
--- a/cc/test/fake_picture_layer_tiling_client.h
+++ b/cc/test/fake_picture_layer_tiling_client.h
@@ -40,6 +40,10 @@ class FakePictureLayerTilingClient : public PictureLayerTilingClient {
void set_allow_create_tile(bool allow) { allow_create_tile_ = allow; }
void set_invalidation(const Region& region) { invalidation_ = region; }
+ TileManager* tile_manager() const {
+ return tile_manager_.get();
+ }
+
protected:
FakeTileManagerClient tile_manager_client_;
scoped_ptr<TileManager> tile_manager_;