| Index: cc/resources/tile_manager.cc
 | 
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
 | 
| index 928861796487b0f4aac00f92bb918ff39316dfa3..5d183ae55290c5ef6909462f62c34fe3225d2b55 100644
 | 
| --- a/cc/resources/tile_manager.cc
 | 
| +++ b/cc/resources/tile_manager.cc
 | 
| @@ -18,7 +18,6 @@
 | 
|  #include "cc/debug/traced_value.h"
 | 
|  #include "cc/layers/picture_layer_impl.h"
 | 
|  #include "cc/resources/raster_buffer.h"
 | 
| -#include "cc/resources/rasterizer.h"
 | 
|  #include "cc/resources/tile.h"
 | 
|  #include "cc/resources/tile_task_runner.h"
 | 
|  #include "ui/gfx/geometry/rect_conversions.h"
 | 
| @@ -203,10 +202,9 @@ scoped_ptr<TileManager> TileManager::Create(
 | 
|      base::SequencedTaskRunner* task_runner,
 | 
|      ResourcePool* resource_pool,
 | 
|      TileTaskRunner* tile_task_runner,
 | 
| -    Rasterizer* rasterizer,
 | 
|      size_t scheduled_raster_task_limit) {
 | 
|    return make_scoped_ptr(new TileManager(client, task_runner, resource_pool,
 | 
| -                                         tile_task_runner, rasterizer,
 | 
| +                                         tile_task_runner,
 | 
|                                           scheduled_raster_task_limit));
 | 
|  }
 | 
|  
 | 
| @@ -215,24 +213,15 @@ TileManager::TileManager(
 | 
|      const scoped_refptr<base::SequencedTaskRunner>& task_runner,
 | 
|      ResourcePool* resource_pool,
 | 
|      TileTaskRunner* tile_task_runner,
 | 
| -    Rasterizer* rasterizer,
 | 
|      size_t scheduled_raster_task_limit)
 | 
|      : client_(client),
 | 
|        task_runner_(task_runner),
 | 
|        resource_pool_(resource_pool),
 | 
|        tile_task_runner_(tile_task_runner),
 | 
| -      rasterizer_(rasterizer),
 | 
|        scheduled_raster_task_limit_(scheduled_raster_task_limit),
 | 
|        all_tiles_that_need_to_be_rasterized_are_scheduled_(true),
 | 
|        did_check_for_completed_tasks_since_last_schedule_tasks_(true),
 | 
|        did_oom_on_last_assign_(false),
 | 
| -      ready_to_activate_notifier_(
 | 
| -          task_runner_.get(),
 | 
| -          base::Bind(&TileManager::NotifyReadyToActivate,
 | 
| -                     base::Unretained(this))),
 | 
| -      ready_to_draw_notifier_(
 | 
| -          task_runner_.get(),
 | 
| -          base::Bind(&TileManager::NotifyReadyToDraw, base::Unretained(this))),
 | 
|        ready_to_activate_check_notifier_(
 | 
|            task_runner_.get(),
 | 
|            base::Bind(&TileManager::CheckIfReadyToActivate,
 | 
| @@ -348,117 +337,38 @@ void TileManager::PrepareTiles(
 | 
|  
 | 
|    global_state_ = state;
 | 
|  
 | 
| -  PrepareTilesMode prepare_tiles_mode = rasterizer_->GetPrepareTilesMode();
 | 
| -
 | 
| -  // TODO(hendrikw): Consider moving some of this code to the rasterizer.
 | 
| -  if (prepare_tiles_mode != PrepareTilesMode::PREPARE_NONE) {
 | 
| -    // We need to call CheckForCompletedTasks() once in-between each call
 | 
| -    // to ScheduleTasks() to prevent canceled tasks from being scheduled.
 | 
| -    if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
 | 
| -      tile_task_runner_->CheckForCompletedTasks();
 | 
| -      did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
 | 
| -    }
 | 
| -
 | 
| -    FreeResourcesForReleasedTiles();
 | 
| -    CleanUpReleasedTiles();
 | 
| -
 | 
| -    TileVector tiles_that_need_to_be_rasterized;
 | 
| -    scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
 | 
| -        client_->BuildRasterQueue(global_state_.tree_priority,
 | 
| -                                  RasterTilePriorityQueue::Type::ALL));
 | 
| -    AssignGpuMemoryToTiles(raster_priority_queue.get(),
 | 
| -                           scheduled_raster_task_limit_,
 | 
| -                           &tiles_that_need_to_be_rasterized);
 | 
| -
 | 
| -    // Inform the client that will likely require a draw if the highest priority
 | 
| -    // tile that will be rasterized is required for draw.
 | 
| -    client_->SetIsLikelyToRequireADraw(
 | 
| -        !tiles_that_need_to_be_rasterized.empty() &&
 | 
| -        (*tiles_that_need_to_be_rasterized.begin())->required_for_draw());
 | 
| -
 | 
| -    // Schedule tile tasks.
 | 
| -    ScheduleTasks(tiles_that_need_to_be_rasterized);
 | 
| -
 | 
| -    did_notify_ready_to_activate_ = false;
 | 
| -    did_notify_ready_to_draw_ = false;
 | 
| -  } else {
 | 
| -    if (global_state_.hard_memory_limit_in_bytes == 0) {
 | 
| -      resource_pool_->CheckBusyResources(false);
 | 
| -      MemoryUsage memory_limit(0, 0);
 | 
| -      MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(),
 | 
| -                               resource_pool_->acquired_resource_count());
 | 
| -      FreeTileResourcesUntilUsageIsWithinLimit(nullptr, memory_limit,
 | 
| -                                               &memory_usage);
 | 
| -    }
 | 
| -
 | 
| -    did_notify_ready_to_activate_ = false;
 | 
| -    did_notify_ready_to_draw_ = false;
 | 
| -    ready_to_activate_notifier_.Schedule();
 | 
| -    ready_to_draw_notifier_.Schedule();
 | 
| +  // We need to call CheckForCompletedTasks() once in-between each call
 | 
| +  // to ScheduleTasks() to prevent canceled tasks from being scheduled.
 | 
| +  if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
 | 
| +    tile_task_runner_->CheckForCompletedTasks();
 | 
| +    did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
 | 
|    }
 | 
