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 |