| Index: base/shared_memory_unittest.cc
|
| diff --git a/base/shared_memory_unittest.cc b/base/shared_memory_unittest.cc
|
| index bd537692f4880febe1ce12dc9a18e91991296ca4..205a9c408174736872205a1816693ab99e994430 100644
|
| --- a/base/shared_memory_unittest.cc
|
| +++ b/base/shared_memory_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #endif
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/shared_memory.h"
|
| +#include "base/sys_info.h"
|
| #include "base/test/multiprocess_test.h"
|
| #include "base/threading/platform_thread.h"
|
| #include "base/time.h"
|
| @@ -343,6 +344,36 @@ TEST(SharedMemoryTest, AnonymousPrivate) {
|
| }
|
| }
|
|
|
| +TEST(SharedMemoryTest, MapFrom) {
|
| + ASSERT_TRUE(SysInfo::VMAllocationGranularity() >= sizeof(uint32));
|
| + const size_t kCount = SysInfo::VMAllocationGranularity();
|
| + const size_t kDataSize = kCount * sizeof(uint32);
|
| + static const char kTestName[] = "SharedMemoryMapFrom";
|
| +
|
| + SharedMemory memory1;
|
| + memory1.Delete(kTestName);
|
| + ASSERT_TRUE(memory1.CreateNamed(kTestName, false, kDataSize));
|
| + ASSERT_TRUE(memory1.Map(kDataSize));
|
| + uint32* ptr1 = static_cast<uint32*>(memory1.memory());
|
| + ASSERT_NE(ptr1, static_cast<void*>(NULL));
|
| +
|
| + for (size_t i = 0; i < kCount; ++i) {
|
| + ptr1[i] = i;
|
| + }
|
| +
|
| + SharedMemory memory2;
|
| + ASSERT_TRUE(memory2.CreateNamed(kTestName, true, kDataSize));
|
| + off_t offset = SysInfo::VMAllocationGranularity();
|
| + ASSERT_TRUE(memory2.MapFrom(offset, kDataSize - offset));
|
| + offset /= sizeof(uint32);
|
| + uint32* ptr2 = static_cast<uint32*>(memory2.memory());
|
| + ASSERT_NE(ptr2, static_cast<void*>(NULL));
|
| + for (size_t i = offset; i < kCount; ++i) {
|
| + ASSERT_EQ(ptr2[i - offset], i);
|
| + }
|
| + memory1.Delete(kTestName);
|
| +}
|
| +
|
| #if defined(OS_POSIX)
|
| // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC.
|
| TEST(SharedMemoryTest, AnonymousExecutable) {
|
|
|