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(); |