1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_MUS_GLES2_COMMAND_BUFFER_IMPL_H_
6 #define COMPONENTS_MUS_GLES2_COMMAND_BUFFER_IMPL_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h"
10 #include "base/single_thread_task_runner.h"
11 #include "components/mus/public/interfaces/command_buffer.mojom.h"
12 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
16 class CommandBufferDriver
;
17 class CommandBufferImplObserver
;
20 // This class listens to the CommandBuffer message pipe on a low-latency thread
21 // so that we can insert sync points without blocking on the GL driver. It
22 // forwards most method calls to the CommandBufferDriver, which runs on the
23 // same thread as the native viewport.
24 class CommandBufferImpl
: public mojo::CommandBuffer
{
26 CommandBufferImpl(mojo::InterfaceRequest
<CommandBuffer
> request
,
27 scoped_refptr
<GpuState
> gpu_state
,
28 scoped_ptr
<CommandBufferDriver
> driver
);
30 // mojo::CommandBuffer:
31 void Initialize(mojo::CommandBufferSyncClientPtr sync_client
,
32 mojo::CommandBufferSyncPointClientPtr sync_point_client
,
33 mojo::CommandBufferLostContextObserverPtr loss_observer
,
34 mojo::ScopedSharedBufferHandle shared_state
,
35 mojo::Array
<int32_t> attribs
) override
;
36 void SetGetBuffer(int32_t buffer
) override
;
37 void Flush(int32_t put_offset
) override
;
38 void MakeProgress(int32_t last_get_offset
) override
;
39 void RegisterTransferBuffer(int32_t id
,
40 mojo::ScopedSharedBufferHandle transfer_buffer
,
41 uint32_t size
) override
;
42 void DestroyTransferBuffer(int32_t id
) override
;
43 void InsertSyncPoint(bool retire
) override
;
44 void RetireSyncPoint(uint32_t sync_point
) override
;
45 void Echo(const mojo::Callback
<void()>& callback
) override
;
46 void CreateImage(int32_t id
,
47 mojo::ScopedHandle memory_handle
,
51 int32_t internal_format
) override
;
52 void DestroyImage(int32_t id
) override
;
54 void DidLoseContext();
56 void set_observer(CommandBufferImplObserver
* observer
) {
61 class CommandBufferDriverClientImpl
;
63 friend class base::DeleteHelper
<CommandBufferImpl
>;
65 ~CommandBufferImpl() override
;
67 void BindToRequest(mojo::InterfaceRequest
<CommandBuffer
> request
);
69 void OnConnectionError();
71 scoped_refptr
<GpuState
> gpu_state_
;
72 scoped_refptr
<base::SingleThreadTaskRunner
> driver_task_runner_
;
73 scoped_ptr
<CommandBufferDriver
> driver_
;
74 mojo::CommandBufferSyncPointClientPtr sync_point_client_
;
75 mojo::Binding
<CommandBuffer
> binding_
;
76 CommandBufferImplObserver
* observer_
;
77 base::WeakPtrFactory
<CommandBufferImpl
> weak_ptr_factory_
;
79 DISALLOW_COPY_AND_ASSIGN(CommandBufferImpl
);
84 #endif // COMPONENTS_MUS_GLES2_COMMAND_BUFFER_IMPL_H_