| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/shared_memory.h" | 5 #include "base/memory/shared_memory.h" | 
| 6 | 6 | 
| 7 #include <errno.h> | 7 #include <errno.h> | 
| 8 #include <fcntl.h> | 8 #include <fcntl.h> | 
| 9 #include <mach/mach_vm.h> | 9 #include <mach/mach_vm.h> | 
| 10 #include <sys/mman.h> | 10 #include <sys/mman.h> | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 46 | 46 | 
| 47   const std::string group_name = | 47   const std::string group_name = | 
| 48       base::FieldTrialList::FindFullName(kTrialName); | 48       base::FieldTrialList::FindFullName(kTrialName); | 
| 49   if (group_name == kTrialMach) { | 49   if (group_name == kTrialMach) { | 
| 50     group = SharedMemoryHandle::MACH; | 50     group = SharedMemoryHandle::MACH; | 
| 51     found_group = true; | 51     found_group = true; | 
| 52   } else if (group_name == kTrialPosix) { | 52   } else if (group_name == kTrialPosix) { | 
| 53     group = SharedMemoryHandle::POSIX; | 53     group = SharedMemoryHandle::POSIX; | 
| 54     found_group = true; | 54     found_group = true; | 
| 55   } else { | 55   } else { | 
| 56     group = SharedMemoryHandle::POSIX; | 56     group = SharedMemoryHandle::MACH; | 
| 57   } | 57   } | 
| 58 | 58 | 
| 59   return group; | 59   return group; | 
| 60 } | 60 } | 
| 61 | 61 | 
| 62 // Emits a histogram entry indicating which type of SharedMemory was created. | 62 // Emits a histogram entry indicating which type of SharedMemory was created. | 
| 63 void EmitMechanism(SharedMemoryHandle::Type type) { | 63 void EmitMechanism(SharedMemoryHandle::Type type) { | 
| 64   UMA_HISTOGRAM_ENUMERATION("OSX.SharedMemory.Mechanism", type, | 64   UMA_HISTOGRAM_ENUMERATION("OSX.SharedMemory.Mechanism", type, | 
| 65                             SharedMemoryHandle::TypeMax); | 65                             SharedMemoryHandle::TypeMax); | 
| 66 } | 66 } | 
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 168         return false; | 168         return false; | 
| 169       } | 169       } | 
| 170     } | 170     } | 
| 171   } | 171   } | 
| 172   return true; | 172   return true; | 
| 173 } | 173 } | 
| 174 | 174 | 
| 175 }  // namespace | 175 }  // namespace | 
| 176 | 176 | 
| 177 SharedMemoryCreateOptions::SharedMemoryCreateOptions() | 177 SharedMemoryCreateOptions::SharedMemoryCreateOptions() | 
| 178     : type(SharedMemoryHandle::POSIX), | 178     : type(SharedMemoryHandle::MACH), | 
| 179       size(0), | 179       size(0), | 
| 180       executable(false), | 180       executable(false), | 
| 181       share_read_only(false) {} | 181       share_read_only(false) { | 
|  | 182   if (mac::IsOSLionOrLater()) { | 
|  | 183     // A/B test the mechanism. Once the experiment is over, this will always be | 
|  | 184     // set to SharedMemoryHandle::MACH. | 
|  | 185     // http://crbug.com/547261 | 
|  | 186     type = GetABTestMechanism(); | 
|  | 187   } else { | 
|  | 188     // Mach shared memory isn't supported on OSX 10.6 or older. | 
|  | 189     type = SharedMemoryHandle::POSIX; | 
|  | 190   } | 
|  | 191 } | 
| 182 | 192 | 
| 183 SharedMemory::SharedMemory() | 193 SharedMemory::SharedMemory() | 
| 184     : mapped_memory_mechanism_(SharedMemoryHandle::POSIX), | 194     : mapped_memory_mechanism_(SharedMemoryHandle::POSIX), | 
| 185       readonly_mapped_file_(-1), | 195       readonly_mapped_file_(-1), | 
| 186       mapped_size_(0), | 196       mapped_size_(0), | 
| 187       memory_(NULL), | 197       memory_(NULL), | 
| 188       read_only_(false), | 198       read_only_(false), | 
| 189       requested_size_(0) {} | 199       requested_size_(0) {} | 
| 190 | 200 | 
| 191 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only) | 201 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only) | 
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 256   return CreateAnonymousPosix(size) && Map(size); | 266   return CreateAnonymousPosix(size) && Map(size); | 
| 257 } | 267 } | 
| 258 | 268 | 
| 259 bool SharedMemory::CreateAnonymousPosix(size_t size) { | 269 bool SharedMemory::CreateAnonymousPosix(size_t size) { | 
| 260   SharedMemoryCreateOptions options; | 270   SharedMemoryCreateOptions options; | 
| 261   options.type = SharedMemoryHandle::POSIX; | 271   options.type = SharedMemoryHandle::POSIX; | 
| 262   options.size = size; | 272   options.size = size; | 
| 263   return Create(options); | 273   return Create(options); | 
| 264 } | 274 } | 
| 265 | 275 | 
| 266 bool SharedMemory::CreateAndMapAnonymousMach(size_t size) { |  | 
| 267   SharedMemoryCreateOptions options; |  | 
| 268 |  | 
| 269   if (mac::IsOSLionOrLater()) { |  | 
| 270     // A/B test the mechanism. Once the experiment is over, this will always be |  | 
| 271     // set to SharedMemoryHandle::MACH. |  | 
| 272     // http://crbug.com/547261 |  | 
| 273     options.type = GetABTestMechanism(); |  | 
| 274   } else { |  | 
| 275     // Mach shared memory isn't supported on OSX 10.6 or older. |  | 
| 276     options.type = SharedMemoryHandle::POSIX; |  | 
| 277   } |  | 
| 278   options.size = size; |  | 
| 279   return Create(options) && Map(size); |  | 
| 280 } |  | 
| 281 |  | 
| 282 // static | 276 // static | 
| 283 bool SharedMemory::GetSizeFromSharedMemoryHandle( | 277 bool SharedMemory::GetSizeFromSharedMemoryHandle( | 
| 284     const SharedMemoryHandle& handle, | 278     const SharedMemoryHandle& handle, | 
| 285     size_t* size) { | 279     size_t* size) { | 
| 286   return handle.GetSize(size); | 280   return handle.GetSize(size); | 
| 287 } | 281 } | 
| 288 | 282 | 
| 289 // Chromium mostly only uses the unique/private shmem as specified by | 283 // Chromium mostly only uses the unique/private shmem as specified by | 
| 290 // "name == L"". The exception is in the StatsTable. | 284 // "name == L"". The exception is in the StatsTable. | 
| 291 bool SharedMemory::Create(const SharedMemoryCreateOptions& options) { | 285 bool SharedMemory::Create(const SharedMemoryCreateOptions& options) { | 
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 497 | 491 | 
| 498   if (close_self) { | 492   if (close_self) { | 
| 499     Unmap(); | 493     Unmap(); | 
| 500     Close(); | 494     Close(); | 
| 501   } | 495   } | 
| 502 | 496 | 
| 503   return true; | 497   return true; | 
| 504 } | 498 } | 
| 505 | 499 | 
| 506 }  // namespace base | 500 }  // namespace base | 
| OLD | NEW | 
|---|