Index: cc/trees/threaded_channel.cc |
diff --git a/cc/trees/threaded_channel.cc b/cc/trees/threaded_channel.cc |
index b723f8c612a93f880182836b0887bc76bed6d66c..63e228eb3f235c17514a8e7344dbcfccafec5d8d 100644 |
--- a/cc/trees/threaded_channel.cc |
+++ b/cc/trees/threaded_channel.cc |
@@ -7,31 +7,21 @@ |
#include "base/bind.h" |
#include "base/single_thread_task_runner.h" |
#include "base/trace_event/trace_event.h" |
+#include "cc/trees/layer_tree_host.h" |
namespace cc { |
-scoped_ptr<ThreadedChannel> ThreadedChannel::Create( |
- ThreadProxy* thread_proxy, |
- scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
- return make_scoped_ptr( |
- new ThreadedChannel(thread_proxy, main_task_runner, impl_task_runner)); |
+scoped_ptr<ThreadedChannel> ThreadedChannel::Create(ProxyMain* proxy_main) { |
+ return make_scoped_ptr(new ThreadedChannel(proxy_main)); |
} |
-ThreadedChannel::ThreadedChannel( |
- ThreadProxy* thread_proxy, |
- scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) |
- : proxy_main_(thread_proxy), |
- proxy_impl_(thread_proxy), |
- proxy_(thread_proxy), |
- main_task_runner_(main_task_runner), |
- impl_task_runner_(impl_task_runner) {} |
+ThreadedChannel::ThreadedChannel(ProxyMain* proxy_main) |
+ : proxy_main_(proxy_main) {} |
void ThreadedChannel::SetThrottleFrameProductionOnImpl(bool throttle) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::SetThrottleFrameProductionOnImpl, |
- proxy_impl_->GetImplWeakPtr(), throttle)); |
+ proxy_impl_->GetWeakPtr(), throttle)); |
} |
void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints, |
@@ -40,56 +30,56 @@ void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints, |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, |
base::Bind(&ProxyImpl::UpdateTopControlsStateOnImpl, |
- proxy_impl_->GetImplWeakPtr(), constraints, current, animate)); |
+ proxy_impl_->GetWeakPtr(), constraints, current, animate)); |
} |
void ThreadedChannel::InitializeOutputSurfaceOnImpl( |
OutputSurface* output_surface) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::InitializeOutputSurfaceOnImpl, |
- proxy_impl_->GetImplWeakPtr(), output_surface)); |
+ proxy_impl_->GetWeakPtr(), output_surface)); |
} |
void ThreadedChannel::MainThreadHasStoppedFlingingOnImpl() { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::MainThreadHasStoppedFlingingOnImpl, |
- proxy_impl_->GetImplWeakPtr())); |
+ proxy_impl_->GetWeakPtr())); |
} |
void ThreadedChannel::SetInputThrottledUntilCommitOnImpl(bool is_throttled) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::SetInputThrottledUntilCommitOnImpl, |
- proxy_impl_->GetImplWeakPtr(), is_throttled)); |
+ proxy_impl_->GetWeakPtr(), is_throttled)); |
} |
void ThreadedChannel::SetDeferCommitsOnImpl(bool defer_commits) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::SetDeferCommitsOnImpl, |
- proxy_impl_->GetImplWeakPtr(), defer_commits)); |
+ proxy_impl_->GetWeakPtr(), defer_commits)); |
} |
void ThreadedChannel::FinishAllRenderingOnImpl(CompletionEvent* completion) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::FinishAllRenderingOnImpl, |
- proxy_impl_->GetImplWeakPtr(), completion)); |
+ proxy_impl_->GetWeakPtr(), completion)); |
} |
void ThreadedChannel::SetNeedsCommitOnImpl() { |
- ImplThreadTaskRunner()->PostTask(FROM_HERE, |
- base::Bind(&ProxyImpl::SetNeedsCommitOnImpl, |
- proxy_impl_->GetImplWeakPtr())); |
+ ImplThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&ProxyImpl::SetNeedsCommitOnImpl, proxy_impl_->GetWeakPtr())); |
} |
void ThreadedChannel::BeginMainFrameAbortedOnImpl(CommitEarlyOutReason reason) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::BeginMainFrameAbortedOnImpl, |
- proxy_impl_->GetImplWeakPtr(), reason)); |
+ proxy_impl_->GetWeakPtr(), reason)); |
} |
void ThreadedChannel::SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::SetNeedsRedrawOnImpl, |
- proxy_impl_->GetImplWeakPtr(), damage_rect)); |
+ proxy_impl_->GetWeakPtr(), damage_rect)); |
} |
void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion, |
@@ -97,41 +87,70 @@ void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion, |
bool hold_commit_for_activation) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, |
- base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_->GetImplWeakPtr(), |
+ base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_->GetWeakPtr(), |
completion, layer_tree_host, hold_commit_for_activation)); |
} |
-void ThreadedChannel::InitializeImplOnImpl(CompletionEvent* completion, |
- LayerTreeHost* layer_tree_host) { |
+void ThreadedChannel::InitializeImpl( |
+ CompletionEvent* completion, |
+ LayerTreeHost* layer_tree_host, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
+ TRACE_EVENT0("cc", "ThreadChannel::InitializeImpl"); |
ImplThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&ProxyImpl::InitializeImplOnImpl, |
- base::Unretained(proxy_impl_), completion, layer_tree_host)); |
+ FROM_HERE, base::Bind(&ThreadedChannel::InitializeImplOnImpl, |
+ base::Unretained(this), completion, layer_tree_host, |
+ base::Passed(&external_begin_frame_source))); |
+} |
+ |
+void ThreadedChannel::InitializeImplOnImpl( |
+ CompletionEvent* completion, |
+ LayerTreeHost* layer_tree_host, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
+ DCHECK(proxy_main_->IsImplThread()); |
+ proxy_impl_ = CreateProxyImpl(this, layer_tree_host, proxy_main_, |
+ external_begin_frame_source.Pass()); |
+ completion->Signal(); |
} |
-void ThreadedChannel::LayerTreeHostClosedOnImpl(CompletionEvent* completion) { |
+scoped_ptr<ProxyImpl> ThreadedChannel::CreateProxyImpl( |
+ ChannelImpl* channel_impl, |
+ LayerTreeHost* layer_tree_host, |
+ TaskRunnerProvider* task_runner_provider, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) { |
+ return ProxyImpl::Create(channel_impl, layer_tree_host, task_runner_provider, |
+ external_begin_frame_source.Pass()); |
+} |
+ |
+void ThreadedChannel::CloseImpl(CompletionEvent* completion) { |
+ TRACE_EVENT0("cc", "ThreadChannel::~CloseImpl"); |
ImplThreadTaskRunner()->PostTask( |
- FROM_HERE, base::Bind(&ProxyImpl::LayerTreeHostClosedOnImpl, |
- proxy_impl_->GetImplWeakPtr(), completion)); |
- proxy_impl_ = nullptr; |
+ FROM_HERE, base::Bind(&ThreadedChannel::CloseImplOnImpl, |
+ base::Unretained(this), completion)); |
+} |
+ |
+void ThreadedChannel::CloseImplOnImpl(CompletionEvent* completion) { |
+ DCHECK(proxy_main_->IsImplThread()); |
+ proxy_impl_->LayerTreeHostClosedOnImpl(); |
+ proxy_impl_.reset(); |
+ completion->Signal(); |
} |
void ThreadedChannel::SetVisibleOnImpl(bool visible) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::SetVisibleOnImpl, |
- proxy_impl_->GetImplWeakPtr(), visible)); |
+ proxy_impl_->GetWeakPtr(), visible)); |
} |
void ThreadedChannel::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::ReleaseOutputSurfaceOnImpl, |
- proxy_impl_->GetImplWeakPtr(), completion)); |
+ proxy_impl_->GetWeakPtr(), completion)); |
} |
void ThreadedChannel::FinishGLOnImpl(CompletionEvent* completion) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::FinishGLOnImpl, |
- proxy_impl_->GetImplWeakPtr(), completion)); |
+ proxy_impl_->GetWeakPtr(), completion)); |
} |
void ThreadedChannel::MainFrameWillHappenOnImplForTesting( |
@@ -139,68 +158,66 @@ void ThreadedChannel::MainFrameWillHappenOnImplForTesting( |
bool* main_frame_will_happen) { |
ImplThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyImpl::MainFrameWillHappenOnImplForTesting, |
- proxy_impl_->GetImplWeakPtr(), completion, |
+ proxy_impl_->GetWeakPtr(), completion, |
main_frame_will_happen)); |
} |
void ThreadedChannel::DidCompleteSwapBuffers() { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::DidCompleteSwapBuffers, |
- proxy_main_->GetMainWeakPtr())); |
+ proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::SetRendererCapabilitiesMainCopy( |
const RendererCapabilities& capabilities) { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::SetRendererCapabilitiesMainCopy, |
- proxy_main_->GetMainWeakPtr(), capabilities)); |
+ proxy_main_->GetWeakPtr(), capabilities)); |
} |
void ThreadedChannel::BeginMainFrameNotExpectedSoon() { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::BeginMainFrameNotExpectedSoon, |
- proxy_main_->GetMainWeakPtr())); |
+ proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::DidCommitAndDrawFrame() { |
- MainThreadTaskRunner()->PostTask(FROM_HERE, |
- base::Bind(&ProxyMain::DidCommitAndDrawFrame, |
- proxy_main_->GetMainWeakPtr())); |
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&ProxyMain::DidCommitAndDrawFrame, proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::SetAnimationEvents( |
scoped_ptr<AnimationEventsVector> queue) { |
MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&ProxyMain::SetAnimationEvents, proxy_main_->GetMainWeakPtr(), |
- base::Passed(&queue))); |
+ FROM_HERE, base::Bind(&ProxyMain::SetAnimationEvents, |
+ proxy_main_->GetWeakPtr(), base::Passed(&queue))); |
} |
void ThreadedChannel::DidLoseOutputSurface() { |
- MainThreadTaskRunner()->PostTask(FROM_HERE, |
- base::Bind(&ProxyMain::DidLoseOutputSurface, |
- proxy_main_->GetMainWeakPtr())); |
+ MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&ProxyMain::DidLoseOutputSurface, proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::RequestNewOutputSurface() { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::RequestNewOutputSurface, |
- proxy_main_->GetMainWeakPtr())); |
+ proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::DidInitializeOutputSurface( |
bool success, |
const RendererCapabilities& capabilities) { |
MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&ProxyMain::DidInitializeOutputSurface, |
- proxy_main_->GetMainWeakPtr(), success, capabilities)); |
+ FROM_HERE, base::Bind(&ProxyMain::DidInitializeOutputSurface, |
+ proxy_main_->GetWeakPtr(), success, capabilities)); |
} |
void ThreadedChannel::DidCompletePageScaleAnimation() { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::DidCompletePageScaleAnimation, |
- proxy_main_->GetMainWeakPtr())); |
+ proxy_main_->GetWeakPtr())); |
} |
void ThreadedChannel::PostFrameTimingEventsOnMain( |
@@ -208,7 +225,7 @@ void ThreadedChannel::PostFrameTimingEventsOnMain( |
scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, base::Bind(&ProxyMain::PostFrameTimingEventsOnMain, |
- proxy_main_->GetMainWeakPtr(), |
+ proxy_main_->GetWeakPtr(), |
base::Passed(composite_events.Pass()), |
base::Passed(main_frame_events.Pass()))); |
} |
@@ -217,7 +234,7 @@ void ThreadedChannel::BeginMainFrame( |
scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { |
MainThreadTaskRunner()->PostTask( |
FROM_HERE, |
- base::Bind(&ProxyMain::BeginMainFrame, proxy_main_->GetMainWeakPtr(), |
+ base::Bind(&ProxyMain::BeginMainFrame, proxy_main_->GetWeakPtr(), |
base::Passed(&begin_main_frame_state))); |
} |
@@ -225,12 +242,16 @@ ThreadedChannel::~ThreadedChannel() { |
TRACE_EVENT0("cc", "ThreadChannel::~ThreadChannel"); |
} |
+bool ThreadedChannel::IsInitialized() const { |
+ return !!proxy_impl_.get(); |
+} |
+ |
base::SingleThreadTaskRunner* ThreadedChannel::MainThreadTaskRunner() const { |
- return main_task_runner_.get(); |
+ return proxy_main_->MainThreadTaskRunner(); |
} |
base::SingleThreadTaskRunner* ThreadedChannel::ImplThreadTaskRunner() const { |
- return impl_task_runner_.get(); |
+ return proxy_main_->ImplThreadTaskRunner(); |
} |
} // namespace cc |