| 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 "gpu/command_buffer/service/transfer_buffer_manager.h" | 5 #include "gpu/command_buffer/service/transfer_buffer_manager.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 bool TransferBufferManager::Initialize() { | 35 bool TransferBufferManager::Initialize() { |
| 36 return true; | 36 return true; |
| 37 } | 37 } |
| 38 | 38 |
| 39 bool TransferBufferManager::RegisterTransferBuffer( | 39 bool TransferBufferManager::RegisterTransferBuffer( |
| 40 int32 id, | 40 int32 id, |
| 41 base::SharedMemory* shared_memory, | 41 base::SharedMemory* shared_memory, |
| 42 size_t size) { | 42 size_t size) { |
| 43 if (id <= 0) { | 43 if (id <= 0) { |
| 44 DVLOG(ERROR) << "Cannot register transfer buffer with non-positive ID."; | 44 DVLOG(0) << "Cannot register transfer buffer with non-positive ID."; |
| 45 return false; | 45 return false; |
| 46 } | 46 } |
| 47 | 47 |
| 48 // Fail if the ID is in use. | 48 // Fail if the ID is in use. |
| 49 if (registered_buffers_.find(id) != registered_buffers_.end()) { | 49 if (registered_buffers_.find(id) != registered_buffers_.end()) { |
| 50 DVLOG(ERROR) << "Buffer ID already in use."; | 50 DVLOG(0) << "Buffer ID already in use."; |
| 51 return false; | 51 return false; |
| 52 } | 52 } |
| 53 | 53 |
| 54 // Duplicate the handle. | 54 // Duplicate the handle. |
| 55 base::SharedMemoryHandle duped_shared_memory_handle; | 55 base::SharedMemoryHandle duped_shared_memory_handle; |
| 56 if (!shared_memory->ShareToProcess(base::GetCurrentProcessHandle(), | 56 if (!shared_memory->ShareToProcess(base::GetCurrentProcessHandle(), |
| 57 &duped_shared_memory_handle)) { | 57 &duped_shared_memory_handle)) { |
| 58 DVLOG(ERROR) << "Failed to duplicate shared memory handle."; | 58 DVLOG(0) << "Failed to duplicate shared memory handle."; |
| 59 return false; | 59 return false; |
| 60 } | 60 } |
| 61 scoped_ptr<SharedMemory> duped_shared_memory( | 61 scoped_ptr<SharedMemory> duped_shared_memory( |
| 62 new SharedMemory(duped_shared_memory_handle, false)); | 62 new SharedMemory(duped_shared_memory_handle, false)); |
| 63 | 63 |
| 64 // Map the shared memory into this process. This validates the size. | 64 // Map the shared memory into this process. This validates the size. |
| 65 if (!duped_shared_memory->Map(size)) { | 65 if (!duped_shared_memory->Map(size)) { |
| 66 DVLOG(ERROR) << "Failed to map shared memory."; | 66 DVLOG(0) << "Failed to map shared memory."; |
| 67 return false; | 67 return false; |
| 68 } | 68 } |
| 69 | 69 |
| 70 // If it could be mapped register the shared memory with the ID. | 70 // If it could be mapped register the shared memory with the ID. |
| 71 Buffer buffer; | 71 Buffer buffer; |
| 72 buffer.ptr = duped_shared_memory->memory(); | 72 buffer.ptr = duped_shared_memory->memory(); |
| 73 buffer.size = size; | 73 buffer.size = size; |
| 74 buffer.shared_memory = duped_shared_memory.release(); | 74 buffer.shared_memory = duped_shared_memory.release(); |
| 75 | 75 |
| 76 shared_memory_bytes_allocated_ += size; | 76 shared_memory_bytes_allocated_ += size; |
| 77 TRACE_COUNTER_ID1( | 77 TRACE_COUNTER_ID1( |
| 78 "gpu", "GpuTransferBufferMemory", this, shared_memory_bytes_allocated_); | 78 "gpu", "GpuTransferBufferMemory", this, shared_memory_bytes_allocated_); |
| 79 | 79 |
| 80 registered_buffers_[id] = buffer; | 80 registered_buffers_[id] = buffer; |
| 81 | 81 |
| 82 return true; | 82 return true; |
| 83 } | 83 } |
| 84 | 84 |
| 85 void TransferBufferManager::DestroyTransferBuffer(int32 id) { | 85 void TransferBufferManager::DestroyTransferBuffer(int32 id) { |
| 86 BufferMap::iterator it = registered_buffers_.find(id); | 86 BufferMap::iterator it = registered_buffers_.find(id); |
| 87 if (it == registered_buffers_.end()) { | 87 if (it == registered_buffers_.end()) { |
| 88 DVLOG(ERROR) << "Transfer buffer ID was not registered."; | 88 DVLOG(0) << "Transfer buffer ID was not registered."; |
| 89 return; | 89 return; |
| 90 } | 90 } |
| 91 | 91 |
| 92 DCHECK(shared_memory_bytes_allocated_ >= it->second.size); | 92 DCHECK(shared_memory_bytes_allocated_ >= it->second.size); |
| 93 shared_memory_bytes_allocated_ -= it->second.size; | 93 shared_memory_bytes_allocated_ -= it->second.size; |
| 94 TRACE_COUNTER_ID1( | 94 TRACE_COUNTER_ID1( |
| 95 "CommandBuffer", "SharedMemory", this, shared_memory_bytes_allocated_); | 95 "CommandBuffer", "SharedMemory", this, shared_memory_bytes_allocated_); |
| 96 | 96 |
| 97 delete it->second.shared_memory; | 97 delete it->second.shared_memory; |
| 98 registered_buffers_.erase(it); | 98 registered_buffers_.erase(it); |
| 99 } | 99 } |
| 100 | 100 |
| 101 Buffer TransferBufferManager::GetTransferBuffer(int32 id) { | 101 Buffer TransferBufferManager::GetTransferBuffer(int32 id) { |
| 102 if (id == 0) | 102 if (id == 0) |
| 103 return Buffer(); | 103 return Buffer(); |
| 104 | 104 |
| 105 BufferMap::iterator it = registered_buffers_.find(id); | 105 BufferMap::iterator it = registered_buffers_.find(id); |
| 106 if (it == registered_buffers_.end()) | 106 if (it == registered_buffers_.end()) |
| 107 return Buffer(); | 107 return Buffer(); |
| 108 | 108 |
| 109 return it->second; | 109 return it->second; |
| 110 } | 110 } |
| 111 | 111 |
| 112 } // namespace gpu | 112 } // namespace gpu |
| 113 | 113 |
| OLD | NEW |