Index: cc/trees/thread_proxy.h |
diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h |
index 7af16cd788e07e489015e688fc660c58f1901963..134d5c518f2cfb100cf99faaf4f538ef43b2e285 100644 |
--- a/cc/trees/thread_proxy.h |
+++ b/cc/trees/thread_proxy.h |
@@ -31,10 +31,10 @@ class ResourceUpdateQueue; |
class Scheduler; |
class ScopedThreadProxy; |
-class ThreadProxy : public Proxy, |
- LayerTreeHostImplClient, |
- SchedulerClient, |
- ResourceUpdateControllerClient { |
+class CC_EXPORT ThreadProxy : public Proxy, |
+ NON_EXPORTED_BASE(LayerTreeHostImplClient), |
+ NON_EXPORTED_BASE(SchedulerClient), |
+ NON_EXPORTED_BASE(ResourceUpdateControllerClient) { |
public: |
static scoped_ptr<Proxy> Create( |
LayerTreeHost* layer_tree_host, |
@@ -42,6 +42,111 @@ class ThreadProxy : public Proxy, |
virtual ~ThreadProxy(); |
+ struct BeginMainFrameAndCommitState { |
+ BeginMainFrameAndCommitState(); |
+ ~BeginMainFrameAndCommitState(); |
+ |
+ base::TimeTicks monotonic_frame_begin_time; |
+ scoped_ptr<ScrollAndScaleSet> scroll_info; |
+ size_t memory_allocation_limit_bytes; |
+ int memory_allocation_priority_cutoff; |
+ bool evicted_ui_resources; |
+ }; |
+ |
+ struct MainThreadOnly { |
+ MainThreadOnly(ThreadProxy* proxy, int layer_tree_host_id); |
+ ~MainThreadOnly(); |
+ |
+ const int layer_tree_host_id; |
+ |
+ // Set only when SetNeedsAnimate is called. |
+ bool animate_requested; |
+ // Set only when SetNeedsCommit is called. |
+ bool commit_requested; |
+ // Set by SetNeedsAnimate, SetNeedsUpdateLayers, and SetNeedsCommit. |
+ bool commit_request_sent_to_impl_thread; |
+ |
+ bool started; |
+ bool manage_tiles_pending; |
+ bool can_cancel_commit; |
+ bool defer_commits; |
+ |
+ base::CancelableClosure output_surface_creation_callback; |
+ RendererCapabilities renderer_capabilities_main_thread_copy; |
+ |
+ scoped_ptr<BeginMainFrameAndCommitState> pending_deferred_commit; |
+ base::WeakPtrFactory<ThreadProxy> weak_factory; |
+ }; |
+ |
+ // Accessed on the main thread, or when main thread is blocked. |
+ struct MainThreadOrBlockedMainThread { |
+ explicit MainThreadOrBlockedMainThread(LayerTreeHost* host); |
+ ~MainThreadOrBlockedMainThread(); |
+ |
+ PrioritizedResourceManager* contents_texture_manager(); |
+ |
+ LayerTreeHost* layer_tree_host; |
+ bool commit_waits_for_activation; |
+ bool main_thread_inside_commit; |
+ |
+ base::TimeTicks last_monotonic_frame_begin_time; |
+ }; |
+ |
+ struct ReadbackRequest; |
+ |
+ struct CompositorThreadOnly { |
+ CompositorThreadOnly(ThreadProxy* proxy, int layer_tree_host_id); |
+ ~CompositorThreadOnly(); |
+ |
+ const int layer_tree_host_id; |
+ |
+ // Copy of the main thread side contents texture manager for work |
+ // that needs to be done on the compositor thread. |
+ PrioritizedResourceManager* contents_texture_manager; |
+ |
+ scoped_ptr<Scheduler> scheduler; |
+ |
+ // Set when the main thread is waiting on a |
+ // ScheduledActionSendBeginMainFrame to be issued. |
+ CompletionEvent* begin_main_frame_sent_completion_event; |
+ |
+ // Set when the main thread is waiting on a commit to complete. |
+ CompletionEvent* commit_completion_event; |
+ |
+ // Set when the main thread is waiting on a pending tree activation. |
+ CompletionEvent* completion_event_for_commit_held_on_tree_activation; |
+ |
+ scoped_ptr<ResourceUpdateController> current_resource_update_controller; |
+ |
+ // Set when the next draw should post DidCommitAndDrawFrame to the main |
+ // thread. |
+ bool next_frame_is_newly_committed_frame; |
+ |
+ bool inside_draw; |
+ |
+ bool input_throttled_until_commit; |
+ |
+ // Set when we freeze animations to avoid checkerboarding. |
+ bool animations_frozen_until_next_draw; |
+ base::TimeTicks animation_time; |
+ |
+ // Whether a commit has been completed since the last time animations were |
+ // ticked. If this happens, we need to animate again. |
+ bool did_commit_after_animating; |
+ |
+ base::TimeTicks smoothness_takes_priority_expiration_time; |
+ bool renew_tree_priority_pending; |
+ |
+ ProxyTimingHistory timing_history; |
+ |
+ scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl; |
+ base::WeakPtrFactory<ThreadProxy> weak_factory; |
+ }; |
+ |
+ const MainThreadOnly& main() const; |
+ const MainThreadOrBlockedMainThread& blocked_main() const; |
+ const CompositorThreadOnly& impl() const; |
+ |
// Proxy implementation |
virtual void FinishAllRendering() OVERRIDE; |
virtual bool IsStarted() const OVERRIDE; |
@@ -124,21 +229,11 @@ class ThreadProxy : public Proxy, |
// ResourceUpdateControllerClient implementation |
virtual void ReadyToFinalizeTextureUpdates() OVERRIDE; |
- private: |
+ protected: |
ThreadProxy(LayerTreeHost* layer_tree_host, |
scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner); |
- struct BeginMainFrameAndCommitState { |
- BeginMainFrameAndCommitState(); |
- ~BeginMainFrameAndCommitState(); |
- |
- base::TimeTicks monotonic_frame_begin_time; |
- scoped_ptr<ScrollAndScaleSet> scroll_info; |
- size_t memory_allocation_limit_bytes; |
- int memory_allocation_priority_cutoff; |
- bool evicted_ui_resources; |
- }; |
- |
+ private: |
// Called on main thread. |
void SetRendererCapabilitiesMainThreadCopy( |
const RendererCapabilities& capabilities); |
@@ -166,7 +261,7 @@ class ThreadProxy : public Proxy, |
void HasInitializedOutputSurfaceOnImplThread( |
CompletionEvent* completion, |
bool* has_initialized_output_surface); |
- void InitializeOutputSurfaceOnImplThread( |
+ virtual void InitializeOutputSurfaceOnImplThread( |
CompletionEvent* completion, |
scoped_ptr<OutputSurface> output_surface, |
bool* success, |
@@ -189,105 +284,17 @@ class ThreadProxy : public Proxy, |
LayerTreeHost* layer_tree_host(); |
const LayerTreeHost* layer_tree_host() const; |
- struct MainThreadOnly { |
- MainThreadOnly(ThreadProxy* proxy, int layer_tree_host_id); |
- ~MainThreadOnly(); |
- |
- const int layer_tree_host_id; |
- |
- // Set only when SetNeedsAnimate is called. |
- bool animate_requested; |
- // Set only when SetNeedsCommit is called. |
- bool commit_requested; |
- // Set by SetNeedsAnimate, SetNeedsUpdateLayers, and SetNeedsCommit. |
- bool commit_request_sent_to_impl_thread; |
- |
- bool started; |
- bool manage_tiles_pending; |
- bool can_cancel_commit; |
- bool defer_commits; |
- |
- base::CancelableClosure output_surface_creation_callback; |
- RendererCapabilities renderer_capabilities_main_thread_copy; |
- |
- scoped_ptr<BeginMainFrameAndCommitState> pending_deferred_commit; |
- base::WeakPtrFactory<ThreadProxy> weak_factory; |
- }; |
// Use accessors instead of this variable directly. |
MainThreadOnly main_thread_only_vars_unsafe_; |
MainThreadOnly& main(); |
- const MainThreadOnly& main() const; |
- // Accessed on the main thread, or when main thread is blocked. |
- struct MainThreadOrBlockedMainThread { |
- explicit MainThreadOrBlockedMainThread(LayerTreeHost* host); |
- ~MainThreadOrBlockedMainThread(); |
- |
- PrioritizedResourceManager* contents_texture_manager(); |
- |
- LayerTreeHost* layer_tree_host; |
- bool commit_waits_for_activation; |
- bool main_thread_inside_commit; |
- |
- base::TimeTicks last_monotonic_frame_begin_time; |
- }; |
// Use accessors instead of this variable directly. |
MainThreadOrBlockedMainThread main_thread_or_blocked_vars_unsafe_; |
MainThreadOrBlockedMainThread& blocked_main(); |
- const MainThreadOrBlockedMainThread& blocked_main() const; |
- |
- struct CompositorThreadOnly { |
- CompositorThreadOnly(ThreadProxy* proxy, int layer_tree_host_id); |
- ~CompositorThreadOnly(); |
- |
- const int layer_tree_host_id; |
- |
- // Copy of the main thread side contents texture manager for work |
- // that needs to be done on the compositor thread. |
- PrioritizedResourceManager* contents_texture_manager; |
- |
- scoped_ptr<Scheduler> scheduler; |
- |
- // Set when the main thread is waiting on a |
- // ScheduledActionSendBeginMainFrame to be issued. |
- CompletionEvent* begin_main_frame_sent_completion_event; |
- |
- // Set when the main thread is waiting on a commit to complete. |
- CompletionEvent* commit_completion_event; |
- |
- // Set when the main thread is waiting on a pending tree activation. |
- CompletionEvent* completion_event_for_commit_held_on_tree_activation; |
- |
- scoped_ptr<ResourceUpdateController> current_resource_update_controller; |
- // Set when the next draw should post DidCommitAndDrawFrame to the main |
- // thread. |
- bool next_frame_is_newly_committed_frame; |
- |
- bool inside_draw; |
- |
- bool input_throttled_until_commit; |
- |
- // Set when we freeze animations to avoid checkerboarding. |
- bool animations_frozen_until_next_draw; |
- base::TimeTicks animation_time; |
- |
- // Whether a commit has been completed since the last time animations were |
- // ticked. If this happens, we need to animate again. |
- bool did_commit_after_animating; |
- |
- base::TimeTicks smoothness_takes_priority_expiration_time; |
- bool renew_tree_priority_pending; |
- |
- ProxyTimingHistory timing_history; |
- |
- scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl; |
- base::WeakPtrFactory<ThreadProxy> weak_factory; |
- }; |
// Use accessors instead of this variable directly. |
CompositorThreadOnly compositor_thread_vars_unsafe_; |
CompositorThreadOnly& impl(); |
- const CompositorThreadOnly& impl() const; |
base::WeakPtr<ThreadProxy> main_thread_weak_ptr_; |
base::WeakPtr<ThreadProxy> impl_thread_weak_ptr_; |