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

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

Issue 6588029: Moved creation of GPU command buffer shared memory into the browser process.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
« no previous file with comments | « gpu/command_buffer/service/command_buffer_service.h ('k') | gpu/pgl/command_buffer_pepper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/command_buffer_service.cc
===================================================================
--- gpu/command_buffer/service/command_buffer_service.cc (revision 76263)
+++ gpu/command_buffer/service/command_buffer_service.cc (working copy)
@@ -25,6 +25,8 @@
}
CommandBufferService::~CommandBufferService() {
+ delete ring_buffer_.shared_memory;
+
for (size_t i = 0; i < registered_objects_.size(); ++i) {
if (registered_objects_[i].shared_memory)
delete registered_objects_[i].shared_memory;
@@ -33,42 +35,59 @@
bool CommandBufferService::Initialize(int32 size) {
// Fail if already initialized.
- if (ring_buffer_.get()) {
- LOG(ERROR) << "CommandBufferService::Initialize "
- << "failed because already initialized.";
+ if (ring_buffer_.shared_memory) {
+ LOG(ERROR) << "Failed because already initialized.";
return false;
}
if (size <= 0 || size > kMaxCommandBufferSize) {
- LOG(ERROR) << "CommandBufferService::Initialize "
- << "because command buffer size was invalid.";
+ LOG(ERROR) << "Failed because command buffer size was invalid.";
return false;
}
num_entries_ = size / sizeof(CommandBufferEntry);
- ring_buffer_.reset(new SharedMemory);
- if (ring_buffer_->CreateAndMapAnonymous(size)) {
+ SharedMemory shared_memory;
+ if (!shared_memory.CreateAnonymous(size)) {
+ LOG(ERROR) << "Failed to create shared memory for command buffer.";
return true;
}
- num_entries_ = 0;
- ring_buffer_.reset();
+ return Initialize(&shared_memory, size);
+}
- LOG(ERROR) << "CommandBufferService::Initialize failed because ring buffer "
- << "could not be created or mapped ";
+bool CommandBufferService::Initialize(base::SharedMemory* buffer, int32 size) {
+ // Fail if already initialized.
+ if (ring_buffer_.shared_memory) {
+ LOG(ERROR) << "Failed because already initialized.";
+ return false;
+ }
- return false;
+ base::SharedMemoryHandle shared_memory_handle;
+ if (!buffer->ShareToProcess(base::GetCurrentProcessHandle(),
+ &shared_memory_handle)) {
+ LOG(ERROR) << "Failed to duplicate command buffer shared memory handle.";
+ return false;
+ }
+
+ ring_buffer_.shared_memory = new base::SharedMemory(shared_memory_handle,
+ false);
+ if (!ring_buffer_.shared_memory->Map(size)) {
+ LOG(ERROR) << "Failed because ring buffer could not be created or mapped ";
+ delete ring_buffer_.shared_memory;
+ ring_buffer_.shared_memory = NULL;
+ return false;
+ }
+
+ ring_buffer_.ptr = ring_buffer_.shared_memory->memory();
+ ring_buffer_.size = size;
+ num_entries_ = size / sizeof(CommandBufferEntry);
+
+ return true;
}
Buffer CommandBufferService::GetRingBuffer() {
- Buffer buffer;
- if (ring_buffer_.get()) {
- buffer.ptr = ring_buffer_->memory();
- buffer.size = ring_buffer_->created_size();
- buffer.shared_memory = ring_buffer_.get();
- }
- return buffer;
+ return ring_buffer_;
}
CommandBufferService::State CommandBufferService::GetState() {
« no previous file with comments | « gpu/command_buffer/service/command_buffer_service.h ('k') | gpu/pgl/command_buffer_pepper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698