Index: ui/compositor/compositor.cc |
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
index 788cd484c3ec71d555528ef565af79784f77d7b7..5a1cf87df61f4c15e3a8bc867a61e1019af61f08 100644 |
--- a/ui/compositor/compositor.cc |
+++ b/ui/compositor/compositor.cc |
@@ -10,14 +10,10 @@ |
#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
-#include "base/memory/singleton.h" |
#include "base/message_loop/message_loop.h" |
#include "base/metrics/histogram.h" |
-#include "base/run_loop.h" |
#include "base/strings/string_util.h" |
#include "base/sys_info.h" |
-#include "base/threading/thread.h" |
-#include "base/threading/thread_restrictions.h" |
#include "cc/base/latency_info_swap_promise.h" |
#include "cc/base/switches.h" |
#include "cc/input/input_handler.h" |
@@ -39,9 +35,6 @@ namespace { |
const double kDefaultRefreshRate = 60.0; |
const double kTestRefreshRate = 200.0; |
-bool g_compositor_initialized = false; |
-base::Thread* g_compositor_thread = NULL; |
- |
ui::ContextFactory* g_context_factory = NULL; |
const int kCompositorLockTimeoutMs = 67; |
@@ -92,6 +85,7 @@ namespace ui { |
Compositor::Compositor(gfx::AcceleratedWidget widget) |
: root_layer_(NULL), |
widget_(widget), |
+ compositor_thread_loop_(g_context_factory->GetCompositorMessageLoop()), |
vsync_manager_(new CompositorVSyncManager()), |
device_scale_factor_(0.0f), |
last_started_frame_(0), |
@@ -104,9 +98,6 @@ Compositor::Compositor(gfx::AcceleratedWidget widget) |
draw_on_compositing_end_(false), |
swap_state_(SWAP_NONE), |
schedule_draw_factory_(this) { |
- DCHECK(g_compositor_initialized) |
- << "Compositor::Initialize must be called before creating a Compositor."; |
- |
root_web_layer_ = cc::Layer::Create(); |
root_web_layer_->SetAnchorPoint(gfx::PointF(0.f, 0.f)); |
@@ -156,12 +147,12 @@ Compositor::Compositor(gfx::AcceleratedWidget widget) |
settings.use_zero_copy = IsUIZeroCopyEnabled(); |
base::TimeTicks before_create = base::TimeTicks::Now(); |
- if (!!g_compositor_thread) { |
+ if (compositor_thread_loop_) { |
host_ = cc::LayerTreeHost::CreateThreaded( |
this, |
g_context_factory->GetSharedBitmapManager(), |
settings, |
- g_compositor_thread->message_loop_proxy()); |
+ compositor_thread_loop_); |
} else { |
host_ = cc::LayerTreeHost::CreateSingleThreaded( |
this, this, g_context_factory->GetSharedBitmapManager(), settings); |
@@ -175,8 +166,6 @@ Compositor::Compositor(gfx::AcceleratedWidget widget) |
Compositor::~Compositor() { |
TRACE_EVENT0("shutdown", "Compositor::destructor"); |
- DCHECK(g_compositor_initialized); |
- |
CancelCompositorLock(); |
DCHECK(!compositor_lock_); |
@@ -190,51 +179,8 @@ Compositor::~Compositor() { |
ContextFactory::GetInstance()->RemoveCompositor(this); |
} |
-// static |
-void Compositor::Initialize() { |
-#if defined(OS_CHROMEOS) |
- bool use_thread = !CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kUIDisableThreadedCompositing); |
-#else |
- bool use_thread = false; |
-#endif |
- if (use_thread) { |
- g_compositor_thread = new base::Thread("Browser Compositor"); |
- g_compositor_thread->Start(); |
- } |
- |
- DCHECK(!g_compositor_initialized) << "Compositor initialized twice."; |
- g_compositor_initialized = true; |
-} |
- |
-// static |
-bool Compositor::WasInitializedWithThread() { |
- DCHECK(g_compositor_initialized); |
- return !!g_compositor_thread; |
-} |
- |
-// static |
-scoped_refptr<base::MessageLoopProxy> Compositor::GetCompositorMessageLoop() { |
- scoped_refptr<base::MessageLoopProxy> proxy; |
- if (g_compositor_thread) |
- proxy = g_compositor_thread->message_loop_proxy(); |
- return proxy; |
-} |
- |
-// static |
-void Compositor::Terminate() { |
- if (g_compositor_thread) { |
- g_compositor_thread->Stop(); |
- delete g_compositor_thread; |
- g_compositor_thread = NULL; |
- } |
- |
- DCHECK(g_compositor_initialized) << "Compositor::Initialize() didn't happen."; |
- g_compositor_initialized = false; |
-} |
- |
void Compositor::ScheduleDraw() { |
- if (g_compositor_thread) { |
+ if (compositor_thread_loop_) { |
host_->Composite(gfx::FrameTime::Now()); |
} else if (!defer_draw_scheduling_) { |
defer_draw_scheduling_ = true; |
@@ -263,7 +209,7 @@ void Compositor::SetHostHasTransparentBackground( |
} |
void Compositor::Draw() { |
- DCHECK(!g_compositor_thread); |
+ DCHECK(!compositor_thread_loop_); |
defer_draw_scheduling_ = false; |
if (waiting_on_compositing_end_) { |
@@ -382,7 +328,7 @@ void Compositor::DidCommitAndDrawFrame() { |
} |
void Compositor::DidCompleteSwapBuffers() { |
- if (g_compositor_thread) { |
+ if (compositor_thread_loop_) { |
NotifyEnd(); |
} else { |
DCHECK_EQ(swap_state_, SWAP_POSTED); |
@@ -401,13 +347,13 @@ void Compositor::ScheduleAnimation() { |
} |
void Compositor::DidPostSwapBuffers() { |
- DCHECK(!g_compositor_thread); |
+ DCHECK(!compositor_thread_loop_); |
DCHECK_EQ(swap_state_, SWAP_NONE); |
swap_state_ = SWAP_POSTED; |
} |
void Compositor::DidAbortSwapBuffers() { |
- if (!g_compositor_thread) { |
+ if (!compositor_thread_loop_) { |
if (swap_state_ == SWAP_POSTED) { |
NotifyEnd(); |
swap_state_ = SWAP_COMPLETED; |
@@ -431,7 +377,7 @@ void Compositor::SetLayerTreeDebugState( |
scoped_refptr<CompositorLock> Compositor::GetCompositorLock() { |
if (!compositor_lock_) { |
compositor_lock_ = new CompositorLock(this); |
- if (g_compositor_thread) |
+ if (compositor_thread_loop_) |
host_->SetDeferCommits(true); |
FOR_EACH_OBSERVER(CompositorObserver, |
observer_list_, |
@@ -443,7 +389,7 @@ scoped_refptr<CompositorLock> Compositor::GetCompositorLock() { |
void Compositor::UnlockCompositor() { |
DCHECK(compositor_lock_); |
compositor_lock_ = NULL; |
- if (g_compositor_thread) |
+ if (compositor_thread_loop_) |
host_->SetDeferCommits(false); |
FOR_EACH_OBSERVER(CompositorObserver, |
observer_list_, |