Chromium Code Reviews| Index: cc/tile_manager.cc |
| diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
| index 16d82d46a8a885052d1549bf4749c73e9d1e50f9..37c25814a78e36fb3011077a5df71179ab020545 100644 |
| --- a/cc/tile_manager.cc |
| +++ b/cc/tile_manager.cc |
| @@ -552,7 +552,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_; |
| @@ -560,6 +560,19 @@ bool TileManager::CanDispatchRasterTask(Tile* tile) { |
| return new_bytes_pending <= kMaxPendingUploadBytes; |
| } |
| +bool TileManager::CanPerformCheapRaster(Tile* tile) const { |
| + if (!use_cheapness_estimator_ || !client_->CanDoAnotherCheapRaster()) |
| + return false; |
| + ManagedTileState& managed_state = tile->managed_state(); |
| + DCHECK(managed_state.pending_pixel_refs.empty()); |
| + size_t new_bytes_pending = bytes_pending_set_pixels_; |
| + new_bytes_pending += tile->bytes_consumed_if_allocated(); |
| + if (new_bytes_pending > kMaxPendingUploadBytes) |
| + return false; |
| + return tile->picture_pile()->IsCheapInRect(tile->content_rect_, |
| + tile->contents_scale()); |
| +} |
| + |
| void TileManager::DispatchMoreTasks() { |
| // Because tiles in the image decoding list have higher priorities, we |
| // need to process those tiles first before we start to handle the tiles |
| @@ -569,9 +582,13 @@ void TileManager::DispatchMoreTasks() { |
| DispatchImageDecodeTasksForTile(*it); |
| ManagedTileState& managed_state = (*it)->managed_state(); |
| if (managed_state.pending_pixel_refs.empty()) { |
| - if (!CanDispatchRasterTask(*it)) |
| - return; |
| - DispatchOneRasterTask(*it); |
| + if (CanPerformCheapRaster(*it)) { |
| + PerformOneCheapRaster(*it); |
| + } else { |
| + if (!CanDispatchRasterTask(*it)) |
| + return; |
| + DispatchOneRasterTask(*it); |
| + } |
| tiles_with_image_decoding_tasks_.erase(it++); |
| } else { |
| ++it; |
| @@ -586,6 +603,8 @@ void TileManager::DispatchMoreTasks() { |
| ManagedTileState& managed_state = tile->managed_state(); |
| if (!managed_state.pending_pixel_refs.empty()) { |
| tiles_with_image_decoding_tasks_.push_back(tile); |
| + } else if (CanPerformCheapRaster(tile)) { |
| + PerformOneCheapRaster(tile); |
|
nduca
2013/02/13 07:17:56
So how about doign this... you can save all the in
|
| } else { |
| if (!CanDispatchRasterTask(tile)) |
| return; |
| @@ -648,7 +667,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, |
| @@ -711,7 +730,8 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
| manage_tiles_call_count_)); |
| } |
| -void TileManager::PerformOneRaster(Tile* tile) { |
| +void TileManager::PerformOneCheapRaster(Tile* tile) { |
| + DCHECK(use_cheapness_estimator_); |
| scoped_ptr<ResourcePool::Resource> resource = PrepareTileForRaster(tile); |
| ResourceProvider::ResourceId resource_id = resource->id(); |
| @@ -722,8 +742,8 @@ void TileManager::PerformOneRaster(Tile* tile) { |
| use_cheapness_estimator_, |
| tile->picture_pile(), |
| &rendering_stats_); |
| - |
| OnRasterCompleted(tile, resource.Pass(), manage_tiles_call_count_); |
| + client_->DidPerformCheapRaster(); |
| } |
| void TileManager::OnRasterCompleted( |
| @@ -857,7 +877,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); |
| } |
| @@ -877,9 +897,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(); |