Chromium Code Reviews| Index: remoting/client/renderer_facade_proxy.h |
| diff --git a/remoting/client/renderer_facade_proxy.h b/remoting/client/renderer_facade_proxy.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..411ed6795bb4c93ab7f2a97546f64a12b4777122 |
| --- /dev/null |
| +++ b/remoting/client/renderer_facade_proxy.h |
| @@ -0,0 +1,51 @@ |
| +// Copyright 2017 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 REMOTING_CLIENT_RENDERER_FACADE_PROXY_H_ |
| +#define REMOTING_CLIENT_RENDERER_FACADE_PROXY_H_ |
| + |
| +#include "base/memory/ref_counted.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "base/single_thread_task_runner.h" |
| +#include "remoting/client/renderer_facade.h" |
| + |
| +namespace remoting { |
| + |
| +class QueuedTaskPoster; |
| + |
| +// A class to proxy calls to a RendererFacade from one thread to another. |
| +// TODO(yuweih): This should be removed once we have moved Drawables out of |
| +// GlRenderer. |
| +class RendererFacadeProxy : public RendererFacade { |
|
nicholss
2017/05/15 15:49:40
I am not sure I understand the benefit to having b
Yuwei
2017/05/15 18:38:29
I could like to have a proxy that simply wraps the
|
| + public: |
| + // stub: The render stub being wrapped. |
| + // task_runner: The task runner that |stub| should be run on. |
| + RendererFacadeProxy(base::WeakPtr<RendererFacade> renderer, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
| + ~RendererFacadeProxy() override; |
| + |
| + // RendererFacade overrides. |
| + void SetTransformation(const ViewMatrix& transformation) override; |
| + void SetCursorPosition(float x, float y) override; |
| + void SetCursorVisibility(bool visible) override; |
| + void StartInputFeedback(float x, float y, float diameter) override; |
| + |
| + private: |
| + // Runs the |task| on the thread of |task_runner_|. All tasks run with |
| + // |needs_synchronization| set to true inside the same tick will be run on |
| + // |task_runner_| within the same tick. |
| + void RunTaskOnProperThread(const base::Closure& task, |
| + bool needs_synchronization); |
| + |
| + base::WeakPtr<RendererFacade> renderer_; |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + std::unique_ptr<remoting::QueuedTaskPoster> ui_task_poster_; |
| + |
| + // RenderStubProxy is neither copyable nor movable. |
| + RendererFacadeProxy(const RendererFacadeProxy&) = delete; |
| + RendererFacadeProxy& operator=(const RendererFacadeProxy&) = delete; |
| +}; |
| + |
| +} // namespace remoting |
| +#endif // REMOTING_CLIENT_RENDERER_FACADE_PROXY_H_ |