Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: content/child/child_discardable_shared_memory_manager.cc

Issue 1035313002: content: Remove non-thread-safe use of WeakPtrs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cl format Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/child/child_discardable_shared_memory_manager.h" 5 #include "content/child/child_discardable_shared_memory_manager.h"
6 6
7 #include "base/atomic_sequence_num.h" 7 #include "base/atomic_sequence_num.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/debug/crash_logging.h" 9 #include "base/debug/crash_logging.h"
10 #include "base/memory/discardable_memory.h" 10 #include "base/memory/discardable_memory.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 64 }
65 65
66 private: 66 private:
67 ChildDiscardableSharedMemoryManager* const manager_; 67 ChildDiscardableSharedMemoryManager* const manager_;
68 scoped_ptr<DiscardableSharedMemoryHeap::Span> span_; 68 scoped_ptr<DiscardableSharedMemoryHeap::Span> span_;
69 bool is_locked_; 69 bool is_locked_;
70 70
71 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryImpl); 71 DISALLOW_COPY_AND_ASSIGN(DiscardableMemoryImpl);
72 }; 72 };
73 73
74 void SendDeletedDiscardableSharedMemoryMessage(
75 scoped_refptr<ThreadSafeSender> sender,
76 DiscardableSharedMemoryId id) {
77 sender->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
78 }
79
74 } // namespace 80 } // namespace
75 81
76 ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager( 82 ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager(
77 ThreadSafeSender* sender) 83 ThreadSafeSender* sender)
78 : heap_(base::GetPageSize()), sender_(sender), weak_ptr_factory_(this) { 84 : heap_(base::GetPageSize()), sender_(sender) {
79 } 85 }
80 86
81 ChildDiscardableSharedMemoryManager::~ChildDiscardableSharedMemoryManager() { 87 ChildDiscardableSharedMemoryManager::~ChildDiscardableSharedMemoryManager() {
82 // Cancel all DeletedDiscardableSharedMemory callbacks.
83 weak_ptr_factory_.InvalidateWeakPtrs();
84
85 // TODO(reveman): Determine if this DCHECK can be enabled. crbug.com/430533 88 // TODO(reveman): Determine if this DCHECK can be enabled. crbug.com/430533
86 // DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists()); 89 // DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists());
87 if (heap_.GetSize()) 90 if (heap_.GetSize())
88 MemoryUsageChanged(0, 0); 91 MemoryUsageChanged(0, 0);
89 } 92 }
90 93
91 scoped_ptr<base::DiscardableMemory> 94 scoped_ptr<base::DiscardableMemory>
92 ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( 95 ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(
93 size_t size) { 96 size_t size) {
94 base::AutoLock lock(lock_); 97 base::AutoLock lock(lock_);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 DiscardableSharedMemoryId new_id = 163 DiscardableSharedMemoryId new_id =
161 g_next_discardable_shared_memory_id.GetNext(); 164 g_next_discardable_shared_memory_id.GetNext();
162 165
163 // Ask parent process to allocate a new discardable shared memory segment. 166 // Ask parent process to allocate a new discardable shared memory segment.
164 scoped_ptr<base::DiscardableSharedMemory> shared_memory( 167 scoped_ptr<base::DiscardableSharedMemory> shared_memory(
165 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id)); 168 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id));
166 169
167 // Create span for allocated memory. 170 // Create span for allocated memory.
168 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow( 171 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow(
169 shared_memory.Pass(), allocation_size_in_bytes, 172 shared_memory.Pass(), allocation_size_in_bytes,
170 base::Bind( 173 base::Bind(&SendDeletedDiscardableSharedMemoryMessage, sender_, new_id)));
171 &ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory,
172 weak_ptr_factory_.GetWeakPtr(), new_id)));
173 174
174 // Unlock and insert any left over memory into free lists. 175 // Unlock and insert any left over memory into free lists.
175 if (pages < pages_to_allocate) { 176 if (pages < pages_to_allocate) {
176 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = 177 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover =
177 heap_.Split(new_span.get(), pages); 178 heap_.Split(new_span.get(), pages);
178 leftover->shared_memory()->Unlock( 179 leftover->shared_memory()->Unlock(
179 leftover->start() * base::GetPageSize() - 180 leftover->start() * base::GetPageSize() -
180 reinterpret_cast<size_t>(leftover->shared_memory()->memory()), 181 reinterpret_cast<size_t>(leftover->shared_memory()->memory()),
181 leftover->length() * base::GetPageSize()); 182 leftover->length() * base::GetPageSize());
182 heap_.MergeIntoFreeLists(leftover.Pass()); 183 heap_.MergeIntoFreeLists(leftover.Pass());
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 sender_->Send( 265 sender_->Send(
265 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory( 266 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory(
266 size, id, &handle)); 267 size, id, &handle));
267 CHECK(base::SharedMemory::IsHandleValid(handle)); 268 CHECK(base::SharedMemory::IsHandleValid(handle));
268 scoped_ptr<base::DiscardableSharedMemory> memory( 269 scoped_ptr<base::DiscardableSharedMemory> memory(
269 new base::DiscardableSharedMemory(handle)); 270 new base::DiscardableSharedMemory(handle));
270 CHECK(memory->Map(size)); 271 CHECK(memory->Map(size));
271 return memory.Pass(); 272 return memory.Pass();
272 } 273 }
273 274
274 void ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory(
275 DiscardableSharedMemoryId id) {
276 sender_->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
277 }
278
279 void ChildDiscardableSharedMemoryManager::MemoryUsageChanged( 275 void ChildDiscardableSharedMemoryManager::MemoryUsageChanged(
280 size_t new_bytes_total, 276 size_t new_bytes_total,
281 size_t new_bytes_free) const { 277 size_t new_bytes_free) const {
282 TRACE_COUNTER2("renderer", "DiscardableMemoryUsage", "allocated", 278 TRACE_COUNTER2("renderer", "DiscardableMemoryUsage", "allocated",
283 new_bytes_total - new_bytes_free, "free", new_bytes_free); 279 new_bytes_total - new_bytes_free, "free", new_bytes_free);
284 280
285 static const char kDiscardableMemoryAllocatedKey[] = 281 static const char kDiscardableMemoryAllocatedKey[] =
286 "discardable-memory-allocated"; 282 "discardable-memory-allocated";
287 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey, 283 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey,
288 base::Uint64ToString(new_bytes_total)); 284 base::Uint64ToString(new_bytes_total));
289 285
290 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free"; 286 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free";
291 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey, 287 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey,
292 base::Uint64ToString(new_bytes_free)); 288 base::Uint64ToString(new_bytes_free));
293 } 289 }
294 290
295 } // namespace content 291 } // namespace content
OLDNEW
« no previous file with comments | « content/child/child_discardable_shared_memory_manager.h ('k') | content/child/child_thread_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698