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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
56 | 56 |
57 base::LazyInstance<HostSharedBitmapManager> g_shared_memory_manager = | 57 base::LazyInstance<HostSharedBitmapManager> g_shared_memory_manager = |
58 LAZY_INSTANCE_INITIALIZER; | 58 LAZY_INSTANCE_INITIALIZER; |
59 | 59 |
60 HostSharedBitmapManagerClient::HostSharedBitmapManagerClient( | 60 HostSharedBitmapManagerClient::HostSharedBitmapManagerClient( |
61 HostSharedBitmapManager* manager) | 61 HostSharedBitmapManager* manager) |
62 : manager_(manager) { | 62 : manager_(manager) { |
63 } | 63 } |
64 | 64 |
65 HostSharedBitmapManagerClient::~HostSharedBitmapManagerClient() { | 65 HostSharedBitmapManagerClient::~HostSharedBitmapManagerClient() { |
66 base::AutoLock lock(lock_); | |
66 for (const auto& id : owned_bitmaps_) | 67 for (const auto& id : owned_bitmaps_) |
67 manager_->ChildDeletedSharedBitmap(id); | 68 manager_->ChildDeletedSharedBitmap(id); |
68 } | 69 } |
69 | 70 |
70 void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild( | 71 void HostSharedBitmapManagerClient::AllocateSharedBitmapForChild( |
71 base::ProcessHandle process_handle, | 72 base::ProcessHandle process_handle, |
72 size_t buffer_size, | 73 size_t buffer_size, |
73 const cc::SharedBitmapId& id, | 74 const cc::SharedBitmapId& id, |
74 base::SharedMemoryHandle* shared_memory_handle) { | 75 base::SharedMemoryHandle* shared_memory_handle) { |
76 base::AutoLock lock(lock_); | |
piman
2015/11/24 01:39:58
Is it possible to lock only when accessing the map
| |
75 manager_->AllocateSharedBitmapForChild(process_handle, buffer_size, id, | 77 manager_->AllocateSharedBitmapForChild(process_handle, buffer_size, id, |
76 shared_memory_handle); | 78 shared_memory_handle); |
77 owned_bitmaps_.insert(id); | 79 owned_bitmaps_.insert(id); |
78 } | 80 } |
79 | 81 |
80 void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( | 82 void HostSharedBitmapManagerClient::ChildAllocatedSharedBitmap( |
81 size_t buffer_size, | 83 size_t buffer_size, |
82 const base::SharedMemoryHandle& handle, | 84 const base::SharedMemoryHandle& handle, |
83 base::ProcessHandle process_handle, | 85 base::ProcessHandle process_handle, |
84 const cc::SharedBitmapId& id) { | 86 const cc::SharedBitmapId& id) { |
87 base::AutoLock lock(lock_); | |
85 manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, id); | 88 manager_->ChildAllocatedSharedBitmap(buffer_size, handle, process_handle, id); |
86 owned_bitmaps_.insert(id); | 89 owned_bitmaps_.insert(id); |
87 } | 90 } |
88 | 91 |
89 void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( | 92 void HostSharedBitmapManagerClient::ChildDeletedSharedBitmap( |
90 const cc::SharedBitmapId& id) { | 93 const cc::SharedBitmapId& id) { |
94 base::AutoLock lock(lock_); | |
91 manager_->ChildDeletedSharedBitmap(id); | 95 manager_->ChildDeletedSharedBitmap(id); |
92 owned_bitmaps_.erase(id); | 96 owned_bitmaps_.erase(id); |
93 } | 97 } |
94 | 98 |
95 HostSharedBitmapManager::HostSharedBitmapManager() {} | 99 HostSharedBitmapManager::HostSharedBitmapManager() {} |
96 HostSharedBitmapManager::~HostSharedBitmapManager() { | 100 HostSharedBitmapManager::~HostSharedBitmapManager() { |
97 DCHECK(handle_map_.empty()); | 101 DCHECK(handle_map_.empty()); |
98 } | 102 } |
99 | 103 |
100 HostSharedBitmapManager* HostSharedBitmapManager::current() { | 104 HostSharedBitmapManager* HostSharedBitmapManager::current() { |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 return handle_map_.size(); | 244 return handle_map_.size(); |
241 } | 245 } |
242 | 246 |
243 void HostSharedBitmapManager::FreeSharedMemoryFromMap( | 247 void HostSharedBitmapManager::FreeSharedMemoryFromMap( |
244 const cc::SharedBitmapId& id) { | 248 const cc::SharedBitmapId& id) { |
245 base::AutoLock lock(lock_); | 249 base::AutoLock lock(lock_); |
246 handle_map_.erase(id); | 250 handle_map_.erase(id); |
247 } | 251 } |
248 | 252 |
249 } // namespace content | 253 } // namespace content |
OLD | NEW |