Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2583)

Unified Diff: cc/trees/remote_channel_impl.h

Issue 1513643010: cc:: Add remote mode to the compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/trees/remote_channel_impl.h
diff --git a/cc/trees/remote_channel_impl.h b/cc/trees/remote_channel_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..5d264aef7059d260afcdbc1fa5374870f8809e45
--- /dev/null
+++ b/cc/trees/remote_channel_impl.h
@@ -0,0 +1,136 @@
+// Copyright 2015 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_IMPL_H_
+#define CC_TREES_REMOTE_CHANNEL_IMPL_H_
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "cc/base/cc_export.h"
+#include "cc/base/completion_event.h"
+#include "cc/raster/task_graph_runner.h"
+#include "cc/trees/channel_impl.h"
+#include "cc/trees/proxy_impl.h"
+#include "cc/trees/remote_proto_channel.h"
+
+namespace cc {
+class LayerTreeHost;
+class LayerTreeSettings;
+class RemoteChannelHost;
+
+namespace proto {
+class CompositorMessage;
+class CompositorMessageToImpl;
+class CompositorMessageToMain;
+class InitializeImpl;
+}
+
+class CC_EXPORT RemoteChannelImpl : public ChannelImpl {
+ public:
+ static scoped_ptr<RemoteChannelImpl> Create(
+ RemoteChannelHost* remote_channel_host,
+ TaskGraphRunner* task_graph_runner,
+ const LayerTreeSettings& settings,
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner);
+
+ ~RemoteChannelImpl() override;
+
+ void Initialize();
+
+ void HandleProto(const proto::CompositorMessageToImpl& proto);
+
+ // Should be called on impl thread only.
+ ProxyImpl* GetProxyImplForTesting() const;
+
+ protected:
+ RemoteChannelImpl(
+ RemoteChannelHost* remote_channel_host,
+ TaskGraphRunner* task_graph_runner,
+ const LayerTreeSettings& settings,
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner);
+
+ // 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);
+
+ bool MainFrameWillHappenForTesting();
+
+ private:
+ struct MainThreadOnly {
+ RemoteChannelHost* remote_channel_host;
+ scoped_ptr<LayerTreeHost> layer_tree_host;
David Trainor- moved to gerrit 2015/12/11 17:13:44 Comment about the specifics/expectations of this L
Khushal 2015/12/11 22:49:37 Done.
+
+ MainThreadOnly(
+ RemoteChannelImpl* remote_channel_impl,
+ RemoteChannelHost* remote_channel_host,
+ TaskGraphRunner* task_graph_runner,
+ const LayerTreeSettings& settings,
+ scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner);
+ ~MainThreadOnly();
+ };
+
+ struct CompositorThreadOnly {
+ scoped_ptr<ProxyImpl> proxy_impl;
+ scoped_ptr<base::WeakPtrFactory<ProxyImpl>> proxy_impl_weak_factory;
+
+ CompositorThreadOnly();
+ ~CompositorThreadOnly();
+ };
+
+ // Called on impl thread.
+ // ChannelImpl implementation
+ void DidCompleteSwapBuffers() override;
+ void SetRendererCapabilitiesMainCopy(
+ const RendererCapabilities& capabilities) override;
+ void BeginMainFrameNotExpectedSoon() override;
+ void DidCommitAndDrawFrame() override;
+ void SetAnimationEvents(scoped_ptr<AnimationEventsVector> queue) override;
+ void DidLoseOutputSurface() override;
+ void RequestNewOutputSurface() override;
+ void DidInitializeOutputSurface(
+ bool success,
+ const RendererCapabilities& capabilities) override;
+ void DidCompletePageScaleAnimation() override;
+ void PostFrameTimingEventsOnMain(
+ scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
+ scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events)
+ override;
+ void BeginMainFrame(
+ scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) override;
+
+ // Called on impl thread.
David Trainor- moved to gerrit 2015/12/11 17:13:44 Do you need this if you have it above? I'm fine w
Khushal 2015/12/11 22:49:37 I wasn't sure if having the comment only above the
+ void InitializeImplOnImpl(CompletionEvent* completion,
+ LayerTreeHost* layer_tree_host);
+ void ShutdownImplOnImpl(CompletionEvent* completion);
+
+ // Called on main thread.
+ void MainThreadHasStoppedFlinging();
+
+ MainThreadOnly& main();
+ CompositorThreadOnly& impl();
+ const CompositorThreadOnly& impl() const;
+
+ base::SingleThreadTaskRunner* MainThreadTaskRunner() const;
+ base::SingleThreadTaskRunner* ImplThreadTaskRunner() const;
+
+ // use accessors instead of these variables directly
+ MainThreadOnly main_thread_vars_unsafe_;
+ CompositorThreadOnly compositor_thread_vars_unsafe_;
+
+ TaskRunnerProvider* task_runner_provider_;
+
+ base::WeakPtr<ProxyImpl> proxy_impl_weak_ptr_;
+
+ DISALLOW_COPY_AND_ASSIGN(RemoteChannelImpl);
+};
+
+} // namespace cc
+
+#endif // CC_TREES_REMOTE_CHANNEL_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698