OLD | NEW |
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 "base/memory/discardable_shared_memory.h" | 5 #include "base/memory/discardable_shared_memory.h" |
6 | 6 |
7 #if defined(OS_POSIX) && !defined(OS_NACL) | 7 #if defined(OS_POSIX) && !defined(OS_NACL) |
8 // For madvise() which is available on all POSIX compatible systems. | 8 // For madvise() which is available on all POSIX compatible systems. |
9 #include <sys/mman.h> | 9 #include <sys/mman.h> |
10 #endif | 10 #endif |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 | 115 |
116 DiscardableSharedMemory::~DiscardableSharedMemory() { | 116 DiscardableSharedMemory::~DiscardableSharedMemory() { |
117 } | 117 } |
118 | 118 |
119 bool DiscardableSharedMemory::CreateAndMap(size_t size) { | 119 bool DiscardableSharedMemory::CreateAndMap(size_t size) { |
120 CheckedNumeric<size_t> checked_size = size; | 120 CheckedNumeric<size_t> checked_size = size; |
121 checked_size += AlignToPageSize(sizeof(SharedState)); | 121 checked_size += AlignToPageSize(sizeof(SharedState)); |
122 if (!checked_size.IsValid()) | 122 if (!checked_size.IsValid()) |
123 return false; | 123 return false; |
124 | 124 |
125 #if defined(OS_MACOSX) && !defined(OS_IOS) | |
126 // DiscardableSharedMemory does not yet support a Mach-implementation, so | |
127 // force the underlying primitive to be a POSIX fd. https://crbug.com/547239. | |
128 if (!shared_memory_.CreateAndMapAnonymousPosix(checked_size.ValueOrDie())) | |
129 return false; | |
130 #else | |
131 if (!shared_memory_.CreateAndMapAnonymous(checked_size.ValueOrDie())) | 125 if (!shared_memory_.CreateAndMapAnonymous(checked_size.ValueOrDie())) |
132 return false; | 126 return false; |
133 #endif // defined(OS_MACOSX) && !defined(OS_IOS) | |
134 | 127 |
135 mapped_size_ = | 128 mapped_size_ = |
136 shared_memory_.mapped_size() - AlignToPageSize(sizeof(SharedState)); | 129 shared_memory_.mapped_size() - AlignToPageSize(sizeof(SharedState)); |
137 | 130 |
138 locked_page_count_ = AlignToPageSize(mapped_size_) / base::GetPageSize(); | 131 locked_page_count_ = AlignToPageSize(mapped_size_) / base::GetPageSize(); |
139 #if DCHECK_IS_ON() | 132 #if DCHECK_IS_ON() |
140 for (size_t page = 0; page < locked_page_count_; ++page) | 133 for (size_t page = 0; page < locked_page_count_; ++page) |
141 locked_pages_.insert(page); | 134 locked_pages_.insert(page); |
142 #endif | 135 #endif |
143 | 136 |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 | 407 |
415 void DiscardableSharedMemory::Close() { | 408 void DiscardableSharedMemory::Close() { |
416 shared_memory_.Close(); | 409 shared_memory_.Close(); |
417 } | 410 } |
418 | 411 |
419 Time DiscardableSharedMemory::Now() const { | 412 Time DiscardableSharedMemory::Now() const { |
420 return Time::Now(); | 413 return Time::Now(); |
421 } | 414 } |
422 | 415 |
423 } // namespace base | 416 } // namespace base |
OLD | NEW |