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

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

Issue 8919014: Revert "Revert 113479 - Revert "Revert 113250 - Add CommandBuffer::SetGetBuffer"" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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/command_buffer_service.cc
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc
index d126883d759807ed516f6a7a83b01c3010bc9bbc..4047d1c94081a91a2502e3cfff79b404142f814c 100644
--- a/gpu/command_buffer/service/command_buffer_service.cc
+++ b/gpu/command_buffer/service/command_buffer_service.cc
@@ -14,7 +14,8 @@ using ::base::SharedMemory;
namespace gpu {
CommandBufferService::CommandBufferService()
- : num_entries_(0),
+ : ring_buffer_id_(-1),
+ num_entries_(0),
get_offset_(0),
put_offset_(0),
token_(0),
@@ -25,71 +26,16 @@ CommandBufferService::CommandBufferService()
}
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;
}
}
-bool CommandBufferService::Initialize(int32 size) {
- // Fail if already initialized.
- if (ring_buffer_.shared_memory) {
- LOG(ERROR) << "Failed because already initialized.";
- return false;
- }
-
- if (size <= 0 || size > kMaxCommandBufferSize) {
- LOG(ERROR) << "Failed because command buffer size was invalid.";
- return false;
- }
-
- num_entries_ = size / sizeof(CommandBufferEntry);
-
- SharedMemory shared_memory;
- if (!shared_memory.CreateAnonymous(size)) {
- LOG(ERROR) << "Failed to create shared memory for command buffer.";
- return true;
- }
-
- return Initialize(&shared_memory, size);
-}
-
-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;
- }
-
- 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);
-
+bool CommandBufferService::Initialize() {
return true;
}
-Buffer CommandBufferService::GetRingBuffer() {
- return ring_buffer_;
-}
-
CommandBufferService::State CommandBufferService::GetState() {
State state;
state.num_entries = num_entries_;
@@ -134,6 +80,20 @@ void CommandBufferService::Flush(int32 put_offset) {
put_offset_change_callback_.Run();
}
+void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) {
+ DCHECK_EQ(-1, ring_buffer_id_);
+ DCHECK_EQ(put_offset_, get_offset_); // Only if it's empty.
+ ring_buffer_ = GetTransferBuffer(transfer_buffer_id);
+ DCHECK(ring_buffer_.ptr);
+ ring_buffer_id_ = transfer_buffer_id;
+ num_entries_ = ring_buffer_.size / sizeof(CommandBufferEntry);
+ put_offset_ = 0;
+ SetGetOffset(0);
+ if (!get_buffer_change_callback_.is_null()) {
+ get_buffer_change_callback_.Run(ring_buffer_id_);
+ }
+}
+
void CommandBufferService::SetGetOffset(int32 get_offset) {
DCHECK(get_offset >= 0 && get_offset < num_entries_);
get_offset_ = get_offset;
@@ -223,6 +183,14 @@ void CommandBufferService::DestroyTransferBuffer(int32 handle) {
registered_objects_[handle] = Buffer();
unused_registered_object_elements_.insert(handle);
+ if (handle == ring_buffer_id_) {
+ ring_buffer_id_ = -1;
+ ring_buffer_ = Buffer();
+ num_entries_ = 0;
+ get_offset_ = 0;
+ put_offset_ = 0;
+ }
+
// Remove all null objects from the end of the vector. This allows the vector
// to shrink when, for example, all objects are unregistered. Note that this
// loop never removes element zero, which is always NULL.
@@ -266,6 +234,11 @@ void CommandBufferService::SetPutOffsetChangeCallback(
put_offset_change_callback_ = callback;
}
+void CommandBufferService::SetGetBufferChangeCallback(
+ const GetBufferChangedCallback& callback) {
+ get_buffer_change_callback_ = callback;
+}
+
void CommandBufferService::SetParseErrorCallback(
const base::Closure& callback) {
parse_error_callback_ = callback;
« no previous file with comments | « gpu/command_buffer/service/command_buffer_service.h ('k') | gpu/command_buffer/service/common_decoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698