Chromium Code Reviews| Index: base/memory/shared_memory.h |
| diff --git a/base/memory/shared_memory.h b/base/memory/shared_memory.h |
| index f68c861647c88c1c5ccc280063cecd8a7cf6c05c..bb26d042b0edb9679a41a4e83fe4cbd00380530f 100644 |
| --- a/base/memory/shared_memory.h |
| +++ b/base/memory/shared_memory.h |
| @@ -34,7 +34,10 @@ class FilePath; |
| // Options for creating a shared memory object. |
| struct BASE_EXPORT SharedMemoryCreateOptions { |
| -#if !(defined(OS_MACOSX) && !defined(OS_IOS)) |
| +#if defined(OS_MACOSX) && !defined(OS_IOS) |
| + // The type of OS primitive that should back the SharedMemory object. |
| + SharedMemoryHandle::Type type = SharedMemoryHandle::MACH; |
| +#else |
| // DEPRECATED (crbug.com/345734): |
| // If NULL, the object is anonymous. This pointer is owned by the caller |
| // and must live through the call to Create(). |
| @@ -46,7 +49,7 @@ struct BASE_EXPORT SharedMemoryCreateOptions { |
| // shared memory must not exist. This flag is meaningless unless |
| // name_deprecated is non-NULL. |
| bool open_existing_deprecated = false; |
| -#endif // !(defined(OS_MACOSX) && !defined(OS_IOS)) |
| +#endif // defined(OS_MACOSX) && !defined(OS_IOS) |
| // Size of the shared memory object to be created. |
| // When opening an existing object, this has no effect. |
| @@ -101,7 +104,7 @@ class BASE_EXPORT SharedMemory { |
| // The caller is responsible for destroying the duplicated OS primitive. |
| static SharedMemoryHandle DuplicateHandle(const SharedMemoryHandle& handle); |
| -#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) |
| +#if defined(OS_POSIX) |
| // This method requires that the SharedMemoryHandle is backed by a POSIX fd. |
| static int GetFdFromSharedMemoryHandle(const SharedMemoryHandle& handle); |
| #endif |
| @@ -122,6 +125,16 @@ class BASE_EXPORT SharedMemory { |
| // Returns true on success and false on failure. |
| bool CreateAndMapAnonymous(size_t size); |
| +#if defined(OS_MACOSX) && !defined(OS_IOS) |
| + // These two methods are analogs of CreateAndMapAnonymous and CreateAnonymous |
| + // that force the underlying OS primitive to be a POSIX fd. Do not add new |
| + // uses of these methods unless absolutely necessary, since constructing a |
| + // fd-backed SharedMemory object frequently takes 100ms+. |
| + // http://crbug.com/466437. |
| + bool CreateAndMapAnonymousPosix(size_t size); |
|
erikchen
2016/12/06 19:00:41
Do you need both these methods?
Please only add
lawrencewu
2016/12/06 21:04:40
Removed.
|
| + bool CreateAnonymousPosix(size_t size); |
| +#endif // defined(OS_MACOSX) && !defined(OS_IOS) |
| + |
| // Creates an anonymous shared memory segment of size size. |
| // Returns true on success and false on failure. |
| bool CreateAnonymous(size_t size) { |
| @@ -253,11 +266,12 @@ class BASE_EXPORT SharedMemory { |
| } |
| private: |
| -#if defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) && \ |
| - !(defined(OS_MACOSX) && !defined(OS_IOS)) |
| +#if defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) |
| bool PrepareMapFile(ScopedFILE fp, ScopedFD readonly); |
| +#if !(defined(OS_MACOSX) && !defined(OS_IOS)) |
| bool FilePathForMemoryName(const std::string& mem_name, FilePath* path); |
| #endif |
| +#endif // defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) |
| enum ShareMode { |
| SHARE_READONLY, |
| SHARE_CURRENT_MODE, |
| @@ -276,6 +290,12 @@ class BASE_EXPORT SharedMemory { |
| #elif defined(OS_MACOSX) && !defined(OS_IOS) |
| // The OS primitive that backs the shared memory region. |
| SharedMemoryHandle shm_; |
| + |
| + // The mechanism by which the memory is mapped. Only valid if |memory_| is not |
| + // |nullptr|. |
| + SharedMemoryHandle::Type mapped_memory_mechanism_; |
| + |
| + int readonly_mapped_file_; |
| #elif defined(OS_POSIX) |
| int mapped_file_; |
| int readonly_mapped_file_; |