|  
 | 
| -  TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
 | 
| -                       "state", BasicStateAsValue());
 | 
| -
 | 
| -  TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
 | 
| -                    resource_pool_->total_memory_usage_bytes() -
 | 
| -                        resource_pool_->acquired_memory_usage_bytes());
 | 
| -}
 | 
| -
 | 
| -void TileManager::SynchronouslyRasterizeTiles(
 | 
| -    const GlobalStateThatImpactsTilePriority& state) {
 | 
| -  TRACE_EVENT0("cc", "TileManager::SynchronouslyRasterizeTiles");
 | 
| -
 | 
| -  DCHECK(rasterizer_->GetPrepareTilesMode() !=
 | 
| -         PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES);
 | 
| -
 | 
| -  global_state_ = state;
 | 
| -
 | 
|    FreeResourcesForReleasedTiles();
 | 
|    CleanUpReleasedTiles();
 | 
|  
 | 
| -  scoped_ptr<RasterTilePriorityQueue> required_for_draw_queue(
 | 
| -      client_->BuildRasterQueue(
 | 
| -          global_state_.tree_priority,
 | 
| -          RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
 | 
|    TileVector tiles_that_need_to_be_rasterized;
 | 
| -  AssignGpuMemoryToTiles(required_for_draw_queue.get(),
 | 
| -                         std::numeric_limits<size_t>::max(),
 | 
| +  scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
 | 
| +      client_->BuildRasterQueue(global_state_.tree_priority,
 | 
| +                                RasterTilePriorityQueue::Type::ALL));
 | 
| +  AssignGpuMemoryToTiles(raster_priority_queue.get(),
 | 
| +                         scheduled_raster_task_limit_,
 | 
|                           &tiles_that_need_to_be_rasterized);
 | 
|  
 | 
| -  // Since we are synchronously rasterizing all tiles, we don't require further
 | 
| -  // draws for that. Set the flag to false so that we can clear it if it was set
 | 
| -  // earlier by PrepareTiles.
 | 
| -  client_->SetIsLikelyToRequireADraw(false);
 | 
| -
 | 
| -  // We must reduce the amount of unused resources before calling
 | 
| -  // RunTasks to prevent usage from rising above limits.
 | 
| -  resource_pool_->ReduceResourceUsage();
 | 
| +  // Inform the client that will likely require a draw if the highest priority
 | 
| +  // tile that will be rasterized is required for draw.
 | 
| +  client_->SetIsLikelyToRequireADraw(
 | 
| +      !tiles_that_need_to_be_rasterized.empty() &&
 | 
| +      (*tiles_that_need_to_be_rasterized.begin())->required_for_draw());
 | 
|  
 | 
| -  // Run and complete all raster task synchronously.
 | 
| -  rasterizer_->RasterizeTiles(
 | 
| -      tiles_that_need_to_be_rasterized, resource_pool_,
 | 
| -      tile_task_runner_->GetResourceFormat(),
 | 
| -      base::Bind(&TileManager::UpdateTileDrawInfo, base::Unretained(this)));
 | 
| -
 | 
| -  // Use on-demand raster for any required-for-draw tiles that have not been
 | 
| -  // assigned memory after reaching a steady memory state.
 | 
| -  // TODO(hendrikw): Figure out why this would improve jank on some tests - See
 | 
| -  // crbug.com/449288
 | 
| -  required_for_draw_queue = client_->BuildRasterQueue(
 | 
| -      global_state_.tree_priority,
 | 
| -      RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
 | 
| +  // Schedule tile tasks.
 | 
| +  ScheduleTasks(tiles_that_need_to_be_rasterized);
 | 
|  
 | 
| -  // Change to OOM mode for any tiles that have not been been assigned memory.
 | 
| -  // This ensures that we draw even when OOM.
 | 
| -  for (; !required_for_draw_queue->IsEmpty(); required_for_draw_queue->Pop()) {
 | 
| -    Tile* tile = required_for_draw_queue->Top();
 | 
| -    tile->draw_info().set_oom();
 | 
| -    client_->NotifyTileStateChanged(tile);
 | 
| -  }
 | 
| +  did_notify_ready_to_activate_ = false;
 | 
| +  did_notify_ready_to_draw_ = false;
 | 
|  
 | 
| -  TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state",
 | 
| -                       BasicStateAsValue());
 | 
| +  TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD,
 | 
| +                       "state", BasicStateAsValue());
 | 
|  
 | 
|    TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
 | 
|                      resource_pool_->total_memory_usage_bytes() -
 | 
| @@ -471,11 +381,6 @@ void TileManager::UpdateVisibleTiles(
 | 
|  
 | 
|    tile_task_runner_->CheckForCompletedTasks();
 | 
|  
 | 
| -  DCHECK(rasterizer_);
 | 
| -  PrepareTilesMode prepare_tiles_mode = rasterizer_->GetPrepareTilesMode();
 | 
| -  if (prepare_tiles_mode != PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES)
 | 
| -    SynchronouslyRasterizeTiles(state);
 | 
| -
 | 
|    did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
 | 
|  
 | 
|    TRACE_EVENT_INSTANT1(
 | 
| 
 |