Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: base/shared_memory_unittest.cc

Issue 12537014: Make SharedMemory track the size that was actually mapped (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/shared_memory_posix.cc ('k') | base/shared_memory_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/basictypes.h" 5 #include "base/basictypes.h"
6 #if defined(OS_MACOSX) 6 #if defined(OS_MACOSX)
7 #include "base/mac/scoped_nsautorelease_pool.h" 7 #include "base/mac/scoped_nsautorelease_pool.h"
8 #endif 8 #endif
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/shared_memory.h" 10 #include "base/shared_memory.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 << Time::Now().ToDoubleT(); 190 << Time::Now().ToDoubleT();
191 std::string test_name = test_name_stream.str(); 191 std::string test_name = test_name_stream.str();
192 192
193 // Open two handles to a memory segment and check that open_existing works 193 // Open two handles to a memory segment and check that open_existing works
194 // as expected. 194 // as expected.
195 SharedMemory memory1; 195 SharedMemory memory1;
196 bool rv = memory1.CreateNamed(test_name, false, kDataSize); 196 bool rv = memory1.CreateNamed(test_name, false, kDataSize);
197 EXPECT_TRUE(rv); 197 EXPECT_TRUE(rv);
198 198
199 // Memory1 knows it's size because it created it. 199 // Memory1 knows it's size because it created it.
200 EXPECT_EQ(memory1.created_size(), kDataSize); 200 EXPECT_EQ(memory1.requested_size(), kDataSize);
201 201
202 rv = memory1.Map(kDataSize); 202 rv = memory1.Map(kDataSize);
203 EXPECT_TRUE(rv); 203 EXPECT_TRUE(rv);
204 204
205 // The mapped memory1 must be at least the size we asked for.
206 EXPECT_GE(memory1.mapped_size(), kDataSize);
207
208 // The mapped memory1 shouldn't exceed rounding for allocation granularity.
209 EXPECT_LT(memory1.mapped_size(),
210 kDataSize + base::SysInfo::VMAllocationGranularity());
211
205 memset(memory1.memory(), 'G', kDataSize); 212 memset(memory1.memory(), 'G', kDataSize);
206 213
207 SharedMemory memory2; 214 SharedMemory memory2;
208 // Should not be able to create if openExisting is false. 215 // Should not be able to create if openExisting is false.
209 rv = memory2.CreateNamed(test_name, false, kDataSize2); 216 rv = memory2.CreateNamed(test_name, false, kDataSize2);
210 EXPECT_FALSE(rv); 217 EXPECT_FALSE(rv);
211 218
212 // Should be able to create with openExisting true. 219 // Should be able to create with openExisting true.
213 rv = memory2.CreateNamed(test_name, true, kDataSize2); 220 rv = memory2.CreateNamed(test_name, true, kDataSize2);
214 EXPECT_TRUE(rv); 221 EXPECT_TRUE(rv);
215 222
216 // Memory2 shouldn't know the size because we didn't create it. 223 // Memory2 shouldn't know the size because we didn't create it.
217 EXPECT_EQ(memory2.created_size(), 0U); 224 EXPECT_EQ(memory2.requested_size(), 0U);
218 225
219 // We should be able to map the original size. 226 // We should be able to map the original size.
220 rv = memory2.Map(kDataSize); 227 rv = memory2.Map(kDataSize);
221 EXPECT_TRUE(rv); 228 EXPECT_TRUE(rv);
222 229
230 // The mapped memory2 must be at least the size of the original.
231 EXPECT_GE(memory2.mapped_size(), kDataSize);
232
233 // The mapped memory2 shouldn't exceed rounding for allocation granularity.
234 EXPECT_LT(memory2.mapped_size(),
235 kDataSize2 + base::SysInfo::VMAllocationGranularity());
236
223 // Verify that opening memory2 didn't truncate or delete memory 1. 237 // Verify that opening memory2 didn't truncate or delete memory 1.
224 char *start_ptr = static_cast<char *>(memory2.memory()); 238 char *start_ptr = static_cast<char *>(memory2.memory());
225 char *end_ptr = start_ptr + kDataSize; 239 char *end_ptr = start_ptr + kDataSize;
226 for (char* ptr = start_ptr; ptr < end_ptr; ptr++) { 240 for (char* ptr = start_ptr; ptr < end_ptr; ptr++) {
227 EXPECT_EQ(*ptr, 'G'); 241 EXPECT_EQ(*ptr, 'G');
228 } 242 }
229 243
230 memory1.Close(); 244 memory1.Close();
231 memory2.Close(); 245 memory2.Close();
232 246
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC. 389 // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC.
376 TEST(SharedMemoryTest, AnonymousExecutable) { 390 TEST(SharedMemoryTest, AnonymousExecutable) {
377 const uint32 kTestSize = 1 << 16; 391 const uint32 kTestSize = 1 << 16;
378 392
379 SharedMemory shared_memory; 393 SharedMemory shared_memory;
380 SharedMemoryCreateOptions options; 394 SharedMemoryCreateOptions options;
381 options.size = kTestSize; 395 options.size = kTestSize;
382 options.executable = true; 396 options.executable = true;
383 397
384 EXPECT_TRUE(shared_memory.Create(options)); 398 EXPECT_TRUE(shared_memory.Create(options));
385 EXPECT_TRUE(shared_memory.Map(shared_memory.created_size())); 399 EXPECT_TRUE(shared_memory.Map(shared_memory.requested_size()));
386 400
387 EXPECT_EQ(0, mprotect(shared_memory.memory(), shared_memory.created_size(), 401 EXPECT_EQ(0, mprotect(shared_memory.memory(), shared_memory.requested_size(),
388 PROT_READ | PROT_EXEC)); 402 PROT_READ | PROT_EXEC));
389 } 403 }
390 #endif 404 #endif
391 405
392 // Map() will return addresses which are aligned to the platform page size, this 406 // Map() will return addresses which are aligned to the platform page size, this
393 // varies from platform to platform though. Since we'd like to advertise a 407 // varies from platform to platform though. Since we'd like to advertise a
394 // minimum alignment that callers can count on, test for it here. 408 // minimum alignment that callers can count on, test for it here.
395 TEST(SharedMemoryTest, MapMinimumAlignment) { 409 TEST(SharedMemoryTest, MapMinimumAlignment) {
396 static const int kDataSize = 8192; 410 static const int kDataSize = 8192;
397 411
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 SharedMemoryProcessTest::CleanUp(); 483 SharedMemoryProcessTest::CleanUp();
470 } 484 }
471 485
472 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { 486 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) {
473 return SharedMemoryProcessTest::TaskTestMain(); 487 return SharedMemoryProcessTest::TaskTestMain();
474 } 488 }
475 489
476 #endif // !OS_IOS 490 #endif // !OS_IOS
477 491
478 } // namespace base 492 } // namespace base
OLDNEW
« no previous file with comments | « base/shared_memory_posix.cc ('k') | base/shared_memory_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698