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

Unified Diff: cc/tile_manager.cc

Issue 12088110: HACK: Rasterize tiles immediately if there are only a few of them (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
« no previous file with comments | « cc/tile_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « cc/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698