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

Side by Side Diff: components/gles2/command_buffer_driver.cc

Issue 1139673003: Make Mandoline shut down cleanly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 7 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/gles2/command_buffer_driver.h" 5 #include "components/gles2/command_buffer_driver.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/memory/shared_memory.h" 9 #include "base/memory/shared_memory.h"
10 #include "components/gles2/command_buffer_type_conversions.h" 10 #include "components/gles2/command_buffer_type_conversions.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 CommandBufferDriver::Client::~Client() { 50 CommandBufferDriver::Client::~Client() {
51 } 51 }
52 52
53 CommandBufferDriver::CommandBufferDriver( 53 CommandBufferDriver::CommandBufferDriver(
54 gfx::GLShareGroup* share_group, 54 gfx::GLShareGroup* share_group,
55 gpu::gles2::MailboxManager* mailbox_manager, 55 gpu::gles2::MailboxManager* mailbox_manager,
56 gpu::SyncPointManager* sync_point_manager) 56 gpu::SyncPointManager* sync_point_manager)
57 : CommandBufferDriver(gfx::kNullAcceleratedWidget, 57 : CommandBufferDriver(gfx::kNullAcceleratedWidget,
58 share_group, 58 share_group,
59 mailbox_manager, 59 mailbox_manager,
60 sync_point_manager) { 60 sync_point_manager,
61 base::Callback<void(CommandBufferDriver*)>()) {
61 } 62 }
62 63
63 CommandBufferDriver::CommandBufferDriver( 64 CommandBufferDriver::CommandBufferDriver(
64 gfx::AcceleratedWidget widget, 65 gfx::AcceleratedWidget widget,
65 gfx::GLShareGroup* share_group, 66 gfx::GLShareGroup* share_group,
66 gpu::gles2::MailboxManager* mailbox_manager, 67 gpu::gles2::MailboxManager* mailbox_manager,
67 gpu::SyncPointManager* sync_point_manager) 68 gpu::SyncPointManager* sync_point_manager,
69 const base::Callback<void(CommandBufferDriver*)>& destruct_callback)
68 : client_(nullptr), 70 : client_(nullptr),
69 widget_(widget), 71 widget_(widget),
70 share_group_(share_group), 72 share_group_(share_group),
71 mailbox_manager_(mailbox_manager), 73 mailbox_manager_(mailbox_manager),
72 sync_point_manager_(sync_point_manager), 74 sync_point_manager_(sync_point_manager),
75 destruct_callback_(destruct_callback),
73 weak_factory_(this) { 76 weak_factory_(this) {
74 } 77 }
75 78
76 CommandBufferDriver::~CommandBufferDriver() { 79 CommandBufferDriver::~CommandBufferDriver() {
77 if (decoder_) { 80 DestroyDecoder();
78 bool have_context = decoder_->MakeCurrent(); 81 if (!destruct_callback_.is_null())
79 decoder_->Destroy(have_context); 82 destruct_callback_.Run(this);
80 }
81 } 83 }
82 84
83 void CommandBufferDriver::Initialize( 85 void CommandBufferDriver::Initialize(
84 mojo::CommandBufferSyncClientPtr sync_client, 86 mojo::CommandBufferSyncClientPtr sync_client,
85 mojo::CommandBufferLostContextObserverPtr loss_observer, 87 mojo::CommandBufferLostContextObserverPtr loss_observer,
86 mojo::ScopedSharedBufferHandle shared_state) { 88 mojo::ScopedSharedBufferHandle shared_state) {
87 sync_client_ = sync_client.Pass(); 89 sync_client_ = sync_client.Pass();
88 loss_observer_ = loss_observer.Pass(); 90 loss_observer_ = loss_observer.Pass();
89 bool success = DoInitialize(shared_state.Pass()); 91 bool success = DoInitialize(shared_state.Pass());
90 mojo::GpuCapabilitiesPtr capabilities = 92 mojo::GpuCapabilitiesPtr capabilities =
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 169
168 command_buffer_->SetSharedStateBuffer(backing.Pass()); 170 command_buffer_->SetSharedStateBuffer(backing.Pass());
169 return true; 171 return true;
170 } 172 }
171 173
172 void CommandBufferDriver::SetGetBuffer(int32_t buffer) { 174 void CommandBufferDriver::SetGetBuffer(int32_t buffer) {
173 command_buffer_->SetGetBuffer(buffer); 175 command_buffer_->SetGetBuffer(buffer);
174 } 176 }
175 177
176 void CommandBufferDriver::Flush(int32_t put_offset) { 178 void CommandBufferDriver::Flush(int32_t put_offset) {
179 if (!context_)
180 return;
177 if (!context_->MakeCurrent(surface_.get())) { 181 if (!context_->MakeCurrent(surface_.get())) {
178 DLOG(WARNING) << "Context lost"; 182 DLOG(WARNING) << "Context lost";
179 OnContextLost(gpu::error::kUnknown); 183 OnContextLost(gpu::error::kUnknown);
180 return; 184 return;
181 } 185 }
182 command_buffer_->Flush(put_offset); 186 command_buffer_->Flush(put_offset);
183 } 187 }
184 188
189 void CommandBufferDriver::DestroyWindow() {
190 DestroyDecoder();
191 surface_ = nullptr;
192 context_ = nullptr;
193 destruct_callback_.Reset();
194 }
195
185 void CommandBufferDriver::MakeProgress(int32_t last_get_offset) { 196 void CommandBufferDriver::MakeProgress(int32_t last_get_offset) {
186 // TODO(piman): handle out-of-order. 197 // TODO(piman): handle out-of-order.
187 sync_client_->DidMakeProgress( 198 sync_client_->DidMakeProgress(
188 mojo::CommandBufferState::From(command_buffer_->GetLastState())); 199 mojo::CommandBufferState::From(command_buffer_->GetLastState()));
189 } 200 }
190 201
191 void CommandBufferDriver::RegisterTransferBuffer( 202 void CommandBufferDriver::RegisterTransferBuffer(
192 int32_t id, 203 int32_t id,
193 mojo::ScopedSharedBufferHandle transfer_buffer, 204 mojo::ScopedSharedBufferHandle transfer_buffer,
194 uint32_t size) { 205 uint32_t size) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 loss_observer_->DidLoseContext(reason); 251 loss_observer_->DidLoseContext(reason);
241 client_->DidLoseContext(); 252 client_->DidLoseContext();
242 } 253 }
243 254
244 void CommandBufferDriver::OnUpdateVSyncParameters( 255 void CommandBufferDriver::OnUpdateVSyncParameters(
245 const base::TimeTicks timebase, 256 const base::TimeTicks timebase,
246 const base::TimeDelta interval) { 257 const base::TimeDelta interval) {
247 client_->UpdateVSyncParameters(timebase, interval); 258 client_->UpdateVSyncParameters(timebase, interval);
248 } 259 }
249 260
261 void CommandBufferDriver::DestroyDecoder() {
262 if (decoder_) {
263 bool have_context = decoder_->MakeCurrent();
264 decoder_->Destroy(have_context);
265 decoder_.reset();
266 }
267 }
268
250 } // namespace gles2 269 } // namespace gles2
OLDNEW
« no previous file with comments | « components/gles2/command_buffer_driver.h ('k') | components/native_viewport/native_viewport_application_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698