| Index: cc/tile_manager.cc
|
| diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
|
| index 6a70ca3267e43eb701f249c5854af12a5a238cbf..55ec7bf40a3a2d9930482cad95a07f71903c0526 100644
|
| --- a/cc/tile_manager.cc
|
| +++ b/cc/tile_manager.cc
|
| @@ -187,7 +187,9 @@ TileManager::TileManager(
|
| has_performed_uploads_since_last_flush_(false),
|
| ever_exceeded_memory_budget_(false),
|
| record_rendering_stats_(false),
|
| - use_cheapness_estimator_(use_cheapness_estimator) {
|
| + use_cheapness_estimator_(use_cheapness_estimator),
|
| + allow_cheap_tasks_(true),
|
| + did_schedule_cheap_tasks_(false) {
|
| for (int i = 0; i < NUM_STATES; ++i) {
|
| for (int j = 0; j < NUM_TREES; ++j) {
|
| for (int k = 0; k < NUM_BINS; ++k)
|
| @@ -442,6 +444,11 @@ void TileManager::AbortPendingTileUploads() {
|
| }
|
| }
|
|
|
| +void TileManager::DidCompleteFrame() {
|
| + allow_cheap_tasks_ = true;
|
| + did_schedule_cheap_tasks_ = false;
|
| +}
|
| +
|
| void TileManager::GetMemoryStats(
|
| size_t* memoryRequiredBytes,
|
| size_t* memoryNiceToHaveBytes,
|
| @@ -639,7 +646,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_;
|
| @@ -658,7 +665,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 {
|
| @@ -676,11 +683,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 (did_schedule_cheap_tasks_)
|
| + allow_cheap_tasks_ = false;
|
| }
|
|
|
| void TileManager::GatherPixelRefsForTile(Tile* tile) {
|
| @@ -736,7 +746,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,
|
| @@ -782,8 +792,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_ && allow_cheap_tasks_ &&
|
| + 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),
|
| @@ -796,22 +810,7 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) {
|
| tile,
|
| base::Passed(&resource),
|
| 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_,
|
| - GetRasterTaskMetadata(tile->managed_state()),
|
| - tile->picture_pile(),
|
| - &rendering_stats_);
|
| -
|
| - OnRasterCompleted(tile, resource.Pass(), manage_tiles_call_count_);
|
| + did_schedule_cheap_tasks_ |= is_cheap;
|
| }
|
|
|
| void TileManager::OnRasterCompleted(
|
| @@ -952,7 +951,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);
|
| }
|
| @@ -972,9 +971,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();
|
|
|