OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/common/host_shared_bitmap_manager.h" | 5 #include "content/common/host_shared_bitmap_manager.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/trace_event/process_memory_dump.h" | 10 #include "base/trace_event/process_memory_dump.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 manager_->ChildDeletedSharedBitmap(id); | 67 manager_->ChildDeletedSharedBitmap(id); |
68 } | 68 } |
69 | 69 |
70 void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild( | 70 void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild( |
71 base::ProcessHandle process_handle, | 71 base::ProcessHandle process_handle, |
72 size_t buffer_size, | 72 size_t buffer_size, |
73 const cc::SharedBitmapId& id, | 73 const cc::SharedBitmapId& id, |
74 base::SharedMemoryHandle* shared_memory_handle) { | 74 base::SharedMemoryHandle* shared_memory_handle) { |
75 manager_->AllocateSharedBitmapForChild(process_handle, buffer_size, id, | 75 manager_->AllocateSharedBitmapForChild(process_handle, buffer_size, id, |
76 shared_memory_handle); | 76 shared_memory_handle); |
77 owned_bitmaps_.insert(id); | 77 if (*shared_memory_handle != base::SharedMemory::NULLHandle()) { |
| 78 base::AutoLock lock(lock_); |
| 79 owned_bitmaps_.insert(id); |
| 80 } |
78 } | 81 } |
79 | 82 |
80 void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( | 83 void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( |
81 size_t buffer_size, | 84 size_t buffer_size, |
82 const base::SharedMemoryHandle& handle, | 85 const base::SharedMemoryHandle& handle, |
83 base::ProcessHandle process_handle, | 86 base::ProcessHandle process_handle, |
84 const cc::SharedBitmapId& id) { | 87 const cc::SharedBitmapId& id) { |
85 manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, id); | 88 if (manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, |
86 owned_bitmaps_.insert(id); | 89 id)) { |
| 90 base::AutoLock lock(lock_); |
| 91 owned_bitmaps_.insert(id); |
| 92 } |
87 } | 93 } |
88 | 94 |
89 void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( | 95 void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( |
90 const cc::SharedBitmapId& id) { | 96 const cc::SharedBitmapId& id) { |
91 manager_->ChildDeletedSharedBitmap(id); | 97 manager_->ChildDeletedSharedBitmap(id); |
92 owned_bitmaps_.erase(id); | 98 { |
| 99 base::AutoLock lock(lock_); |
| 100 owned_bitmaps_.erase(id); |
| 101 } |
93 } | 102 } |
94 | 103 |
95 HostSharedBitmapManager::HostSharedBitmapManager() {} | 104 HostSharedBitmapManager::HostSharedBitmapManager() {} |
96 HostSharedBitmapManager::~HostSharedBitmapManager() { | 105 HostSharedBitmapManager::~HostSharedBitmapManager() { |
97 DCHECK(handle_map_.empty()); | 106 DCHECK(handle_map_.empty()); |
98 } | 107 } |
99 | 108 |
100 HostSharedBitmapManager* HostSharedBitmapManager::current() { | 109 HostSharedBitmapManager* HostSharedBitmapManager::current() { |
101 return g_shared_memory_manager.Pointer(); | 110 return g_shared_memory_manager.Pointer(); |
102 } | 111 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 // Generate a global GUID used to share this allocation with renderer | 178 // Generate a global GUID used to share this allocation with renderer |
170 // processes. | 179 // processes. |
171 auto guid = cc::GetSharedBitmapGUIDForTracing(bitmap.first); | 180 auto guid = cc::GetSharedBitmapGUIDForTracing(bitmap.first); |
172 pmd->CreateSharedGlobalAllocatorDump(guid); | 181 pmd->CreateSharedGlobalAllocatorDump(guid); |
173 pmd->AddOwnershipEdge(dump->guid(), guid); | 182 pmd->AddOwnershipEdge(dump->guid(), guid); |
174 } | 183 } |
175 | 184 |
176 return true; | 185 return true; |
177 } | 186 } |
178 | 187 |
179 void HostSharedBitmapManager::ChildAllocatedSharedBitmap( | 188 bool HostSharedBitmapManager::ChildAllocatedSharedBitmap( |
180 size_t buffer_size, | 189 size_t buffer_size, |
181 const base::SharedMemoryHandle& handle, | 190 const base::SharedMemoryHandle& handle, |
182 base::ProcessHandle process_handle, | 191 base::ProcessHandle process_handle, |
183 const cc::SharedBitmapId& id) { | 192 const cc::SharedBitmapId& id) { |
184 base::AutoLock lock(lock_); | 193 base::AutoLock lock(lock_); |
185 if (handle_map_.find(id) != handle_map_.end()) | 194 if (handle_map_.find(id) != handle_map_.end()) |
186 return; | 195 return false; |
187 scoped_refptr<BitmapData> data( | 196 scoped_refptr<BitmapData> data( |
188 new BitmapData(process_handle, buffer_size)); | 197 new BitmapData(process_handle, buffer_size)); |
189 | 198 |
190 handle_map_[id] = data; | 199 handle_map_[id] = data; |
191 #if defined(OS_WIN) | 200 #if defined(OS_WIN) |
192 data->memory = make_scoped_ptr( | 201 data->memory = make_scoped_ptr( |
193 new base::SharedMemory(handle, false, data->process_handle)); | 202 new base::SharedMemory(handle, false, data->process_handle)); |
194 #else | 203 #else |
195 data->memory = | 204 data->memory = |
196 make_scoped_ptr(new base::SharedMemory(handle, false)); | 205 make_scoped_ptr(new base::SharedMemory(handle, false)); |
197 #endif | 206 #endif |
198 data->memory->Map(data->buffer_size); | 207 data->memory->Map(data->buffer_size); |
199 data->memory->Close(); | 208 data->memory->Close(); |
| 209 return true; |
200 } | 210 } |
201 | 211 |
202 void HostSharedBitmapManager::AllocateSharedBitmapForChild( | 212 void HostSharedBitmapManager::AllocateSharedBitmapForChild( |
203 base::ProcessHandle process_handle, | 213 base::ProcessHandle process_handle, |
204 size_t buffer_size, | 214 size_t buffer_size, |
205 const cc::SharedBitmapId& id, | 215 const cc::SharedBitmapId& id, |
206 base::SharedMemoryHandle* shared_memory_handle) { | 216 base::SharedMemoryHandle* shared_memory_handle) { |
207 base::AutoLock lock(lock_); | 217 base::AutoLock lock(lock_); |
208 if (handle_map_.find(id) != handle_map_.end()) { | 218 if (handle_map_.find(id) != handle_map_.end()) { |
209 *shared_memory_handle = base::SharedMemory::NULLHandle(); | 219 *shared_memory_handle = base::SharedMemory::NULLHandle(); |
(...skipping 30 matching lines...) Expand all Loading... |
240 return handle_map_.size(); | 250 return handle_map_.size(); |
241 } | 251 } |
242 | 252 |
243 void HostSharedBitmapManager::FreeSharedMemoryFromMap( | 253 void HostSharedBitmapManager::FreeSharedMemoryFromMap( |
244 const cc::SharedBitmapId& id) { | 254 const cc::SharedBitmapId& id) { |
245 base::AutoLock lock(lock_); | 255 base::AutoLock lock(lock_); |
246 handle_map_.erase(id); | 256 handle_map_.erase(id); |
247 } | 257 } |
248 | 258 |
249 } // namespace content | 259 } // namespace content |
OLD | NEW |