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); |
} |