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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 733773005: cc: GPU rasterize tiles synchronously in PrepareToDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years 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/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index ea30d8517395eed55d388bf2db0c7048ea3c3353..b3e1a6f8ae44364142695225cd868f2e2df321ed 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -312,7 +312,7 @@ void LayerTreeHostImpl::CommitComplete() {
// more lazily when needed prior to drawing.
sync_tree()->UpdateDrawProperties();
// Start working on newly created tiles immediately if needed.
- if (tile_manager_ && tile_priorities_dirty_)
+ if (tile_manager_ && tile_priorities_dirty_ && !use_gpu_rasterization_)
ManageTiles();
else
NotifyReadyToActivate();
@@ -386,11 +386,23 @@ void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) {
AnimateTopControls(monotonic_time);
}
+void LayerTreeHostImpl::RasterizeTiles() {
+ if (!tile_manager_)
+ return;
+ if (!tile_priorities_dirty_)
+ return;
+
+ tile_priorities_dirty_ = false;
+ tile_manager_->RasterizeTiles(global_tile_state_);
+}
+
void LayerTreeHostImpl::ManageTiles() {
if (!tile_manager_)
return;
if (!tile_priorities_dirty_)
return;
+ if (use_gpu_rasterization_)
+ return;
tile_priorities_dirty_ = false;
tile_manager_->ManageTiles(global_tile_state_);
@@ -1070,6 +1082,9 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) {
bool ok = active_tree_->UpdateDrawProperties();
DCHECK(ok) << "UpdateDrawProperties failed during draw";
+ if (use_gpu_rasterization_)
+ RasterizeTiles();
+
frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList();
frame->render_passes.clear();
frame->render_passes_by_id.clear();
@@ -1863,7 +1878,7 @@ void LayerTreeHostImpl::SetVisible(bool visible) {
// Evict tiles immediately if invisible since this tab may never get another
// draw or timer tick.
- if (!visible_)
+ if (!visible_ && !use_gpu_rasterization_)
ManageTiles();
if (!renderer_)
@@ -1957,8 +1972,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
DCHECK(output_surface_);
DCHECK(resource_provider_);
- CreateResourceAndRasterWorkerPool(
- &raster_worker_pool_, &resource_pool_, &staging_resource_pool_);
+ CreateResourceAndRasterWorkerPool(&raster_worker_pool_, &gpu_rasterizer_,
+ &resource_pool_, &staging_resource_pool_);
DCHECK(raster_worker_pool_);
DCHECK(resource_pool_);
@@ -1969,18 +1984,17 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
size_t scheduled_raster_task_limit =
IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max()
: settings_.scheduled_raster_task_limit;
- tile_manager_ = TileManager::Create(this,
- task_runner,
- resource_pool_.get(),
- raster_worker_pool_->AsRasterizer(),
- rendering_stats_instrumentation_,
- scheduled_raster_task_limit);
+ tile_manager_ = TileManager::Create(
+ this, task_runner, resource_pool_.get(),
+ raster_worker_pool_->AsRasterizer(), gpu_rasterizer_.get(),
+ rendering_stats_instrumentation_, scheduled_raster_task_limit);
UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
}
void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
scoped_ptr<RasterWorkerPool>* raster_worker_pool,
+ scoped_ptr<GpuRasterizer>* gpu_rasterizer,
scoped_ptr<ResourcePool>* resource_pool,
scoped_ptr<ResourcePool>* staging_resource_pool) {
base::SingleThreadTaskRunner* task_runner =
@@ -2013,6 +2027,11 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
context_provider,
resource_provider_.get(),
settings_.use_distance_field_text);
+
+ *gpu_rasterizer =
+ GpuRasterizer::Create(context_provider, resource_provider_.get(),
+ settings_.use_distance_field_text);
+
return;
}
@@ -2079,6 +2098,7 @@ void LayerTreeHostImpl::DestroyTileManager() {
resource_pool_ = nullptr;
staging_resource_pool_ = nullptr;
raster_worker_pool_ = nullptr;
+ gpu_rasterizer_ = nullptr;
single_thread_synchronous_task_graph_runner_ = nullptr;
}
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698