Index: mojo/services/gles2/command_buffer_impl.h |
diff --git a/mojo/services/gles2/command_buffer_impl.h b/mojo/services/gles2/command_buffer_impl.h |
index 44ff14ca5cc7d50eebf1bd34b44234dad8fe21f6..bce88bfbaa13d10e32a7db09b3fc76cb30ad3ad5 100644 |
--- a/mojo/services/gles2/command_buffer_impl.h |
+++ b/mojo/services/gles2/command_buffer_impl.h |
@@ -6,35 +6,47 @@ |
#define MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_ |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/single_thread_task_runner.h" |
#include "mojo/public/cpp/bindings/strong_binding.h" |
#include "mojo/services/public/interfaces/gpu/command_buffer.mojom.h" |
namespace mojo { |
class CommandBufferDriver; |
+// This class listens to the CommandBuffer message pipe on a low-latency thread |
+// so that we can insert sync points without blocking on the GL driver. It |
+// forwards most method calls to the CommandBufferDriver, which runs on the |
+// same thread as the native viewport. |
class CommandBufferImpl : public CommandBuffer { |
public: |
- CommandBufferImpl(InterfaceRequest<CommandBuffer> request, |
- scoped_ptr<CommandBufferDriver> driver); |
+ CommandBufferImpl( |
+ InterfaceRequest<CommandBuffer> request, |
+ scoped_refptr<base::SingleThreadTaskRunner> control_task_runner, |
+ scoped_ptr<CommandBufferDriver> driver); |
~CommandBufferImpl() override; |
void Initialize(CommandBufferSyncClientPtr sync_client, |
- mojo::ScopedSharedBufferHandle shared_state) override; |
+ ScopedSharedBufferHandle shared_state) override; |
void SetGetBuffer(int32_t buffer) override; |
void Flush(int32_t put_offset) override; |
void MakeProgress(int32_t last_get_offset) override; |
void RegisterTransferBuffer(int32_t id, |
- mojo::ScopedSharedBufferHandle transfer_buffer, |
+ ScopedSharedBufferHandle transfer_buffer, |
uint32_t size) override; |
void DestroyTransferBuffer(int32_t id) override; |
void Echo(const Callback<void()>& callback) override; |
private: |
+ void BindToRequest(InterfaceRequest<CommandBuffer> request); |
void OnContextLost(int32_t reason); |
- StrongBinding<CommandBuffer> binding_; |
+ scoped_refptr<base::SingleThreadTaskRunner> driver_task_runner_; |
scoped_ptr<CommandBufferDriver> driver_; |
+ StrongBinding<CommandBuffer> binding_; |
+ base::WeakPtrFactory<CommandBufferImpl> weak_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CommandBufferImpl); |
}; |