Index: cc/trees/threaded_channel.h |
diff --git a/cc/trees/threaded_channel.h b/cc/trees/threaded_channel.h |
index ca7fc04c0a7319f5aa6ce7bfe0bc2ca4b0c102e1..0f61e901028e0fde450efad507fd9dbc0852188b 100644 |
--- a/cc/trees/threaded_channel.h |
+++ b/cc/trees/threaded_channel.h |
@@ -7,13 +7,13 @@ |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
#include "cc/base/cc_export.h" |
#include "cc/trees/channel_impl.h" |
#include "cc/trees/channel_main.h" |
#include "cc/trees/proxy_common.h" |
#include "cc/trees/proxy_impl.h" |
#include "cc/trees/proxy_main.h" |
-#include "cc/trees/thread_proxy.h" |
namespace base { |
class SingleThreadTaskRunner; |
@@ -22,9 +22,9 @@ class SingleThreadTaskRunner; |
namespace cc { |
class ChannelImpl; |
class ChannelMain; |
+class LayerTreeHost; |
class ProxyImpl; |
class ProxyMain; |
-class ThreadProxy; |
// An implementation of ChannelMain and ChannelImpl that sends commands between |
// ProxyMain and ProxyImpl across thread boundaries. |
@@ -66,14 +66,29 @@ class ThreadProxy; |
class CC_EXPORT ThreadedChannel : public ChannelMain, public ChannelImpl { |
public: |
static scoped_ptr<ThreadedChannel> Create( |
- // TODO(khushalsagar): Make this ProxyMain* and write the initialization |
- // sequence. Currently ThreadProxy implements both so we pass the pointer |
- // and set ProxyImpl. |
- ThreadProxy* thread_proxy, |
+ ProxyMain* proxy_main, |
TaskRunnerProvider* task_runner_provider); |
~ThreadedChannel() override; |
+ // The members of this struct should be accessed on the main thread only. |
+ struct MainThreadOnly { |
+ base::WeakPtrFactory<ProxyMain> proxy_main_weak_factory; |
+ bool initialized; |
+ |
+ explicit MainThreadOnly(ProxyMain* proxy_main); |
+ ~MainThreadOnly(); |
+ }; |
+ |
+ // The members of this struct should be accessed on the impl thread only. |
+ struct CompositorThreadOnly { |
+ scoped_ptr<ProxyImpl> proxy_impl; |
+ scoped_ptr<base::WeakPtrFactory<ProxyImpl>> proxy_impl_weak_factory; |
+ |
+ CompositorThreadOnly(); |
+ ~CompositorThreadOnly(); |
+ }; |
+ |
// ChannelMain Implementation |
void SetThrottleFrameProductionOnImpl(bool throttle) override; |
void UpdateTopControlsStateOnImpl(TopControlsState constraints, |
@@ -93,7 +108,6 @@ class CC_EXPORT ThreadedChannel : public ChannelMain, public ChannelImpl { |
// Blocking calls to ProxyImpl |
void FinishAllRenderingOnImpl(CompletionEvent* completion) override; |
void ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) override; |
- void FinishGLOnImpl(CompletionEvent* completion) override; |
void MainFrameWillHappenOnImplForTesting( |
CompletionEvent* completion, |
bool* main_frame_will_happen) override; |
@@ -101,9 +115,10 @@ class CC_EXPORT ThreadedChannel : public ChannelMain, public ChannelImpl { |
LayerTreeHost* layer_tree_host, |
base::TimeTicks main_thread_start_time, |
bool hold_commit_for_activation) override; |
- void InitializeImplOnImpl(CompletionEvent* completion, |
- LayerTreeHost* layer_tree_host) override; |
- void LayerTreeHostClosedOnImpl(CompletionEvent* completion) override; |
+ void SynchronouslyInitializeImpl( |
+ LayerTreeHost* layer_tree_host, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) override; |
+ void SynchronouslyCloseImpl() override; |
// ChannelImpl Implementation |
void DidCompleteSwapBuffers() override; |
@@ -125,23 +140,48 @@ class CC_EXPORT ThreadedChannel : public ChannelMain, public ChannelImpl { |
void BeginMainFrame( |
scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) override; |
+ // Should be called on impl thread only. |
+ ProxyImpl* GetProxyImplForTesting() const; |
+ |
protected: |
- ThreadedChannel(ThreadProxy* thread_proxy, |
+ ThreadedChannel(ProxyMain* proxy_main, |
TaskRunnerProvider* task_runner_provider); |
+ // virtual for testing. |
+ virtual scoped_ptr<ProxyImpl> CreateProxyImpl( |
+ ChannelImpl* channel_impl, |
+ LayerTreeHost* layer_tree_host, |
+ TaskRunnerProvider* task_runner_provider, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source); |
+ |
private: |
+ // called on impl thread. |
+ void InitializeImplOnImplThread( |
Wez
2015/11/21 01:00:30
I thought we had agreed to break ThreadedChannel i
Khushal
2015/11/23 20:07:20
For this patch, It would make sense to keep the sp
|
+ CompletionEvent* completion, |
+ LayerTreeHost* layer_tree_host, |
+ scoped_ptr<BeginFrameSource> external_begin_frame_source); |
+ void CloseImplOnImplThread(CompletionEvent* completion); |
+ |
+ bool IsInitialized() const; |
+ |
base::SingleThreadTaskRunner* MainThreadTaskRunner() const; |
base::SingleThreadTaskRunner* ImplThreadTaskRunner() const; |
- ProxyMain* proxy_main_; |
+ // Use accessors instead of this variable directly. |
+ MainThreadOnly main_thread_only_vars_unsafe_; |
+ MainThreadOnly& main(); |
+ const MainThreadOnly& main() const; |
- ProxyImpl* proxy_impl_; |
+ // Use accessors instead of this variable directly. |
+ CompositorThreadOnly compositor_thread_vars_unsafe_; |
+ CompositorThreadOnly& impl(); |
+ const CompositorThreadOnly& impl() const; |
TaskRunnerProvider* task_runner_provider_; |
- scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; |
+ base::WeakPtr<ProxyMain> proxy_main_weak_ptr_; |
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner_; |
+ base::WeakPtr<ProxyImpl> proxy_impl_weak_ptr_; |
DISALLOW_COPY_AND_ASSIGN(ThreadedChannel); |
}; |