| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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/metrics/persistent_memory_allocator.h" | 5 #include "base/metrics/persistent_memory_allocator.h" |
| 6 | 6 |
| 7 #include <assert.h> | 7 #include <assert.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #if defined(OS_WIN) | 10 #if defined(OS_WIN) |
| 11 #include "winbase.h" | 11 #include "winbase.h" |
| 12 #elif defined(OS_POSIX) | 12 #elif defined(OS_POSIX) |
| 13 #include <sys/mman.h> | 13 #include <sys/mman.h> |
| 14 #endif | 14 #endif |
| 15 | 15 |
| 16 #include "base/files/memory_mapped_file.h" | 16 #include "base/files/memory_mapped_file.h" |
| 17 #include "base/logging.h" | 17 #include "base/logging.h" |
| 18 #include "base/memory/shared_memory.h" | 18 #include "base/memory/shared_memory.h" |
| 19 #include "base/metrics/histogram_macros.h" | 19 #include "base/metrics/histogram_macros.h" |
| 20 #include "base/metrics/sparse_histogram.h" | 20 #include "base/metrics/sparse_histogram.h" |
| 21 #include "base/numerics/safe_conversions.h" |
| 21 #include "base/threading/thread_restrictions.h" | 22 #include "base/threading/thread_restrictions.h" |
| 22 | 23 |
| 23 namespace { | 24 namespace { |
| 24 | 25 |
| 25 // Limit of memory segment size. It has to fit in an unsigned 32-bit number | 26 // Limit of memory segment size. It has to fit in an unsigned 32-bit number |
| 26 // and should be a power of 2 in order to accomodate almost any page size. | 27 // and should be a power of 2 in order to accomodate almost any page size. |
| 27 const uint32_t kSegmentMaxSize = 1 << 30; // 1 GiB | 28 const uint32_t kSegmentMaxSize = 1 << 30; // 1 GiB |
| 28 | 29 |
| 29 // A constant (random) value placed in the shared metadata to identify | 30 // A constant (random) value placed in the shared metadata to identify |
| 30 // an already initialized memory segment. | 31 // an already initialized memory segment. |
| (...skipping 1085 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 // Real constructor. | 1117 // Real constructor. |
| 1117 DelayedPersistentAllocation::DelayedPersistentAllocation( | 1118 DelayedPersistentAllocation::DelayedPersistentAllocation( |
| 1118 PersistentMemoryAllocator* allocator, | 1119 PersistentMemoryAllocator* allocator, |
| 1119 std::atomic<Reference>* ref, | 1120 std::atomic<Reference>* ref, |
| 1120 uint32_t type, | 1121 uint32_t type, |
| 1121 size_t size, | 1122 size_t size, |
| 1122 size_t offset, | 1123 size_t offset, |
| 1123 bool make_iterable) | 1124 bool make_iterable) |
| 1124 : allocator_(allocator), | 1125 : allocator_(allocator), |
| 1125 type_(type), | 1126 type_(type), |
| 1126 size_(size), | 1127 size_(checked_cast<uint32_t>(size)), |
| 1127 offset_(offset), | 1128 offset_(checked_cast<uint32_t>(offset)), |
| 1128 make_iterable_(make_iterable), | 1129 make_iterable_(make_iterable), |
| 1129 reference_(ref) { | 1130 reference_(ref) { |
| 1130 DCHECK(allocator_); | 1131 DCHECK(allocator_); |
| 1131 DCHECK_NE(0U, type_); | 1132 DCHECK_NE(0U, type_); |
| 1132 DCHECK_LT(0U, size_); | 1133 DCHECK_LT(0U, size_); |
| 1133 DCHECK(reference_); | 1134 DCHECK(reference_); |
| 1134 } | 1135 } |
| 1135 | 1136 |
| 1136 DelayedPersistentAllocation::~DelayedPersistentAllocation() {} | 1137 DelayedPersistentAllocation::~DelayedPersistentAllocation() {} |
| 1137 | 1138 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1168 if (!mem) { | 1169 if (!mem) { |
| 1169 // This should never happen but be tolerant if it does as corruption from | 1170 // This should never happen but be tolerant if it does as corruption from |
| 1170 // the outside is something to guard against. | 1171 // the outside is something to guard against. |
| 1171 NOTREACHED(); | 1172 NOTREACHED(); |
| 1172 return nullptr; | 1173 return nullptr; |
| 1173 } | 1174 } |
| 1174 return mem + offset_; | 1175 return mem + offset_; |
| 1175 } | 1176 } |
| 1176 | 1177 |
| 1177 } // namespace base | 1178 } // namespace base |
| OLD | NEW |