OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/mus/gles2/command_buffer_impl.h" | 5 #include "components/mus/gles2/command_buffer_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "components/mus/gles2/command_buffer_driver.h" | 10 #include "components/mus/gles2/command_buffer_driver.h" |
11 #include "components/mus/gles2/command_buffer_impl_observer.h" | |
12 #include "components/mus/gles2/command_buffer_type_conversions.h" | 11 #include "components/mus/gles2/command_buffer_type_conversions.h" |
13 #include "components/mus/gles2/gpu_state.h" | 12 #include "components/mus/gles2/gpu_state.h" |
14 #include "gpu/command_buffer/service/sync_point_manager.h" | 13 #include "gpu/command_buffer/service/sync_point_manager.h" |
15 | 14 |
16 namespace mus { | 15 namespace mus { |
17 | 16 |
18 namespace { | 17 namespace { |
19 | 18 |
20 uint64_t g_next_command_buffer_id = 0; | 19 uint64_t g_next_command_buffer_id = 0; |
21 | 20 |
(...skipping 24 matching lines...) Expand all Loading... |
46 void UpdateVSyncParameters(int64_t timebase, int64_t interval) override {} | 45 void UpdateVSyncParameters(int64_t timebase, int64_t interval) override {} |
47 | 46 |
48 CommandBufferImpl* command_buffer_; | 47 CommandBufferImpl* command_buffer_; |
49 | 48 |
50 DISALLOW_COPY_AND_ASSIGN(CommandBufferDriverClientImpl); | 49 DISALLOW_COPY_AND_ASSIGN(CommandBufferDriverClientImpl); |
51 }; | 50 }; |
52 | 51 |
53 CommandBufferImpl::CommandBufferImpl( | 52 CommandBufferImpl::CommandBufferImpl( |
54 mojo::InterfaceRequest<mus::mojom::CommandBuffer> request, | 53 mojo::InterfaceRequest<mus::mojom::CommandBuffer> request, |
55 scoped_refptr<GpuState> gpu_state) | 54 scoped_refptr<GpuState> gpu_state) |
56 : gpu_state_(gpu_state), observer_(nullptr) { | 55 : gpu_state_(gpu_state) { |
57 // Bind |CommandBufferImpl| to the |request| in the GPU control thread. | 56 // Bind |CommandBufferImpl| to the |request| in the GPU control thread. |
58 gpu_state_->control_task_runner()->PostTask( | 57 gpu_state_->control_task_runner()->PostTask( |
59 FROM_HERE, | 58 FROM_HERE, |
60 base::Bind(&CommandBufferImpl::BindToRequest, | 59 base::Bind(&CommandBufferImpl::BindToRequest, |
61 base::Unretained(this), base::Passed(&request))); | 60 base::Unretained(this), base::Passed(&request))); |
62 } | 61 } |
63 | 62 |
64 void CommandBufferImpl::DidLoseContext(uint32_t reason) { | 63 void CommandBufferImpl::DidLoseContext(uint32_t reason) { |
65 driver_->set_client(nullptr); | 64 driver_->set_client(nullptr); |
66 loss_observer_->DidLoseContext(reason); | 65 client_->Destroyed(reason, gpu::error::kLostContext); |
67 } | 66 } |
68 | 67 |
69 CommandBufferImpl::~CommandBufferImpl() { | 68 CommandBufferImpl::~CommandBufferImpl() { |
70 if (observer_) | |
71 observer_->OnCommandBufferImplDestroyed(); | |
72 } | 69 } |
73 | 70 |
74 void CommandBufferImpl::Initialize( | 71 void CommandBufferImpl::Initialize( |
75 mus::mojom::CommandBufferLostContextObserverPtr loss_observer, | 72 mus::mojom::CommandBufferClientPtr client, |
76 mojo::ScopedSharedBufferHandle shared_state, | 73 mojo::ScopedSharedBufferHandle shared_state, |
77 mojo::Array<int32_t> attribs, | 74 mojo::Array<int32_t> attribs, |
78 const mojom::CommandBuffer::InitializeCallback& callback) { | 75 const mojom::CommandBuffer::InitializeCallback& callback) { |
79 gpu_state_->command_buffer_task_runner()->task_runner()->PostTask( | 76 gpu_state_->command_buffer_task_runner()->task_runner()->PostTask( |
80 FROM_HERE, | 77 FROM_HERE, |
81 base::Bind(&CommandBufferImpl::InitializeOnGpuThread, | 78 base::Bind(&CommandBufferImpl::InitializeOnGpuThread, |
82 base::Unretained(this), base::Passed(&loss_observer), | 79 base::Unretained(this), base::Passed(&client), |
83 base::Passed(&shared_state), base::Passed(&attribs), | 80 base::Passed(&shared_state), base::Passed(&attribs), |
84 base::Bind(&RunInitializeCallback, callback))); | 81 base::Bind(&RunInitializeCallback, callback))); |
85 } | 82 } |
86 | 83 |
87 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { | 84 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { |
88 gpu_state_->command_buffer_task_runner()->PostTask( | 85 gpu_state_->command_buffer_task_runner()->PostTask( |
89 driver_.get(), base::Bind(&CommandBufferImpl::SetGetBufferOnGpuThread, | 86 driver_.get(), base::Bind(&CommandBufferImpl::SetGetBufferOnGpuThread, |
90 base::Unretained(this), buffer)); | 87 base::Unretained(this), buffer)); |
91 } | 88 } |
92 | 89 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 base::Unretained(this), id, base::Passed(&memory_handle), type, | 136 base::Unretained(this), id, base::Passed(&memory_handle), type, |
140 base::Passed(&size), format, internal_format)); | 137 base::Passed(&size), format, internal_format)); |
141 } | 138 } |
142 | 139 |
143 void CommandBufferImpl::DestroyImage(int32_t id) { | 140 void CommandBufferImpl::DestroyImage(int32_t id) { |
144 gpu_state_->command_buffer_task_runner()->PostTask( | 141 gpu_state_->command_buffer_task_runner()->PostTask( |
145 driver_.get(), base::Bind(&CommandBufferImpl::DestroyImageOnGpuThread, | 142 driver_.get(), base::Bind(&CommandBufferImpl::DestroyImageOnGpuThread, |
146 base::Unretained(this), id)); | 143 base::Unretained(this), id)); |
147 } | 144 } |
148 | 145 |
| 146 void CommandBufferImpl::CreateStreamTexture( |
| 147 uint32_t client_texture_id, |
| 148 const mojom::CommandBuffer::CreateStreamTextureCallback& callback) { |
| 149 NOTIMPLEMENTED(); |
| 150 } |
| 151 |
| 152 void CommandBufferImpl::ProduceFrontBuffer(const gpu::Mailbox& mailbox) { |
| 153 NOTIMPLEMENTED(); |
| 154 } |
| 155 |
| 156 void CommandBufferImpl::SignalQuery(uint32_t query, uint32_t signal_id) { |
| 157 NOTIMPLEMENTED(); |
| 158 } |
| 159 |
| 160 void CommandBufferImpl::SignalSyncToken(const gpu::SyncToken& sync_token, |
| 161 uint32_t signal_id) { |
| 162 NOTIMPLEMENTED(); |
| 163 } |
| 164 |
| 165 void CommandBufferImpl::WaitForGetOffsetInRange( |
| 166 int32_t start, int32_t end, |
| 167 const mojom::CommandBuffer::WaitForGetOffsetInRangeCallback& callback) { |
| 168 NOTIMPLEMENTED(); |
| 169 } |
| 170 |
| 171 void CommandBufferImpl::WaitForTokenInRange( |
| 172 int32_t start, int32_t end, |
| 173 const mojom::CommandBuffer::WaitForGetOffsetInRangeCallback& callback) { |
| 174 NOTIMPLEMENTED(); |
| 175 } |
| 176 |
149 void CommandBufferImpl::BindToRequest( | 177 void CommandBufferImpl::BindToRequest( |
150 mojo::InterfaceRequest<mus::mojom::CommandBuffer> request) { | 178 mojo::InterfaceRequest<mus::mojom::CommandBuffer> request) { |
151 binding_.reset( | 179 binding_.reset( |
152 new mojo::Binding<mus::mojom::CommandBuffer>(this, std::move(request))); | 180 new mojo::Binding<mus::mojom::CommandBuffer>(this, std::move(request))); |
153 binding_->set_connection_error_handler([this]() { OnConnectionError(); }); | 181 binding_->set_connection_error_handler([this]() { OnConnectionError(); }); |
154 } | 182 } |
155 | 183 |
156 void CommandBufferImpl::InitializeOnGpuThread( | 184 void CommandBufferImpl::InitializeOnGpuThread( |
157 mojom::CommandBufferLostContextObserverPtr loss_observer, | 185 mojom::CommandBufferClientPtr client, |
158 mojo::ScopedSharedBufferHandle shared_state, | 186 mojo::ScopedSharedBufferHandle shared_state, |
159 mojo::Array<int32_t> attribs, | 187 mojo::Array<int32_t> attribs, |
160 const base::Callback< | 188 const base::Callback< |
161 void(mojom::CommandBufferInitializeResultPtr)>& callback) { | 189 void(mojom::CommandBufferInitializeResultPtr)>& callback) { |
162 DCHECK(!driver_); | 190 DCHECK(!driver_); |
163 driver_.reset(new CommandBufferDriver( | 191 driver_.reset(new CommandBufferDriver( |
164 gpu::CommandBufferNamespace::MOJO, ++g_next_command_buffer_id, | 192 gpu::CommandBufferNamespace::MOJO, ++g_next_command_buffer_id, |
165 gfx::kNullAcceleratedWidget, gpu_state_)); | 193 gfx::kNullAcceleratedWidget, gpu_state_)); |
166 driver_->set_client(make_scoped_ptr(new CommandBufferDriverClientImpl(this))); | 194 driver_->set_client(make_scoped_ptr(new CommandBufferDriverClientImpl(this))); |
167 loss_observer_ = mojo::MakeProxy(loss_observer.PassInterface()); | 195 client_ = mojo::MakeProxy(client.PassInterface()); |
168 bool result = | 196 bool result = |
169 driver_->Initialize(std::move(shared_state), std::move(attribs)); | 197 driver_->Initialize(std::move(shared_state), std::move(attribs)); |
170 mojom::CommandBufferInitializeResultPtr initialize_result; | 198 mojom::CommandBufferInitializeResultPtr initialize_result; |
171 if (result) { | 199 if (result) { |
172 initialize_result = mojom::CommandBufferInitializeResult::New(); | 200 initialize_result = mojom::CommandBufferInitializeResult::New(); |
173 initialize_result->command_buffer_namespace = driver_->GetNamespaceID(); | 201 initialize_result->command_buffer_namespace = driver_->GetNamespaceID(); |
174 initialize_result->command_buffer_id = driver_->GetCommandBufferID(); | 202 initialize_result->command_buffer_id = driver_->GetCommandBufferID(); |
175 initialize_result->capabilities = driver_->GetCapabilities(); | 203 initialize_result->capabilities = driver_->GetCapabilities(); |
176 } | 204 } |
177 gpu_state_->control_task_runner()->PostTask( | 205 gpu_state_->control_task_runner()->PostTask( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 driver_.get(), base::Bind(&CommandBufferImpl::DeleteOnGpuThread, | 283 driver_.get(), base::Bind(&CommandBufferImpl::DeleteOnGpuThread, |
256 base::Unretained(this))); | 284 base::Unretained(this))); |
257 } | 285 } |
258 | 286 |
259 bool CommandBufferImpl::DeleteOnGpuThread() { | 287 bool CommandBufferImpl::DeleteOnGpuThread() { |
260 delete this; | 288 delete this; |
261 return true; | 289 return true; |
262 } | 290 } |
263 | 291 |
264 } // namespace mus | 292 } // namespace mus |
OLD | NEW |