Chromium Code Reviews| Index: ui/compositor/compositor.cc |
| diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
| index f050a64e1a74dede9134fcfe075fd614dcd9841c..0731e73dc26cf700045b71883cf4ac51a16eb6a9 100644 |
| --- a/ui/compositor/compositor.cc |
| +++ b/ui/compositor/compositor.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/profiler/scoped_tracker.h" |
| #include "base/strings/string_util.h" |
| #include "base/sys_info.h" |
| +#include "base/threading/simple_thread.h" |
| #include "base/trace_event/trace_event.h" |
| #include "cc/base/switches.h" |
| #include "cc/input/input_handler.h" |
| @@ -21,6 +22,7 @@ |
| #include "cc/output/begin_frame_args.h" |
| #include "cc/output/context_provider.h" |
| #include "cc/output/latency_info_swap_promise.h" |
| +#include "cc/resources/task_graph_runner.h" |
| #include "cc/scheduler/begin_frame_source.h" |
| #include "cc/surfaces/surface_id_allocator.h" |
| #include "cc/trees/layer_tree_host.h" |
| @@ -37,6 +39,21 @@ |
| namespace { |
| +class RasterThread : public base::SimpleThread { |
| + public: |
| + RasterThread(cc::TaskGraphRunner* task_graph_runner) |
| + : base::SimpleThread("UICompositorWorker"), |
| + task_graph_runner_(task_graph_runner) {} |
| + |
| + // Overridden from base::SimpleThread: |
| + void Run() override { task_graph_runner_->Run(); } |
| + |
| + private: |
| + cc::TaskGraphRunner* task_graph_runner_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(RasterThread); |
| +}; |
| + |
| const double kDefaultRefreshRate = 60.0; |
| const double kTestRefreshRate = 200.0; |
| @@ -75,6 +92,8 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, |
| widget_(widget), |
| surface_id_allocator_(context_factory->CreateSurfaceIdAllocator()), |
| task_runner_(task_runner), |
| + task_graph_runner_(new cc::TaskGraphRunner), |
| + raster_thread_(new RasterThread(task_graph_runner_.get())), |
|
piman
2015/03/20 06:28:35
We wouldn't want one raster thread per compositor.
reveman
2015/03/20 07:42:02
Makes sense. Done.
|
| vsync_manager_(new CompositorVSyncManager()), |
| device_scale_factor_(0.0f), |
| last_started_frame_(0), |
| @@ -135,11 +154,13 @@ Compositor::Compositor(gfx::AcceleratedWidget widget, |
| settings.use_one_copy = IsUIOneCopyEnabled(); |
| settings.use_image_texture_target = context_factory_->GetImageTextureTarget(); |
| + raster_thread_->Start(); |
| + |
| base::TimeTicks before_create = base::TimeTicks::Now(); |
| host_ = cc::LayerTreeHost::CreateSingleThreaded( |
| this, this, context_factory_->GetSharedBitmapManager(), |
| - context_factory_->GetGpuMemoryBufferManager(), settings, task_runner_, |
| - nullptr); |
| + context_factory_->GetGpuMemoryBufferManager(), task_graph_runner_.get(), |
| + settings, task_runner_, nullptr); |
| UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor", |
| base::TimeTicks::Now() - before_create); |
| host_->SetRootLayer(root_web_layer_); |
| @@ -163,6 +184,9 @@ Compositor::~Compositor() { |
| // down any contexts that the |host_| may rely upon. |
| host_.reset(); |
| + task_graph_runner_->Shutdown(); |
| + raster_thread_->Join(); |
| + |
| context_factory_->RemoveCompositor(this); |
| } |