| Index: cc/tile_manager.cc
|
| diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
|
| index f3921df7903764ed3ce93d7f4e3c0aa379dc8554..1f348716a120ee56051de42709eaf863acb7444c 100644
|
| --- a/cc/tile_manager.cc
|
| +++ b/cc/tile_manager.cc
|
| @@ -134,6 +134,7 @@ TileManager::TileManager(
|
| resource_pool_(ResourcePool::Create(resource_provider,
|
| Renderer::ImplPool)),
|
| manage_tiles_pending_(false),
|
| + manage_tiles_call_count_(0),
|
| check_for_completed_set_pixels_pending_(false) {
|
| // Initialize all threads.
|
| const std::string thread_name_prefix = kRasterThreadNamePrefix;
|
| @@ -234,6 +235,7 @@ public:
|
| void TileManager::ManageTiles() {
|
| TRACE_EVENT0("cc", "TileManager::ManageTiles");
|
| manage_tiles_pending_ = false;
|
| + ++manage_tiles_call_count_;
|
|
|
| // The amount of time for which we want to have prepainting coverage.
|
| const double prepainting_window_time_seconds = 1.0;
|
| @@ -562,6 +564,7 @@ void TileManager::DispatchOneRasterTask(
|
| tile,
|
| base::Passed(&resource),
|
| picture_pile_clone,
|
| + manage_tiles_call_count_,
|
| stats));
|
| }
|
|
|
| @@ -569,6 +572,7 @@ void TileManager::OnRasterTaskCompleted(
|
| scoped_refptr<Tile> tile,
|
| scoped_ptr<ResourcePool::Resource> resource,
|
| scoped_refptr<PicturePileImpl> picture_pile_clone,
|
| + int manage_tiles_call_count_when_dispatched,
|
| RenderingStats* stats) {
|
| TRACE_EVENT0("cc", "TileManager::OnRasterTaskCompleted");
|
| rendering_stats_.totalRasterizeTimeInSeconds +=
|
| @@ -584,11 +588,12 @@ void TileManager::OnRasterTaskCompleted(
|
|
|
| // Tile can be freed after the completion of the raster task. Call
|
| // AssignGpuMemoryToTiles() to re-assign gpu memory to highest priority
|
| - // tiles. The result of this could be that this tile is no longer
|
| - // allowed to use gpu memory and in that case we need to abort
|
| - // initialization and free all associated resources before calling
|
| - // DispatchMoreTasks().
|
| - AssignGpuMemoryToTiles();
|
| + // tiles if ManageTiles() was called since task was dispatched. The result
|
| + // of this could be that this tile is no longer allowed to use gpu
|
| + // memory and in that case we need to abort initialization and free all
|
| + // associated resources before calling DispatchMoreTasks().
|
| + if (manage_tiles_call_count_when_dispatched != manage_tiles_call_count_)
|
| + AssignGpuMemoryToTiles();
|
|
|
| // Finish resource initialization if |can_use_gpu_memory| is true.
|
| if (managed_tile_state.can_use_gpu_memory) {
|
|
|