Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Unified Diff: cc/tile_manager.cc

Issue 12194015: cc: Rasterize cheap tiles immediately (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Schedule cheap tasks in worker pool. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698