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

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 235563002: gpu: Separate GpuControlService from GpuControl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove MailboxManager Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/in_process_command_buffer.cc
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index f9b81dbfab4434881e0f1e96bdf9656bbbf20183..f83cf17738104dbe09e07183f8db93e45fef1f87 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -24,6 +24,7 @@
#include "base/sequence_checker.h"
#include "base/synchronization/condition_variable.h"
#include "base/threading/thread.h"
+#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gl_context_virtual.h"
@@ -296,8 +297,11 @@ bool InProcessCommandBuffer::Initialize(
base::Bind(&RunTaskWithResult<bool>, init_task, &result, &completion));
completion.Wait();
- if (result)
+ if (result) {
capabilities_ = capabilities;
+ capabilities_.map_image =
+ capabilities_.map_image && g_gpu_memory_buffer_factory;
+ }
return result;
}
@@ -409,15 +413,11 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
DestroyOnGpuThread();
return false;
}
+ *params.capabilities = decoder_->GetCapabilities();
gpu_control_.reset(
new GpuControlService(decoder_->GetContextGroup()->image_manager(),
- g_gpu_memory_buffer_factory,
- decoder_->GetContextGroup()->mailbox_manager(),
- decoder_->GetQueryManager(),
- decoder_->GetCapabilities()));
-
- *params.capabilities = gpu_control_->GetCapabilities();
+ decoder_->GetQueryManager()));
if (!params.is_offscreen) {
decoder_->SetResizeCallback(base::Bind(
@@ -609,16 +609,37 @@ gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
unsigned internalformat,
int32* id) {
CheckSequencedThread();
- base::AutoLock lock(command_buffer_lock_);
- return gpu_control_->CreateGpuMemoryBuffer(width,
- height,
- internalformat,
- id);
+
+ *id = -1;
+ linked_ptr<gfx::GpuMemoryBuffer> buffer =
+ make_linked_ptr(g_gpu_memory_buffer_factory->CreateGpuMemoryBuffer(
+ width, height, internalformat));
+ if (!buffer.get())
+ return NULL;
+
+ static int32 next_id = 1;
+ *id = next_id++;
+
+ base::Closure task = base::Bind(&GpuControlService::RegisterGpuMemoryBuffer,
+ base::Unretained(gpu_control_.get()),
+ *id,
+ buffer->GetHandle(),
+ width,
+ height,
+ internalformat);
+
+ QueueTask(task);
+
+ gpu_memory_buffers_[*id] = buffer;
+ return buffer.get();
}
void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
CheckSequencedThread();
- base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer,
+ GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
+ if (it != gpu_memory_buffers_.end())
+ gpu_memory_buffers_.erase(it);
+ base::Closure task = base::Bind(&GpuControlService::UnregisterGpuMemoryBuffer,
base::Unretained(gpu_control_.get()),
id);
@@ -667,7 +688,7 @@ void InProcessCommandBuffer::SignalSyncPointOnGpuThread(
void InProcessCommandBuffer::SignalQuery(unsigned query,
const base::Closure& callback) {
CheckSequencedThread();
- QueueTask(base::Bind(&GpuControl::SignalQuery,
+ QueueTask(base::Bind(&GpuControlService::SignalQuery,
base::Unretained(gpu_control_.get()),
query,
WrapCallback(callback)));

Powered by Google App Engine
This is Rietveld 408576698