diff options
19 files changed, 133 insertions, 84 deletions
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc index 3cf28b6..f6d0fea 100644 --- a/content/common/gpu/client/command_buffer_proxy_impl.cc +++ b/content/common/gpu/client/command_buffer_proxy_impl.cc @@ -286,8 +286,8 @@ scoped_refptr<gpu::Buffer> CommandBufferProxyImpl::CreateTransferBuffer( } *id = new_id; - scoped_refptr<gpu::Buffer> buffer = - new gpu::Buffer(shared_memory.Pass(), size); + scoped_refptr<gpu::Buffer> buffer( + gpu::MakeBufferFromSharedMemory(shared_memory.Pass(), size)); return buffer; } diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc index b267575..43cab10 100644 --- a/content/common/gpu/gpu_command_buffer_stub.cc +++ b/content/common/gpu/gpu_command_buffer_stub.cc @@ -542,11 +542,14 @@ void GpuCommandBufferStub::OnInitialize( base::Unretained(this))); } - if (!command_buffer_->SetSharedStateBuffer(shared_state_shm.Pass())) { - DLOG(ERROR) << "Failed to map shared stae buffer."; + const size_t kSharedStateSize = sizeof(gpu::CommandBufferSharedState); + if (!shared_state_shm->Map(kSharedStateSize)) { + DLOG(ERROR) << "Failed to map shared state buffer."; OnInitializeFailed(reply_message); return; } + command_buffer_->SetSharedStateBuffer(gpu::MakeBackingFromSharedMemory( + shared_state_shm.Pass(), kSharedStateSize)); GpuCommandBufferMsg_Initialize::WriteReplyParams( reply_message, true, gpu_control_->GetCapabilities()); @@ -694,8 +697,10 @@ void GpuCommandBufferStub::OnRegisterTransferBuffer( return; } - if (command_buffer_) - command_buffer_->RegisterTransferBuffer(id, shared_memory.Pass(), size); + if (command_buffer_) { + command_buffer_->RegisterTransferBuffer( + id, gpu::MakeBackingFromSharedMemory(shared_memory.Pass(), size)); + } } void GpuCommandBufferStub::OnDestroyTransferBuffer(int32 id) { diff --git a/gpu/command_buffer/client/client_test_helper.cc b/gpu/command_buffer/client/client_test_helper.cc index f5e58f2..46011ad 100644 --- a/gpu/command_buffer/client/client_test_helper.cc +++ b/gpu/command_buffer/client/client_test_helper.cc @@ -75,7 +75,8 @@ scoped_refptr<gpu::Buffer> MockCommandBufferBase::CreateTransferBuffer( int32 ndx = *id - kTransferBufferBaseId; scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); shared_memory->CreateAndMapAnonymous(size); - transfer_buffer_buffers_[ndx] = new gpu::Buffer(shared_memory.Pass(), size); + transfer_buffer_buffers_[ndx] = + MakeBufferFromSharedMemory(shared_memory.Pass(), size); } return GetTransferBuffer(*id); } diff --git a/gpu/command_buffer/client/mapped_memory_unittest.cc b/gpu/command_buffer/client/mapped_memory_unittest.cc index d853119..4ebe5ec 100644 --- a/gpu/command_buffer/client/mapped_memory_unittest.cc +++ b/gpu/command_buffer/client/mapped_memory_unittest.cc @@ -102,7 +102,7 @@ class MemoryChunkTest : public MappedMemoryTestBase { MappedMemoryTestBase::SetUp(); scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); shared_memory->CreateAndMapAnonymous(kBufferSize); - buffer_ = new gpu::Buffer(shared_memory.Pass(), kBufferSize); + buffer_ = MakeBufferFromSharedMemory(shared_memory.Pass(), kBufferSize); chunk_.reset(new MemoryChunk(kShmId, buffer_, helper_.get(), diff --git a/gpu/command_buffer/common/buffer.cc b/gpu/command_buffer/common/buffer.cc index bbf40a1..3b3da43 100644 --- a/gpu/command_buffer/common/buffer.cc +++ b/gpu/command_buffer/common/buffer.cc @@ -9,11 +9,23 @@ #include "base/numerics/safe_math.h" namespace gpu { +SharedMemoryBufferBacking::SharedMemoryBufferBacking( + scoped_ptr<base::SharedMemory> shared_memory, + size_t size) + : shared_memory_(shared_memory.Pass()), size_(size) {} -Buffer::Buffer(scoped_ptr<base::SharedMemory> shared_memory, size_t size) - : shared_memory_(shared_memory.Pass()), - memory_(shared_memory_->memory()), - size_(size) { +SharedMemoryBufferBacking::~SharedMemoryBufferBacking() {} + +void* SharedMemoryBufferBacking::GetMemory() const { + return shared_memory_->memory(); +} + +size_t SharedMemoryBufferBacking::GetSize() const { return size_; } + +Buffer::Buffer(scoped_ptr<BufferBacking> backing) + : backing_(backing.Pass()), + memory_(backing_->GetMemory()), + size_(backing_->GetSize()) { DCHECK(memory_) << "The memory must be mapped to create a Buffer"; } diff --git a/gpu/command_buffer/common/buffer.h b/gpu/command_buffer/common/buffer.h index e9a1558..5a31035 100644 --- a/gpu/command_buffer/common/buffer.h +++ b/gpu/command_buffer/common/buffer.h @@ -17,12 +17,34 @@ namespace base { namespace gpu { +class GPU_EXPORT BufferBacking { + public: + virtual ~BufferBacking() {} + virtual void* GetMemory() const = 0; + virtual size_t GetSize() const = 0; +}; + +class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking { + public: + SharedMemoryBufferBacking(scoped_ptr<base::SharedMemory> shared_memory, + size_t size); + virtual ~SharedMemoryBufferBacking(); + virtual void* GetMemory() const OVERRIDE; + virtual size_t GetSize() const OVERRIDE; + base::SharedMemory* shared_memory() { return shared_memory_.get(); } + + private: + scoped_ptr<base::SharedMemory> shared_memory_; + size_t size_; + DISALLOW_COPY_AND_ASSIGN(SharedMemoryBufferBacking); +}; + // Buffer owns a piece of shared-memory of a certain size. class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { public: - Buffer(scoped_ptr<base::SharedMemory> shared_memory, size_t size); + explicit Buffer(scoped_ptr<BufferBacking> backing); - base::SharedMemory* shared_memory() const { return shared_memory_.get(); } + BufferBacking* backing() const { return backing_.get(); } void* memory() const { return memory_; } size_t size() const { return size_; } @@ -33,13 +55,26 @@ class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { friend class base::RefCountedThreadSafe<Buffer>; ~Buffer(); - scoped_ptr<base::SharedMemory> shared_memory_; + scoped_ptr<BufferBacking> backing_; void* memory_; size_t size_; DISALLOW_COPY_AND_ASSIGN(Buffer); }; +static inline scoped_ptr<BufferBacking> MakeBackingFromSharedMemory( + scoped_ptr<base::SharedMemory> shared_memory, + size_t size) { + return scoped_ptr<BufferBacking>( + new SharedMemoryBufferBacking(shared_memory.Pass(), size)); +} + +static inline scoped_refptr<Buffer> MakeBufferFromSharedMemory( + scoped_ptr<base::SharedMemory> shared_memory, + size_t size) { + return new Buffer(MakeBackingFromSharedMemory(shared_memory.Pass(), size)); +} + } // namespace gpu #endif // GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc index df2bd07..30617c8 100644 --- a/gpu/command_buffer/service/command_buffer_service.cc +++ b/gpu/command_buffer/service/command_buffer_service.cc @@ -103,17 +103,15 @@ void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) { UpdateState(); } -bool CommandBufferService::SetSharedStateBuffer( - scoped_ptr<base::SharedMemory> shared_state_shm) { - shared_state_shm_.reset(shared_state_shm.release()); - if (!shared_state_shm_->Map(sizeof(*shared_state_))) - return false; +void CommandBufferService::SetSharedStateBuffer( + scoped_ptr<BufferBacking> shared_state_buffer) { + shared_state_buffer_ = shared_state_buffer.Pass(); + DCHECK(shared_state_buffer_->GetSize() >= sizeof(*shared_state_)); shared_state_ = - static_cast<CommandBufferSharedState*>(shared_state_shm_->memory()); + static_cast<CommandBufferSharedState*>(shared_state_buffer_->GetMemory()); UpdateState(); - return true; } void CommandBufferService::SetGetOffset(int32 get_offset) { @@ -132,7 +130,8 @@ scoped_refptr<Buffer> CommandBufferService::CreateTransferBuffer(size_t size, static int32 next_id = 1; *id = next_id++; - if (!RegisterTransferBuffer(*id, shared_memory.Pass(), size)) { + if (!RegisterTransferBuffer( + *id, MakeBackingFromSharedMemory(shared_memory.Pass(), size))) { *id = -1; return NULL; } @@ -157,10 +156,8 @@ scoped_refptr<Buffer> CommandBufferService::GetTransferBuffer(int32 id) { bool CommandBufferService::RegisterTransferBuffer( int32 id, - scoped_ptr<base::SharedMemory> shared_memory, - size_t size) { - return transfer_buffer_manager_->RegisterTransferBuffer( - id, shared_memory.Pass(), size); + scoped_ptr<BufferBacking> buffer) { + return transfer_buffer_manager_->RegisterTransferBuffer(id, buffer.Pass()); } void CommandBufferService::SetToken(int32 token) { diff --git a/gpu/command_buffer/service/command_buffer_service.h b/gpu/command_buffer/service/command_buffer_service.h index c3c67d9..740e897 100644 --- a/gpu/command_buffer/service/command_buffer_service.h +++ b/gpu/command_buffer/service/command_buffer_service.h @@ -79,22 +79,19 @@ class GPU_EXPORT CommandBufferService : public CommandBufferServiceBase { virtual void SetParseErrorCallback(const base::Closure& callback); // Setup the shared memory that shared state should be copied into. - bool SetSharedStateBuffer(scoped_ptr<base::SharedMemory> shared_state_shm); + void SetSharedStateBuffer(scoped_ptr<BufferBacking> shared_state_buffer); // Copy the current state into the shared state transfer buffer. void UpdateState(); - // Register an existing shared memory object and get an ID that can be used - // to identify it in the command buffer. Callee dups the handle until - // DestroyTransferBuffer is called. - bool RegisterTransferBuffer(int32 id, - scoped_ptr<base::SharedMemory> shared_memory, - size_t size); + // Registers an existing shared memory object and get an ID that can be used + // to identify it in the command buffer. + bool RegisterTransferBuffer(int32 id, scoped_ptr<BufferBacking> buffer); private: int32 ring_buffer_id_; scoped_refptr<Buffer> ring_buffer_; - scoped_ptr<base::SharedMemory> shared_state_shm_; + scoped_ptr<BufferBacking> shared_state_buffer_; CommandBufferSharedState* shared_state_; int32 num_entries_; int32 get_offset_; diff --git a/gpu/command_buffer/service/common_decoder_unittest.cc b/gpu/command_buffer/service/common_decoder_unittest.cc index 5e89a5f..11274e0 100644 --- a/gpu/command_buffer/service/common_decoder_unittest.cc +++ b/gpu/command_buffer/service/common_decoder_unittest.cc @@ -83,7 +83,7 @@ class MockCommandBufferEngine : public CommandBufferEngine { get_offset_(0) { scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); shared_memory->CreateAndMapAnonymous(kBufferSize); - buffer_ = new gpu::Buffer(shared_memory.Pass(), kBufferSize); + buffer_ = MakeBufferFromSharedMemory(shared_memory.Pass(), kBufferSize); } // Overridden from CommandBufferEngine. diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc index c582019..9a815c8 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc @@ -1411,7 +1411,7 @@ MockCommandBufferEngine() { scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); shm->CreateAndMapAnonymous(kSharedBufferSize); - valid_buffer_ = new gpu::Buffer(shm.Pass(), kSharedBufferSize); + valid_buffer_ = MakeBufferFromSharedMemory(shm.Pass(), kSharedBufferSize); ClearSharedMemory(); } diff --git a/gpu/command_buffer/service/gpu_scheduler_unittest.cc b/gpu/command_buffer/service/gpu_scheduler_unittest.cc index 7a663d0..6859208 100644 --- a/gpu/command_buffer/service/gpu_scheduler_unittest.cc +++ b/gpu/command_buffer/service/gpu_scheduler_unittest.cc @@ -37,7 +37,7 @@ class GpuSchedulerTest : public testing::Test { shared_memory->CreateAndMapAnonymous(kRingBufferSize); buffer_ = static_cast<int32*>(shared_memory->memory()); shared_memory_buffer_ = - new gpu::Buffer(shared_memory.Pass(), kRingBufferSize); + MakeBufferFromSharedMemory(shared_memory.Pass(), kRingBufferSize); memset(buffer_, 0, kRingBufferSize); command_buffer_.reset(new MockCommandBuffer); diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc index b5f6609..0acbbec 100644 --- a/gpu/command_buffer/service/query_manager_unittest.cc +++ b/gpu/command_buffer/service/query_manager_unittest.cc @@ -93,7 +93,8 @@ class QueryManagerTest : public testing::Test { MockCommandBufferEngine() { scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); shared_memory->CreateAndMapAnonymous(kSharedBufferSize); - valid_buffer_ = new gpu::Buffer(shared_memory.Pass(), kSharedBufferSize); + valid_buffer_ = + MakeBufferFromSharedMemory(shared_memory.Pass(), kSharedBufferSize); data_ = static_cast<uint8*>(valid_buffer_->memory()); ClearSharedMemory(); } diff --git a/gpu/command_buffer/service/transfer_buffer_manager.cc b/gpu/command_buffer/service/transfer_buffer_manager.cc index 7f81115..4404a9e 100644 --- a/gpu/command_buffer/service/transfer_buffer_manager.cc +++ b/gpu/command_buffer/service/transfer_buffer_manager.cc @@ -40,8 +40,7 @@ bool TransferBufferManager::Initialize() { bool TransferBufferManager::RegisterTransferBuffer( int32 id, - scoped_ptr<base::SharedMemory> shared_memory, - size_t size) { + scoped_ptr<BufferBacking> buffer_backing) { if (id <= 0) { DVLOG(0) << "Cannot register transfer buffer with non-positive ID."; return false; @@ -54,13 +53,13 @@ bool TransferBufferManager::RegisterTransferBuffer( } // Register the shared memory with the ID. - scoped_refptr<Buffer> buffer = new gpu::Buffer(shared_memory.Pass(), size); + scoped_refptr<Buffer> buffer(new gpu::Buffer(buffer_backing.Pass())); // Check buffer alignment is sane. DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) & (kCommandBufferEntrySize - 1))); - shared_memory_bytes_allocated_ += size; + shared_memory_bytes_allocated_ += buffer->size(); TRACE_COUNTER_ID1( "gpu", "GpuTransferBufferMemory", this, shared_memory_bytes_allocated_); diff --git a/gpu/command_buffer/service/transfer_buffer_manager.h b/gpu/command_buffer/service/transfer_buffer_manager.h index 5f8f946..d8bb3bb 100644 --- a/gpu/command_buffer/service/transfer_buffer_manager.h +++ b/gpu/command_buffer/service/transfer_buffer_manager.h @@ -20,10 +20,8 @@ class GPU_EXPORT TransferBufferManagerInterface { public: virtual ~TransferBufferManagerInterface(); - virtual bool RegisterTransferBuffer( - int32 id, - scoped_ptr<base::SharedMemory> shared_memory, - size_t size) = 0; + virtual bool RegisterTransferBuffer(int32 id, + scoped_ptr<BufferBacking> buffer) = 0; virtual void DestroyTransferBuffer(int32 id) = 0; virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) = 0; }; @@ -34,10 +32,9 @@ class GPU_EXPORT TransferBufferManager TransferBufferManager(); bool Initialize(); - virtual bool RegisterTransferBuffer( - int32 id, - scoped_ptr<base::SharedMemory> shared_memory, - size_t size) OVERRIDE; + virtual bool RegisterTransferBuffer(int32 id, + scoped_ptr<BufferBacking> buffer_backing) + OVERRIDE; virtual void DestroyTransferBuffer(int32 id) OVERRIDE; virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) OVERRIDE; diff --git a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc index c7dc04a..4af0936 100644 --- a/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc +++ b/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc @@ -41,20 +41,34 @@ TEST_F(TransferBufferManagerTest, CanRegisterTransferBuffer) { scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); shm->CreateAndMapAnonymous(kBufferSize); base::SharedMemory* shm_raw_pointer = shm.get(); + scoped_ptr<SharedMemoryBufferBacking> backing( + new SharedMemoryBufferBacking(shm.Pass(), kBufferSize)); + SharedMemoryBufferBacking* backing_raw_ptr = backing.get(); + EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm.Pass(), kBufferSize)); + 1, backing.PassAs<BufferBacking>())); scoped_refptr<Buffer> registered = transfer_buffer_manager_->GetTransferBuffer(1); // Shared-memory ownership is transfered. It should be the same memory. - EXPECT_EQ(shm_raw_pointer, registered->shared_memory()); + EXPECT_EQ(backing_raw_ptr, registered->backing()); + EXPECT_EQ(shm_raw_pointer, backing_raw_ptr->shared_memory()); } +class FakeBufferBacking : public BufferBacking { + public: + virtual void* GetMemory() const OVERRIDE { + return reinterpret_cast<void*>(0xBADF00D0); + } + virtual size_t GetSize() const OVERRIDE { return 42; } + static scoped_ptr<BufferBacking> Make() { + return scoped_ptr<BufferBacking>(new FakeBufferBacking); + } +}; + TEST_F(TransferBufferManagerTest, CanDestroyTransferBuffer) { - scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); - shm->CreateAndMapAnonymous(kBufferSize); EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm.Pass(), kBufferSize)); + 1, scoped_ptr<BufferBacking>(new FakeBufferBacking))); transfer_buffer_manager_->DestroyTransferBuffer(1); scoped_refptr<Buffer> registered = transfer_buffer_manager_->GetTransferBuffer(1); @@ -64,31 +78,20 @@ TEST_F(TransferBufferManagerTest, CanDestroyTransferBuffer) { } TEST_F(TransferBufferManagerTest, CannotRegregisterTransferBufferId) { - scoped_ptr<base::SharedMemory> shm1(new base::SharedMemory()); - scoped_ptr<base::SharedMemory> shm2(new base::SharedMemory()); - scoped_ptr<base::SharedMemory> shm3(new base::SharedMemory()); - shm1->CreateAndMapAnonymous(kBufferSize); - shm2->CreateAndMapAnonymous(kBufferSize); - shm3->CreateAndMapAnonymous(kBufferSize); - EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm1.Pass(), kBufferSize)); + 1, FakeBufferBacking::Make())); EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm2.Pass(), kBufferSize)); + 1, FakeBufferBacking::Make())); EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm3.Pass(), kBufferSize)); + 1, FakeBufferBacking::Make())); } TEST_F(TransferBufferManagerTest, CanReuseTransferBufferIdAfterDestroying) { - scoped_ptr<base::SharedMemory> shm1(new base::SharedMemory()); - scoped_ptr<base::SharedMemory> shm2(new base::SharedMemory()); - shm1->CreateAndMapAnonymous(kBufferSize); - shm2->CreateAndMapAnonymous(kBufferSize); EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm1.Pass(), kBufferSize)); + 1, FakeBufferBacking::Make())); transfer_buffer_manager_->DestroyTransferBuffer(1); EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer( - 1, shm2.Pass(), kBufferSize)); + 1, FakeBufferBacking::Make())); } TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) { @@ -96,17 +99,15 @@ TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) { } TEST_F(TransferBufferManagerTest, CannotRegisterNullTransferBuffer) { - scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); - shm->CreateAndMapAnonymous(kBufferSize); EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer( - 0, shm.Pass(), kBufferSize)); + 0, FakeBufferBacking::Make())); } TEST_F(TransferBufferManagerTest, CannotRegisterNegativeTransferBufferId) { scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); shm->CreateAndMapAnonymous(kBufferSize); EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer( - -1, shm.Pass(), kBufferSize)); + -1, FakeBufferBacking::Make())); } } // namespace gpu diff --git a/mojo/gles2/command_buffer_client_impl.cc b/mojo/gles2/command_buffer_client_impl.cc index c9dcf91..3ffecf3 100644 --- a/mojo/gles2/command_buffer_client_impl.cc +++ b/mojo/gles2/command_buffer_client_impl.cc @@ -125,7 +125,7 @@ scoped_refptr<gpu::Buffer> CommandBufferClientImpl::CreateTransferBuffer( *id, handle, static_cast<uint32_t>(size)); scoped_refptr<gpu::Buffer> buffer = - new gpu::Buffer(shared_memory.Pass(), size); + gpu::MakeBufferFromSharedMemory(shared_memory.Pass(), size); return buffer; } diff --git a/mojo/services/gles2/command_buffer_impl.cc b/mojo/services/gles2/command_buffer_impl.cc index 1e8a4f6..7d33b72 100644 --- a/mojo/services/gles2/command_buffer_impl.cc +++ b/mojo/services/gles2/command_buffer_impl.cc @@ -118,11 +118,14 @@ bool CommandBufferImpl::DoInitialize(const ShmHandle& shared_state) { // TODO(piman): other callbacks + const size_t kSize = sizeof(gpu::CommandBufferSharedState); scoped_ptr<base::SharedMemory> shared_state_shm( new base::SharedMemory(shared_state, false)); - if (!command_buffer_->SetSharedStateBuffer(shared_state_shm.Pass())) + if (!shared_state_shm->Map(kSize)) return false; + command_buffer_->SetSharedStateBuffer( + gpu::MakeBackingFromSharedMemory(shared_state_shm.Pass(), kSize)); return true; } @@ -152,7 +155,8 @@ void CommandBufferImpl::RegisterTransferBuffer(int32_t id, return; } - command_buffer_->RegisterTransferBuffer(id, shared_memory.Pass(), size); + command_buffer_->RegisterTransferBuffer( + id, gpu::MakeBackingFromSharedMemory(shared_memory.Pass(), size)); } void CommandBufferImpl::DestroyTransferBuffer(int32_t id) { diff --git a/ppapi/proxy/ppapi_command_buffer_proxy.cc b/ppapi/proxy/ppapi_command_buffer_proxy.cc index a1ac347..1e4820d 100644 --- a/ppapi/proxy/ppapi_command_buffer_proxy.cc +++ b/ppapi/proxy/ppapi_command_buffer_proxy.cc @@ -136,9 +136,7 @@ scoped_refptr<gpu::Buffer> PpapiCommandBufferProxy::CreateTransferBuffer( } } - scoped_refptr<gpu::Buffer> buffer = - new gpu::Buffer(shared_memory.Pass(), handle.size()); - return buffer; + return gpu::MakeBufferFromSharedMemory(shared_memory.Pass(), handle.size()); } void PpapiCommandBufferProxy::DestroyTransferBuffer(int32 id) { diff --git a/ppapi/proxy/ppb_graphics_3d_proxy.cc b/ppapi/proxy/ppb_graphics_3d_proxy.cc index 20c55de..85692d4 100644 --- a/ppapi/proxy/ppb_graphics_3d_proxy.cc +++ b/ppapi/proxy/ppb_graphics_3d_proxy.cc @@ -297,9 +297,11 @@ void PPB_Graphics3D_Proxy::OnMsgCreateTransferBuffer( enter.object()->CreateTransferBuffer(size, id); if (!buffer) return; - DCHECK(buffer->shared_memory()); + gpu::SharedMemoryBufferBacking* backing = + static_cast<gpu::SharedMemoryBufferBacking*>(buffer->backing()); + DCHECK(backing && backing->shared_memory()); transfer_buffer->set_shmem( - TransportSHMHandle(dispatcher(), buffer->shared_memory()), + TransportSHMHandle(dispatcher(), backing->shared_memory()), buffer->size()); } else { *id = -1; |