Index: cc/trees/proxy_impl.h |
diff --git a/cc/trees/proxy_impl.h b/cc/trees/proxy_impl.h |
index 092385b5e989eacfc9d20fafae6c40cfc8e49d04..4b0cdaa7c819b790bed03f869b30309d5815af9d 100644 |
--- a/cc/trees/proxy_impl.h |
+++ b/cc/trees/proxy_impl.h |
@@ -5,171 +5,59 @@ |
#ifndef CC_TREES_PROXY_IMPL_H_ |
#define CC_TREES_PROXY_IMPL_H_ |
-#include "base/macros.h" |
-#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "cc/base/cc_export.h" |
#include "cc/base/completion_event.h" |
-#include "cc/base/delayed_unique_notifier.h" |
#include "cc/input/top_controls_state.h" |
-#include "cc/scheduler/scheduler.h" |
-#include "cc/trees/channel_impl.h" |
-#include "cc/trees/layer_tree_host_impl.h" |
+#include "cc/output/output_surface.h" |
+#include "cc/scheduler/commit_earlyout_reason.h" |
+#include "cc/trees/proxy_common.h" |
namespace cc { |
+// TODO(khushalsagar): The impl side of ThreadProxy. It is currently defined as |
+// an interface with the implementation provided by ThreadProxy and will be |
+// made an independent class. |
+// The methods added to this interface should only use the CompositorThreadOnly |
+// variables from ThreadProxy. |
+// See crbug/527200 |
+class CC_EXPORT ProxyImpl { |
+ private: |
+ friend class ThreadedChannel; |
-// This class aggregates all the interactions that the main side of the |
-// compositor needs to have with the impl side. It is created and owned by the |
-// ChannelImpl implementation. The class lives entirely on the impl thread. |
-class CC_EXPORT ProxyImpl : public NON_EXPORTED_BASE(LayerTreeHostImplClient), |
- public NON_EXPORTED_BASE(SchedulerClient) { |
- public: |
- static scoped_ptr<ProxyImpl> Create( |
- ChannelImpl* channel_impl, |
- LayerTreeHost* layer_tree_host, |
- TaskRunnerProvider* task_runner_provider, |
- scoped_ptr<BeginFrameSource> external_begin_frame_source); |
- |
- ~ProxyImpl() override; |
- |
- // Virtual for testing. |
- virtual void SetThrottleFrameProductionOnImpl(bool throttle); |
+ // Callback for impl side commands received from the channel. |
+ virtual void SetThrottleFrameProductionOnImpl(bool throttle) = 0; |
virtual void UpdateTopControlsStateOnImpl(TopControlsState constraints, |
TopControlsState current, |
- bool animate); |
- virtual void InitializeOutputSurfaceOnImpl(OutputSurface* output_surface); |
- virtual void MainThreadHasStoppedFlingingOnImpl(); |
- virtual void SetInputThrottledUntilCommitOnImpl(bool is_throttled); |
- virtual void SetDeferCommitsOnImpl(bool defer_commits) const; |
- virtual void SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect); |
- virtual void SetNeedsCommitOnImpl(); |
+ bool animate) = 0; |
+ virtual void InitializeOutputSurfaceOnImpl(OutputSurface* output_surface) = 0; |
+ virtual void MainThreadHasStoppedFlingingOnImpl() = 0; |
+ virtual void SetInputThrottledUntilCommitOnImpl(bool is_throttled) = 0; |
+ virtual void SetDeferCommitsOnImpl(bool defer_commits) const = 0; |
+ virtual void SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) = 0; |
+ virtual void SetNeedsCommitOnImpl() = 0; |
+ virtual void FinishAllRenderingOnImpl(CompletionEvent* completion) = 0; |
+ virtual void SetVisibleOnImpl(bool visible) = 0; |
+ virtual void ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) = 0; |
+ virtual void FinishGLOnImpl(CompletionEvent* completion) = 0; |
+ virtual void MainFrameWillHappenOnImplForTesting( |
+ CompletionEvent* completion, |
+ bool* main_frame_will_happen) = 0; |
virtual void BeginMainFrameAbortedOnImpl( |
CommitEarlyOutReason reason, |
- base::TimeTicks main_thread_start_time); |
- virtual void FinishAllRenderingOnImpl(CompletionEvent* completion); |
- virtual void SetVisibleOnImpl(bool visible); |
- virtual void ReleaseOutputSurfaceOnImpl(CompletionEvent* completion); |
- virtual void FinishGLOnImpl(CompletionEvent* completion); |
- virtual void MainFrameWillHappenOnImplForTesting( |
- CompletionEvent* completion, |
- bool* main_frame_will_happen); |
+ base::TimeTicks main_thread_start_time) = 0; |
virtual void StartCommitOnImpl(CompletionEvent* completion, |
LayerTreeHost* layer_tree_host, |
base::TimeTicks main_thread_start_time, |
- bool hold_commit_for_activation); |
+ bool hold_commit_for_activation) = 0; |
+ virtual void InitializeImplOnImpl(CompletionEvent* completion, |
+ LayerTreeHost* layer_tree_host) = 0; |
+ virtual void LayerTreeHostClosedOnImpl(CompletionEvent* completion) = 0; |
+ |
+ // TODO(khushalsagar): Rename as GetWeakPtr() once ThreadProxy is split. |
+ virtual base::WeakPtr<ProxyImpl> GetImplWeakPtr() = 0; |
protected: |
- // protected for testing. |
- ProxyImpl(ChannelImpl* channel_impl, |
- LayerTreeHost* layer_tree_host, |
- TaskRunnerProvider* task_runner_provider, |
- scoped_ptr<BeginFrameSource> external_begin_frame_source); |
- |
- private: |
- // The members of this struct should be accessed on the impl thread only when |
- // the main thread is blocked for a commit. |
- struct BlockedMainCommitOnly { |
- BlockedMainCommitOnly(); |
- ~BlockedMainCommitOnly(); |
- LayerTreeHost* layer_tree_host; |
- }; |
- |
- friend class ProxyImplForTest; |
- |
- // LayerTreeHostImplClient implementation |
- void UpdateRendererCapabilitiesOnImplThread() override; |
- void DidLoseOutputSurfaceOnImplThread() override; |
- void CommitVSyncParameters(base::TimeTicks timebase, |
- base::TimeDelta interval) override; |
- void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override; |
- void DidSwapBuffersOnImplThread() override; |
- void DidSwapBuffersCompleteOnImplThread() override; |
- void OnResourcelessSoftareDrawStateChanged(bool resourceless_draw) override; |
- void OnCanDrawStateChanged(bool can_draw) override; |
- void NotifyReadyToActivate() override; |
- void NotifyReadyToDraw() override; |
- // Please call these 3 functions through |
- // LayerTreeHostImpl's SetNeedsRedraw(), SetNeedsRedrawRect() and |
- // SetNeedsOneBeginImplFrame(). |
- void SetNeedsRedrawOnImplThread() override; |
- void SetNeedsRedrawRectOnImplThread(const gfx::Rect& dirty_rect) override; |
- void SetNeedsOneBeginImplFrameOnImplThread() override; |
- void SetNeedsPrepareTilesOnImplThread() override; |
- void SetNeedsCommitOnImplThread() override; |
- void SetVideoNeedsBeginFrames(bool needs_begin_frames) override; |
- void PostAnimationEventsToMainThreadOnImplThread( |
- scoped_ptr<AnimationEventsVector> queue) override; |
- bool IsInsideDraw() override; |
- void RenewTreePriority() override; |
- void PostDelayedAnimationTaskOnImplThread(const base::Closure& task, |
- base::TimeDelta delay) override; |
- void DidActivateSyncTree() override; |
- void WillPrepareTiles() override; |
- void DidPrepareTiles() override; |
- void DidCompletePageScaleAnimationOnImplThread() override; |
- void OnDrawForOutputSurface() override; |
- // This should only be called by LayerTreeHostImpl::PostFrameTimingEvents. |
- void PostFrameTimingEventsOnImplThread( |
- scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
- scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) |
- override; |
- |
- // SchedulerClient implementation |
- void WillBeginImplFrame(const BeginFrameArgs& args) override; |
- void DidFinishImplFrame() override; |
- void ScheduledActionSendBeginMainFrame(const BeginFrameArgs& args) override; |
- DrawResult ScheduledActionDrawAndSwapIfPossible() override; |
- DrawResult ScheduledActionDrawAndSwapForced() override; |
- void ScheduledActionCommit() override; |
- void ScheduledActionActivateSyncTree() override; |
- void ScheduledActionBeginOutputSurfaceCreation() override; |
- void ScheduledActionPrepareTiles() override; |
- void ScheduledActionInvalidateOutputSurface() override; |
- void SendBeginFramesToChildren(const BeginFrameArgs& args) override; |
- void SendBeginMainFrameNotExpectedSoon() override; |
- |
- DrawResult DrawAndSwapInternal(bool forced_draw); |
- |
- bool IsImplThread() const; |
- bool IsMainThreadBlocked() const; |
- |
- const int layer_tree_host_id_; |
- |
- scoped_ptr<Scheduler> scheduler_; |
- |
- // Set when the main thread is waiting on a pending tree activation. |
- bool next_commit_waits_for_activation_; |
- |
- // Set when the main thread is waiting on a commit to complete or on a |
- // pending tree activation. |
- CompletionEvent* commit_completion_event_; |
- |
- // 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_; |
- |
- TaskRunnerProvider* task_runner_provider_; |
- |
- DelayedUniqueNotifier smoothness_priority_expiration_notifier_; |
- |
- scoped_ptr<BeginFrameSource> external_begin_frame_source_; |
- |
- RenderingStatsInstrumentation* rendering_stats_instrumentation_; |
- |
- // Values used to keep track of frame durations. Used only in frame timing. |
- BeginFrameArgs last_begin_main_frame_args_; |
- BeginFrameArgs last_processed_begin_main_frame_args_; |
- |
- scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl_; |
- |
- ChannelImpl* channel_impl_; |
- |
- // Use accessors instead of this variable directly. |
- BlockedMainCommitOnly main_thread_blocked_commit_vars_unsafe_; |
- BlockedMainCommitOnly& blocked_main_commit(); |
- |
- DISALLOW_COPY_AND_ASSIGN(ProxyImpl); |
+ virtual ~ProxyImpl() {} |
}; |
} // namespace cc |