Chromium Code Reviews| Index: cc/tile_manager.cc |
| diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
| index f4c8bddbd93956b6214476603715d8039b1a0327..00a31219befefeacea6c3577386026e6cd255b07 100644 |
| --- a/cc/tile_manager.cc |
| +++ b/cc/tile_manager.cc |
| @@ -435,6 +435,10 @@ void TileManager::AbortPendingTileUploads() { |
| } |
| } |
| +void TileManager::DidCompleteFrame() { |
| + raster_worker_pool_->SetCheapTasksAllowed(true); |
| +} |
| + |
| void TileManager::GetMemoryStats( |
| size_t* memoryRequiredBytes, |
| size_t* memoryNiceToHaveBytes, |
| @@ -620,7 +624,7 @@ void TileManager::FreeResourcesForTile(Tile* tile) { |
| resource_pool_->ReleaseResource(managed_tile_state.resource.Pass()); |
| } |
| -bool TileManager::CanDispatchRasterTask(Tile* tile) { |
| +bool TileManager::CanDispatchRasterTask(Tile* tile) const { |
| if (raster_worker_pool_->IsBusy()) |
| return false; |
| size_t new_bytes_pending = bytes_pending_set_pixels_; |
| @@ -638,7 +642,7 @@ void TileManager::DispatchMoreTasks() { |
| ManagedTileState& managed_state = (*it)->managed_state(); |
| if (managed_state.pending_pixel_refs.empty()) { |
| if (!CanDispatchRasterTask(*it)) |
| - return; |
| + break; |
| DispatchOneRasterTask(*it); |
| tiles_with_image_decoding_tasks_.erase(it++); |
| } else { |
| @@ -656,11 +660,14 @@ void TileManager::DispatchMoreTasks() { |
| tiles_with_image_decoding_tasks_.push_back(tile); |
| } else { |
| if (!CanDispatchRasterTask(tile)) |
| - return; |
| + break; |
| DispatchOneRasterTask(tile); |
| } |
| tiles_that_need_to_be_rasterized_.pop_back(); |
| } |
| + |
| + if (raster_worker_pool_->RunCheapTasks()) |
|
reveman
2013/02/13 22:17:36
this can be handled internally in the worker pool
|
| + raster_worker_pool_->SetCheapTasksAllowed(false); |
| } |
| void TileManager::GatherPixelRefsForTile(Tile* tile) { |
| @@ -716,7 +723,7 @@ void TileManager::DispatchOneImageDecodeTask( |
| pending_decode_tasks_[pixel_ref_id] = pixel_ref; |
| raster_worker_pool_->PostTaskAndReply( |
| - base::Bind(&TileManager::RunImageDecodeTask, pixel_ref), |
| + base::Bind(&TileManager::PerformImageDecode, pixel_ref), |
| base::Bind(&TileManager::OnImageDecodeTaskCompleted, |
| base::Unretained(this), |
| tile, |
| @@ -764,8 +771,12 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
| scoped_ptr<ResourcePool::Resource> resource = PrepareTileForRaster(tile); |
| ResourceProvider::ResourceId resource_id = resource->id(); |
| + bool is_cheap = use_cheapness_estimator_ && |
| + tile->picture_pile()->IsCheapInRect(tile->content_rect_, |
| + tile->contents_scale()); |
| raster_worker_pool_->PostRasterTaskAndReply( |
| tile->picture_pile(), |
| + is_cheap, |
| base::Bind(&TileManager::PerformRaster, |
| resource_pool_->resource_provider()->mapPixelBuffer( |
| resource_id), |
| @@ -779,21 +790,6 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
| manage_tiles_call_count_)); |
| } |
| -void TileManager::PerformOneRaster(Tile* tile) { |
| - scoped_ptr<ResourcePool::Resource> resource = PrepareTileForRaster(tile); |
| - ResourceProvider::ResourceId resource_id = resource->id(); |
| - |
| - PerformRaster(resource_pool_->resource_provider()->mapPixelBuffer( |
| - resource_id), |
| - tile->content_rect_, |
| - tile->contents_scale(), |
| - use_cheapness_estimator_, |
| - tile->picture_pile(), |
| - &rendering_stats_); |
| - |
| - OnRasterCompleted(tile, resource.Pass(), manage_tiles_call_count_); |
| -} |
| - |
| void TileManager::OnRasterCompleted( |
| scoped_refptr<Tile> tile, |
| scoped_ptr<ResourcePool::Resource> resource, |
| @@ -925,7 +921,7 @@ void TileManager::PerformRaster(uint8* buffer, |
| 10); |
| if (use_cheapness_estimator) { |
| - bool is_predicted_cheap = picture_pile->IsCheapInRect (rect, contents_scale); |
| + bool is_predicted_cheap = picture_pile->IsCheapInRect(rect, contents_scale); |
| bool is_actually_cheap = duration.InMillisecondsF() <= 1.0f; |
| RecordCheapnessPredictorResults(is_predicted_cheap, is_actually_cheap); |
| } |
| @@ -945,9 +941,9 @@ void TileManager::RecordCheapnessPredictorResults(bool is_predicted_cheap, |
| } |
| // static |
| -void TileManager::RunImageDecodeTask(skia::LazyPixelRef* pixel_ref, |
| +void TileManager::PerformImageDecode(skia::LazyPixelRef* pixel_ref, |
| RenderingStats* stats) { |
| - TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask"); |
| + TRACE_EVENT0("cc", "TileManager::PerformImageDecode"); |
| base::TimeTicks decode_begin_time; |
| if (stats) |
| decode_begin_time = base::TimeTicks::Now(); |