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

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

Issue 871043003: base: Improve DiscardableSharedMemory support for ashmem. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add missing return statement Created 5 years, 11 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/memory/discardable_shared_memory.h" 7 #include "base/memory/discardable_shared_memory.h"
8 #include "base/process/process_metrics.h" 8 #include "base/process/process_metrics.h"
9 #include "content/child/child_thread.h" 9 #include "content/child/child_thread.h"
10 #include "content/common/child_process_messages.h" 10 #include "content/common/child_process_messages.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 for (;;) { 66 for (;;) {
67 // Search free list for available space. 67 // Search free list for available space.
68 scoped_ptr<DiscardableSharedMemoryHeap::Span> free_span = 68 scoped_ptr<DiscardableSharedMemoryHeap::Span> free_span =
69 heap_.SearchFreeList(pages); 69 heap_.SearchFreeList(pages);
70 if (!free_span.get()) 70 if (!free_span.get())
71 break; 71 break;
72 72
73 // Attempt to lock |free_span|. Delete span and search free list again 73 // Attempt to lock |free_span|. Delete span and search free list again
74 // if locking failed. 74 // if locking failed.
75 if (!free_span->shared_memory()->Lock( 75 if (free_span->shared_memory()->Lock(
76 free_span->start() * base::GetPageSize() - 76 free_span->start() * base::GetPageSize() -
77 reinterpret_cast<size_t>(free_span->shared_memory()->memory()), 77 reinterpret_cast<size_t>(free_span->shared_memory()->memory()),
78 free_span->length() * base::GetPageSize())) { 78 free_span->length() * base::GetPageSize()) !=
79 base::DiscardableSharedMemory::SUCCESS) {
79 heap_.DeleteSpan(free_span.Pass()); 80 heap_.DeleteSpan(free_span.Pass());
80 continue; 81 continue;
81 } 82 }
82 83
83 return make_scoped_ptr( 84 return make_scoped_ptr(
84 new DiscardableMemoryShmemChunkImpl(this, free_span.Pass())); 85 new DiscardableMemoryShmemChunkImpl(this, free_span.Pass()));
85 } 86 }
86 87
87 size_t pages_to_allocate = 88 size_t pages_to_allocate =
88 std::max(kAllocationSize / base::GetPageSize(), pages); 89 std::max(kAllocationSize / base::GetPageSize(), pages);
(...skipping 18 matching lines...) Expand all
107 heap_.MergeIntoFreeList(leftover.Pass()); 108 heap_.MergeIntoFreeList(leftover.Pass());
108 } 109 }
109 110
110 return make_scoped_ptr( 111 return make_scoped_ptr(
111 new DiscardableMemoryShmemChunkImpl(this, new_span.Pass())); 112 new DiscardableMemoryShmemChunkImpl(this, new_span.Pass()));
112 } 113 }
113 114
114 bool ChildDiscardableSharedMemoryManager::LockSpan( 115 bool ChildDiscardableSharedMemoryManager::LockSpan(
115 DiscardableSharedMemoryHeap::Span* span) { 116 DiscardableSharedMemoryHeap::Span* span) {
116 base::AutoLock lock(lock_); 117 base::AutoLock lock(lock_);
117 return span->shared_memory()->Lock( 118
118 span->start() * base::GetPageSize() - 119 size_t offset = span->start() * base::GetPageSize() -
119 reinterpret_cast<size_t>(span->shared_memory()->memory()), 120 reinterpret_cast<size_t>(span->shared_memory()->memory());
120 span->length() * base::GetPageSize()); 121 size_t length = span->length() * base::GetPageSize();
122
123 switch (span->shared_memory()->Lock(offset, length)) {
124 case base::DiscardableSharedMemory::SUCCESS:
125 return true;
126 case base::DiscardableSharedMemory::PURGED:
127 span->shared_memory()->Unlock(offset, length);
128 return false;
129 case base::DiscardableSharedMemory::FAILED:
130 return false;
131 }
132
133 NOTREACHED();
134 return false;
121 } 135 }
122 136
123 void ChildDiscardableSharedMemoryManager::UnlockSpan( 137 void ChildDiscardableSharedMemoryManager::UnlockSpan(
124 DiscardableSharedMemoryHeap::Span* span) { 138 DiscardableSharedMemoryHeap::Span* span) {
125 base::AutoLock lock(lock_); 139 base::AutoLock lock(lock_);
126 return span->shared_memory()->Unlock( 140
127 span->start() * base::GetPageSize() - 141 size_t offset = span->start() * base::GetPageSize() -
128 reinterpret_cast<size_t>(span->shared_memory()->memory()), 142 reinterpret_cast<size_t>(span->shared_memory()->memory());
129 span->length() * base::GetPageSize()); 143 size_t length = span->length() * base::GetPageSize();
144
145 return span->shared_memory()->Unlock(offset, length);
130 } 146 }
131 147
132 bool ChildDiscardableSharedMemoryManager::IsSpanResident( 148 bool ChildDiscardableSharedMemoryManager::IsSpanResident(
133 DiscardableSharedMemoryHeap::Span* span) const { 149 DiscardableSharedMemoryHeap::Span* span) const {
134 base::AutoLock lock(lock_); 150 base::AutoLock lock(lock_);
135 return span->shared_memory()->IsMemoryResident(); 151 return span->shared_memory()->IsMemoryResident();
136 } 152 }
137 153
138 void ChildDiscardableSharedMemoryManager::ReleaseSpan( 154 void ChildDiscardableSharedMemoryManager::ReleaseSpan(
139 scoped_ptr<DiscardableSharedMemoryHeap::Span> span) { 155 scoped_ptr<DiscardableSharedMemoryHeap::Span> span) {
(...skipping 21 matching lines...) Expand all
161 sender_->Send( 177 sender_->Send(
162 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory( 178 new ChildProcessHostMsg_SyncAllocateLockedDiscardableSharedMemory(
163 size, &handle)); 179 size, &handle));
164 scoped_ptr<base::DiscardableSharedMemory> memory( 180 scoped_ptr<base::DiscardableSharedMemory> memory(
165 new base::DiscardableSharedMemory(handle)); 181 new base::DiscardableSharedMemory(handle));
166 CHECK(memory->Map(size)); 182 CHECK(memory->Map(size));
167 return memory.Pass(); 183 return memory.Pass();
168 } 184 }
169 185
170 } // namespace content 186 } // namespace content
OLDNEW
« no previous file with comments | « base/memory/discardable_shared_memory_unittest.cc ('k') | content/common/host_discardable_shared_memory_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698