| Index: cc/tile_manager.cc
|
| diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
|
| index 612e39dcb3c87cbc9782a9176d6552e3ad78678f..b87825feb2a0fa5c393debe7bf18afe4587e46fb 100644
|
| --- a/cc/tile_manager.cc
|
| +++ b/cc/tile_manager.cc
|
| @@ -534,7 +534,7 @@ void TileManager::DispatchMoreTasks() {
|
| if (managed_state.pending_pixel_refs.empty()) {
|
| if (!CanDispatchRasterTask(*it))
|
| return;
|
| - DispatchOneRasterTask(*it);
|
| + DispatchOneRasterTask(*it, false);
|
| tiles_with_image_decoding_tasks_.erase(it++);
|
| } else {
|
| ++it;
|
| @@ -552,7 +552,9 @@ void TileManager::DispatchMoreTasks() {
|
| } else {
|
| if (!CanDispatchRasterTask(tile))
|
| return;
|
| - DispatchOneRasterTask(tile);
|
| + bool immediate =
|
| + tiles_that_need_to_be_rasterized_.size() < 5;
|
| + DispatchOneRasterTask(tile, immediate);
|
| }
|
| tiles_that_need_to_be_rasterized_.pop_back();
|
| }
|
| @@ -635,7 +637,8 @@ void TileManager::OnImageDecodeTaskCompleted(
|
| DispatchMoreTasks();
|
| }
|
|
|
| -void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) {
|
| +void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile,
|
| + bool immediate) {
|
| TRACE_EVENT0("cc", "TileManager::DispatchOneRasterTask");
|
| ManagedTileState& managed_tile_state = tile->managed_state();
|
| DCHECK(managed_tile_state.can_use_gpu_memory);
|
| @@ -650,6 +653,19 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) {
|
|
|
| ResourceProvider::ResourceId resource_id = resource->id();
|
|
|
| + if (immediate) {
|
| + RunRasterTask(resource_pool_->resource_provider()->mapPixelBuffer(
|
| + resource_id),
|
| + tile->content_rect_,
|
| + tile->contents_scale(),
|
| + tile->picture_pile(),
|
| + &rendering_stats_);
|
| + TileManager::OnRasterTaskCompleted(tile, resource.Pass(),
|
| + manage_tiles_call_count_,
|
| + false);
|
| + return;
|
| + }
|
| +
|
| raster_worker_pool_->PostRasterTaskAndReply(
|
| tile->picture_pile(),
|
| base::Bind(&TileManager::RunRasterTask,
|
| @@ -661,13 +677,15 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) {
|
| base::Unretained(this),
|
| tile,
|
| base::Passed(&resource),
|
| - manage_tiles_call_count_));
|
| + manage_tiles_call_count_,
|
| + true));
|
| }
|
|
|
| void TileManager::OnRasterTaskCompleted(
|
| scoped_refptr<Tile> tile,
|
| scoped_ptr<ResourcePool::Resource> resource,
|
| - int manage_tiles_call_count_when_dispatched) {
|
| + int manage_tiles_call_count_when_dispatched,
|
| + bool dispatch_more) {
|
| TRACE_EVENT0("cc", "TileManager::OnRasterTaskCompleted");
|
|
|
| // Release raster resources.
|
| @@ -710,7 +728,8 @@ void TileManager::OnRasterTaskCompleted(
|
| DidTileRasterStateChange(tile, IDLE_STATE);
|
| }
|
|
|
| - DispatchMoreTasks();
|
| + if (dispatch_more)
|
| + DispatchMoreTasks();
|
| }
|
|
|
| void TileManager::DidFinishTileInitialization(Tile* tile) {
|
|
|