// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_TREES_REMOTE_CHANNEL_MAIN_H_ #define CC_TREES_REMOTE_CHANNEL_MAIN_H_ #include "base/macros.h" #include "cc/base/cc_export.h" #include "cc/trees/channel_main.h" #include "cc/trees/remote_proto_channel.h" #include "cc/trees/task_runner_provider.h" namespace cc { class ProxyMain; namespace proto { class CompositorMessage; class CompositorMessageToMain; } class CC_EXPORT RemoteChannelMain : public ChannelMain, public RemoteProtoChannel::ProtoReceiver { public: static scoped_ptr Create( RemoteProtoChannel* remote_proto_channel, ProxyMain* proxy_main, TaskRunnerProvider* task_runner_provider); ~RemoteChannelMain() override; // ChannelMain implementation void UpdateTopControlsStateOnImpl(TopControlsState constraints, TopControlsState current, bool animate) override; void InitializeOutputSurfaceOnImpl(OutputSurface* output_surface) override; void MainThreadHasStoppedFlingingOnImpl() override; void SetInputThrottledUntilCommitOnImpl(bool is_throttled) override; void SetDeferCommitsOnImpl(bool defer_commits) override; void FinishAllRenderingOnImpl(CompletionEvent* completion) override; void SetVisibleOnImpl(bool visible) override; void ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) override; void MainFrameWillHappenOnImplForTesting( CompletionEvent* completion, bool* main_frame_will_happen) override; void SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) override; void SetNeedsCommitOnImpl() override; void BeginMainFrameAbortedOnImpl( CommitEarlyOutReason reason, base::TimeTicks main_thread_start_time) override; void StartCommitOnImpl(CompletionEvent* completion, LayerTreeHost* layer_tree_host, base::TimeTicks main_thread_start_time, bool hold_commit_for_activation) override; void SynchronouslyInitializeImpl( LayerTreeHost* layer_tree_host, scoped_ptr external_begin_frame_source) override; void SynchronouslyCloseImpl() override; // RemoteProtoChannel::ProtoReceiver implementation void OnProtoReceived(scoped_ptr proto) override; protected: RemoteChannelMain(RemoteProtoChannel* remote_proto_channel, ProxyMain* proxy_main, TaskRunnerProvider* task_runner_provider); private: void SendMessageProto(const proto::CompositorMessage& proto); void HandleProto(const proto::CompositorMessageToMain& proto); void DidCommitAndDrawFrame(); void DidCompleteSwapBuffers(); base::SingleThreadTaskRunner* MainThreadTaskRunner() const; RemoteProtoChannel* remote_proto_channel_; ProxyMain* proxy_main_; TaskRunnerProvider* task_runner_provider_; bool initialized_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(RemoteChannelMain); }; } // namespace cc #endif // CC_TREES_REMOTE_CHANNEL_MAIN_H_