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

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: Created 5 years, 9 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 DeletedDiscardableSharedMemory(
Avi (use Gerrit) 2015/03/27 21:13:01 We name functions based on what they do, not when
reveman 2015/03/27 21:27:34 Hm, this is supposed to handle the notification th
Avi (use Gerrit) 2015/03/27 21:38:46 Something like SendMemoryDeletedMessage?. I'm look
reveman 2015/03/27 21:53:52 SendDeletedDiscardableSharedMemoryMessage where "D
75 scoped_refptr<ThreadSafeSender> sender, DiscardableSharedMemoryId id) {
76 sender->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
77 }
78
74 } // namespace 79 } // namespace
75 80
76 ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager( 81 ChildDiscardableSharedMemoryManager::ChildDiscardableSharedMemoryManager(
77 ThreadSafeSender* sender) 82 ThreadSafeSender* sender) : heap_(base::GetPageSize()), sender_(sender) {
78 : heap_(base::GetPageSize()), sender_(sender), weak_ptr_factory_(this) {
79 } 83 }
80 84
81 ChildDiscardableSharedMemoryManager::~ChildDiscardableSharedMemoryManager() { 85 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 86 // TODO(reveman): Determine if this DCHECK can be enabled. crbug.com/430533
86 // DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists()); 87 // DCHECK_EQ(heap_.GetSize(), heap_.GetSizeOfFreeLists());
87 if (heap_.GetSize()) 88 if (heap_.GetSize())
88 MemoryUsageChanged(0, 0); 89 MemoryUsageChanged(0, 0);
89 } 90 }
90 91
91 scoped_ptr<base::DiscardableMemory> 92 scoped_ptr<base::DiscardableMemory>
92 ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory( 93 ChildDiscardableSharedMemoryManager::AllocateLockedDiscardableMemory(
93 size_t size) { 94 size_t size) {
94 base::AutoLock lock(lock_); 95 base::AutoLock lock(lock_);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 DiscardableSharedMemoryId new_id = 161 DiscardableSharedMemoryId new_id =
161 g_next_discardable_shared_memory_id.GetNext(); 162 g_next_discardable_shared_memory_id.GetNext();
162 163
163 // Ask parent process to allocate a new discardable shared memory segment. 164 // Ask parent process to allocate a new discardable shared memory segment.
164 scoped_ptr<base::DiscardableSharedMemory> shared_memory( 165 scoped_ptr<base::DiscardableSharedMemory> shared_memory(
165 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id)); 166 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id));
166 167
167 // Create span for allocated memory. 168 // Create span for allocated memory.
168 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow( 169 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow(
169 shared_memory.Pass(), allocation_size_in_bytes, 170 shared_memory.Pass(), allocation_size_in_bytes,
170 base::Bind( 171 base::Bind(&DeletedDiscardableSharedMemory, sender_, new_id)));
171 &ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory,
172 weak_ptr_factory_.GetWeakPtr(), new_id)));
173 172
174 // Unlock and insert any left over memory into free lists. 173 // Unlock and insert any left over memory into free lists.
175 if (pages < pages_to_allocate) { 174 if (pages < pages_to_allocate) {
176 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = 175 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover =
177 heap_.Split(new_span.get(), pages); 176 heap_.Split(new_span.get(), pages);
178 leftover->shared_memory()->Unlock( 177 leftover->shared_memory()->Unlock(
179 leftover->start() * base::GetPageSize() - 178 leftover->start() * base::GetPageSize() -
180 reinterpret_cast<size_t>(leftover->shared_memory()->memory()), 179 reinterpret_cast<size_t>(leftover->shared_memory()->memory()),
181 leftover->length() * base::GetPageSize()); 180 leftover->length() * base::GetPageSize());
182 heap_.MergeIntoFreeLists(leftover.Pass()); 181 heap_.MergeIntoFreeLists(leftover.Pass());
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 sender_->Send( 263 sender_->Send(
265 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory( 264 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory(
266 size, id, &handle)); 265 size, id, &handle));
267 CHECK(base::SharedMemory::IsHandleValid(handle)); 266 CHECK(base::SharedMemory::IsHandleValid(handle));
268 scoped_ptr<base::DiscardableSharedMemory> memory( 267 scoped_ptr<base::DiscardableSharedMemory> memory(
269 new base::DiscardableSharedMemory(handle)); 268 new base::DiscardableSharedMemory(handle));
270 CHECK(memory->Map(size)); 269 CHECK(memory->Map(size));
271 return memory.Pass(); 270 return memory.Pass();
272 } 271 }
273 272
274 void ChildDiscardableSharedMemoryManager::DeletedDiscardableSharedMemory(
275 DiscardableSharedMemoryId id) {
276 sender_->Send(new ChildProcessHostMsg_DeletedDiscardableSharedMemory(id));
277 }
278
279 void ChildDiscardableSharedMemoryManager::MemoryUsageChanged( 273 void ChildDiscardableSharedMemoryManager::MemoryUsageChanged(
280 size_t new_bytes_total, 274 size_t new_bytes_total,
281 size_t new_bytes_free) const { 275 size_t new_bytes_free) const {
282 TRACE_COUNTER2("renderer", "DiscardableMemoryUsage", "allocated", 276 TRACE_COUNTER2("renderer", "DiscardableMemoryUsage", "allocated",
283 new_bytes_total - new_bytes_free, "free", new_bytes_free); 277 new_bytes_total - new_bytes_free, "free", new_bytes_free);
284 278
285 static const char kDiscardableMemoryAllocatedKey[] = 279 static const char kDiscardableMemoryAllocatedKey[] =
286 "discardable-memory-allocated"; 280 "discardable-memory-allocated";
287 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey, 281 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey,
288 base::Uint64ToString(new_bytes_total)); 282 base::Uint64ToString(new_bytes_total));
289 283
290 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free"; 284 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free";
291 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey, 285 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey,
292 base::Uint64ToString(new_bytes_free)); 286 base::Uint64ToString(new_bytes_free));
293 } 287 }
294 288
295 } // namespace content 289 } // 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