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

Unified Diff: cc/resources/gpu_tile_task_worker_pool.cc

Issue 807233002: cc: GPU rasterize tiles synchronously in PrepareToDraw. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missed 2 lines when splitting this from patch 743023002. 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/resources/gpu_tile_task_worker_pool.h ('k') | cc/resources/rasterizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/gpu_tile_task_worker_pool.cc
diff --git a/cc/resources/gpu_tile_task_worker_pool.cc b/cc/resources/gpu_tile_task_worker_pool.cc
index 2cd4edd73d58a2e0223b89efbf356f2d2384fac5..2b49f74d44ad3739ad2d6d46d84a5ab4d3c1fd32 100644
--- a/cc/resources/gpu_tile_task_worker_pool.cc
+++ b/cc/resources/gpu_tile_task_worker_pool.cc
@@ -76,21 +76,23 @@ class RasterBufferImpl : public RasterBuffer {
// static
scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create(
base::SequencedTaskRunner* task_runner,
+ TaskGraphRunner* task_graph_runner,
ContextProvider* context_provider,
ResourceProvider* resource_provider,
bool use_distance_field_text) {
- return make_scoped_ptr<TileTaskWorkerPool>(
- new GpuTileTaskWorkerPool(task_runner, context_provider,
- resource_provider, use_distance_field_text));
+ return make_scoped_ptr<TileTaskWorkerPool>(new GpuTileTaskWorkerPool(
+ task_runner, task_graph_runner, context_provider, resource_provider,
+ use_distance_field_text));
}
GpuTileTaskWorkerPool::GpuTileTaskWorkerPool(
base::SequencedTaskRunner* task_runner,
+ TaskGraphRunner* task_graph_runner,
ContextProvider* context_provider,
ResourceProvider* resource_provider,
bool use_distance_field_text)
: task_runner_(task_runner),
- task_graph_runner_(new TaskGraphRunner),
+ task_graph_runner_(task_graph_runner),
namespace_token_(task_graph_runner_->GetNamespaceToken()),
context_provider_(context_provider),
resource_provider_(resource_provider),
@@ -172,8 +174,6 @@ void GpuTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) {
ScheduleTasksOnOriginThread(this, &graph_);
task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
- ScheduleRunTasksOnOriginThread();
-
std::copy(new_task_set_finished_tasks,
new_task_set_finished_tasks + kNumberOfTaskSets,
task_set_finished_tasks_);
@@ -184,15 +184,19 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() {
task_graph_runner_->CollectCompletedTasks(namespace_token_,
&completed_tasks_);
- for (Task::Vector::const_iterator it = completed_tasks_.begin();
- it != completed_tasks_.end(); ++it) {
- TileTask* task = static_cast<TileTask*>(it->get());
+ CompleteTasks(completed_tasks_);
+ completed_tasks_.clear();
+}
+
+void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) {
+ for (auto& task : tasks) {
+ RasterTask* raster_task = static_cast<RasterTask*>(task.get());
- task->WillComplete();
- task->CompleteOnOriginThread(this);
- task->DidComplete();
+ raster_task->WillComplete();
+ raster_task->CompleteOnOriginThread(this);
+ raster_task->DidComplete();
- task->RunReplyOnOriginThread();
+ raster_task->RunReplyOnOriginThread();
}
completed_tasks_.clear();
}
@@ -215,31 +219,8 @@ void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) {
DCHECK(tasks_pending_[task_set]);
tasks_pending_[task_set] = false;
- client_->DidFinishRunningTileTasks(task_set);
-}
-
-void GpuTileTaskWorkerPool::ScheduleRunTasksOnOriginThread() {
- if (run_tasks_on_origin_thread_pending_)
- return;
- task_runner_->PostTask(
- FROM_HERE, base::Bind(&GpuTileTaskWorkerPool::RunTasksOnOriginThread,
- weak_ptr_factory_.GetWeakPtr()));
- run_tasks_on_origin_thread_pending_ = true;
-}
-
-void GpuTileTaskWorkerPool::RunTasksOnOriginThread() {
- TRACE_EVENT0("cc", "GpuTileTaskWorkerPool::RunTasksOnOriginThread");
-
- DCHECK(run_tasks_on_origin_thread_pending_);
- run_tasks_on_origin_thread_pending_ = false;
-
- ScopedGpuRaster gpu_raster(context_provider_);
- task_graph_runner_->RunUntilIdle();
-
- // Draw each all of the pictures that were collected. This will also clear
- // the pictures and canvases added to |multi_picture_draw_|
- multi_picture_draw_.draw();
+ client_->DidFinishRunningTileTasks(task_set);
}
} // namespace cc
« no previous file with comments | « cc/resources/gpu_tile_task_worker_pool.h ('k') | cc/resources/rasterizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698