| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "base/hash.h" | 9 #include "base/hash.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 | 185 |
| 186 if (share_group) { | 186 if (share_group) { |
| 187 context_group_ = share_group->context_group_; | 187 context_group_ = share_group->context_group_; |
| 188 DCHECK(context_group_->bind_generates_resource() == | 188 DCHECK(context_group_->bind_generates_resource() == |
| 189 attrib_parser.bind_generates_resource); | 189 attrib_parser.bind_generates_resource); |
| 190 } else { | 190 } else { |
| 191 context_group_ = new gpu::gles2::ContextGroup( | 191 context_group_ = new gpu::gles2::ContextGroup( |
| 192 mailbox_manager, | 192 mailbox_manager, |
| 193 new GpuCommandBufferMemoryTracker(channel), | 193 new GpuCommandBufferMemoryTracker(channel), |
| 194 channel_->gpu_channel_manager()->shader_translator_cache(), | 194 channel_->gpu_channel_manager()->shader_translator_cache(), |
| 195 NULL, | 195 nullptr, |
| 196 attrib_parser.bind_generates_resource); | 196 attrib_parser.bind_generates_resource); |
| 197 } | 197 } |
| 198 | 198 |
| 199 use_virtualized_gl_context_ |= | 199 use_virtualized_gl_context_ |= |
| 200 context_group_->feature_info()->workarounds().use_virtualized_gl_contexts; | 200 context_group_->feature_info()->workarounds().use_virtualized_gl_contexts; |
| 201 } | 201 } |
| 202 | 202 |
| 203 GpuCommandBufferStub::~GpuCommandBufferStub() { | 203 GpuCommandBufferStub::~GpuCommandBufferStub() { |
| 204 Destroy(); | 204 Destroy(); |
| 205 | 205 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 gpu_channel_manager->Send(new GpuHostMsg_DidDestroyOffscreenContext( | 408 gpu_channel_manager->Send(new GpuHostMsg_DidDestroyOffscreenContext( |
| 409 active_url_)); | 409 active_url_)); |
| 410 } | 410 } |
| 411 | 411 |
| 412 memory_manager_client_state_.reset(); | 412 memory_manager_client_state_.reset(); |
| 413 | 413 |
| 414 while (!sync_points_.empty()) | 414 while (!sync_points_.empty()) |
| 415 OnRetireSyncPoint(sync_points_.front()); | 415 OnRetireSyncPoint(sync_points_.front()); |
| 416 | 416 |
| 417 if (decoder_) | 417 if (decoder_) |
| 418 decoder_->set_engine(NULL); | 418 decoder_->set_engine(nullptr); |
| 419 | 419 |
| 420 // The scheduler has raw references to the decoder and the command buffer so | 420 // The scheduler has raw references to the decoder and the command buffer so |
| 421 // destroy it before those. | 421 // destroy it before those. |
| 422 scheduler_.reset(); | 422 scheduler_.reset(); |
| 423 | 423 |
| 424 bool have_context = false; | 424 bool have_context = false; |
| 425 if (decoder_ && command_buffer_ && | 425 if (decoder_ && command_buffer_ && |
| 426 command_buffer_->GetLastState().error != gpu::error::kLostContext) | 426 command_buffer_->GetLastState().error != gpu::error::kLostContext) |
| 427 have_context = decoder_->MakeCurrent(); | 427 have_context = decoder_->MakeCurrent(); |
| 428 FOR_EACH_OBSERVER(DestructionObserver, | 428 FOR_EACH_OBSERVER(DestructionObserver, |
| 429 destruction_observers_, | 429 destruction_observers_, |
| 430 OnWillDestroyStub()); | 430 OnWillDestroyStub()); |
| 431 | 431 |
| 432 if (decoder_) { | 432 if (decoder_) { |
| 433 decoder_->Destroy(have_context); | 433 decoder_->Destroy(have_context); |
| 434 decoder_.reset(); | 434 decoder_.reset(); |
| 435 } | 435 } |
| 436 | 436 |
| 437 command_buffer_.reset(); | 437 command_buffer_.reset(); |
| 438 | 438 |
| 439 // Remove this after crbug.com/248395 is sorted out. | 439 // Remove this after crbug.com/248395 is sorted out. |
| 440 surface_ = NULL; | 440 surface_ = nullptr; |
| 441 } | 441 } |
| 442 | 442 |
| 443 void GpuCommandBufferStub::OnInitializeFailed(IPC::Message* reply_message) { | 443 void GpuCommandBufferStub::OnInitializeFailed(IPC::Message* reply_message) { |
| 444 Destroy(); | 444 Destroy(); |
| 445 GpuCommandBufferMsg_Initialize::WriteReplyParams( | 445 GpuCommandBufferMsg_Initialize::WriteReplyParams( |
| 446 reply_message, false, gpu::Capabilities()); | 446 reply_message, false, gpu::Capabilities()); |
| 447 Send(reply_message); | 447 Send(reply_message); |
| 448 } | 448 } |
| 449 | 449 |
| 450 void GpuCommandBufferStub::OnInitialize( | 450 void GpuCommandBufferStub::OnInitialize( |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 } | 513 } |
| 514 // This should be a non-virtual GL context. | 514 // This should be a non-virtual GL context. |
| 515 DCHECK(context->GetHandle()); | 515 DCHECK(context->GetHandle()); |
| 516 context = new gpu::GLContextVirtual( | 516 context = new gpu::GLContextVirtual( |
| 517 channel_->share_group(), context.get(), decoder_->AsWeakPtr()); | 517 channel_->share_group(), context.get(), decoder_->AsWeakPtr()); |
| 518 if (!context->Initialize(surface_.get(), gpu_preference_)) { | 518 if (!context->Initialize(surface_.get(), gpu_preference_)) { |
| 519 // TODO(sievers): The real context created above for the default | 519 // TODO(sievers): The real context created above for the default |
| 520 // offscreen surface might not be compatible with this surface. | 520 // offscreen surface might not be compatible with this surface. |
| 521 // Need to adjust at least GLX to be able to create the initial context | 521 // Need to adjust at least GLX to be able to create the initial context |
| 522 // with a config that is compatible with onscreen and offscreen surfaces. | 522 // with a config that is compatible with onscreen and offscreen surfaces. |
| 523 context = NULL; | 523 context = nullptr; |
| 524 | 524 |
| 525 DLOG(ERROR) << "Failed to initialize virtual GL context."; | 525 DLOG(ERROR) << "Failed to initialize virtual GL context."; |
| 526 OnInitializeFailed(reply_message); | 526 OnInitializeFailed(reply_message); |
| 527 return; | 527 return; |
| 528 } | 528 } |
| 529 } | 529 } |
| 530 if (!context.get()) { | 530 if (!context.get()) { |
| 531 context = gfx::GLContext::CreateGLContext( | 531 context = gfx::GLContext::CreateGLContext( |
| 532 channel_->share_group(), surface_.get(), gpu_preference_); | 532 channel_->share_group(), surface_.get(), gpu_preference_); |
| 533 } | 533 } |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 uint64 GpuCommandBufferStub::GetMemoryUsage() const { | 1087 uint64 GpuCommandBufferStub::GetMemoryUsage() const { |
| 1088 return GetMemoryManager()->GetClientMemoryUsage(this); | 1088 return GetMemoryManager()->GetClientMemoryUsage(this); |
| 1089 } | 1089 } |
| 1090 | 1090 |
| 1091 void GpuCommandBufferStub::SwapBuffersCompleted( | 1091 void GpuCommandBufferStub::SwapBuffersCompleted( |
| 1092 const std::vector<ui::LatencyInfo>& latency_info) { | 1092 const std::vector<ui::LatencyInfo>& latency_info) { |
| 1093 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, latency_info)); | 1093 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, latency_info)); |
| 1094 } | 1094 } |
| 1095 | 1095 |
| 1096 } // namespace content | 1096 } // namespace content |
| OLD | NEW |