Index: cc/tile_manager.cc |
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
index 9935de5d2e84e1a130b685ac8ef0864213a46ae0..6bf77891194720b556f794c2668388f02d6c840c 100644 |
--- a/cc/tile_manager.cc |
+++ b/cc/tile_manager.cc |
@@ -115,7 +115,8 @@ TileManager::TileManager( |
TileManagerClient* client, |
ResourceProvider* resource_provider, |
size_t num_raster_threads, |
- bool record_rendering_stats) |
+ bool record_rendering_stats, |
+ bool use_cheapness_estimator) |
: client_(client), |
resource_pool_(ResourcePool::Create(resource_provider)), |
raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads, record_rendering_stats)), |
@@ -123,7 +124,8 @@ TileManager::TileManager( |
manage_tiles_call_count_(0), |
bytes_pending_set_pixels_(0), |
ever_exceeded_memory_budget_(false), |
- record_rendering_stats_(record_rendering_stats) { |
+ record_rendering_stats_(record_rendering_stats), |
+ use_cheapness_estimator_(use_cheapness_estimator) { |
for (int i = 0; i < NUM_STATES; ++i) { |
for (int j = 0; j < NUM_TREES; ++j) { |
for (int k = 0; k < NUM_BINS; ++k) |
@@ -647,6 +649,20 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
ResourceProvider::ResourceId resource_id = resource->id(); |
+ if (use_cheapness_estimator_ && |
+ tile->picture_pile()->IsCheapInRect(tile->content_rect_, |
+ tile->contents_scale())) { |
+ RunRasterTask(resource_pool_->resource_provider()->mapPixelBuffer( |
Sami
2013/02/04 13:37:48
Just checking: do I need to clone the picture for
vangelis
2013/02/04 22:33:50
You're already on the impl thread here. It doesn't
reveman
2013/02/04 22:53:24
You shouldn't need that. All other threads possibl
|
+ resource_id), |
+ tile->content_rect_, |
+ tile->contents_scale(), |
+ tile->picture_pile(), |
+ &rendering_stats_); |
+ TileManager::OnRasterTaskCompleted(tile, resource.Pass(), |
reveman
2013/02/04 22:53:24
nit: TileManager:: is unnecessary.
Sami
2013/02/05 12:26:23
Done.
|
+ manage_tiles_call_count_); |
+ return; |
+ } |
reveman
2013/02/04 22:53:24
I don't think all this belongs in DispatchOneRaste
Sami
2013/02/05 12:26:23
Agreed, it is a little misleading. I've now split
|
+ |
raster_worker_pool_->PostRasterTaskAndReply( |
tile->picture_pile(), |
base::Bind(&TileManager::RunRasterTask, |
@@ -654,7 +670,7 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
resource_id), |
tile->content_rect_, |
tile->contents_scale()), |
- base::Bind(&TileManager::OnRasterTaskCompleted, |
+ base::Bind(&TileManager::OnRasterTaskCompletedByWorker, |
base::Unretained(this), |
tile, |
base::Passed(&resource), |
@@ -706,7 +722,14 @@ void TileManager::OnRasterTaskCompleted( |
managed_tile_state.resource_is_being_initialized = false; |
DidTileRasterStateChange(tile, IDLE_STATE); |
} |
+} |
+void TileManager::OnRasterTaskCompletedByWorker( |
+ scoped_refptr<Tile> tile, |
+ scoped_ptr<ResourcePool::Resource> resource, |
+ int manage_tiles_call_count_when_dispatched) { |
+ OnRasterTaskCompleted(tile, resource.Pass(), |
vangelis
2013/02/04 22:33:50
In the "cheap tile" case, don't you still need to
|
+ manage_tiles_call_count_when_dispatched); |
DispatchMoreTasks(); |
} |