| OLD | NEW | 
|---|
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #include "base/multiprocess_test.h" | 
| 6 #include "base/platform_thread.h" | 7 #include "base/platform_thread.h" | 
| 7 #include "base/scoped_nsautorelease_pool.h" | 8 #include "base/scoped_nsautorelease_pool.h" | 
| 8 #include "base/shared_memory.h" | 9 #include "base/shared_memory.h" | 
| 9 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" | 
| 10 #include "base/test/multiprocess_test.h" |  | 
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" | 
| 12 #include "testing/multiprocess_func_list.h" |  | 
| 13 | 12 | 
| 14 static const int kNumThreads = 5; | 13 static const int kNumThreads = 5; | 
| 15 static const int kNumTasks = 5; | 14 static const int kNumTasks = 5; | 
| 16 | 15 | 
| 17 namespace base { | 16 namespace base { | 
| 18 | 17 | 
| 19 namespace { | 18 namespace { | 
| 20 | 19 | 
| 21 // Each thread will open the shared memory.  Each thread will take a different 4 | 20 // Each thread will open the shared memory.  Each thread will take a different 4 | 
| 22 // byte int pointer, and keep changing it, with some small pauses in between. | 21 // byte int pointer, and keep changing it, with some small pauses in between. | 
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 265       if (i == j) | 264       if (i == j) | 
| 266         EXPECT_EQ(100, pointers[j][0]); | 265         EXPECT_EQ(100, pointers[j][0]); | 
| 267       else | 266       else | 
| 268         EXPECT_EQ(0, pointers[j][0]); | 267         EXPECT_EQ(0, pointers[j][0]); | 
| 269     } | 268     } | 
| 270   } | 269   } | 
| 271 | 270 | 
| 272   for (int i = 0; i < count; i++) { | 271   for (int i = 0; i < count; i++) { | 
| 273     memories[i].Close(); | 272     memories[i].Close(); | 
| 274   } | 273   } | 
|  | 274 | 
| 275 } | 275 } | 
| 276 | 276 | 
|  | 277 | 
| 277 // On POSIX it is especially important we test shmem across processes, | 278 // On POSIX it is especially important we test shmem across processes, | 
| 278 // not just across threads.  But the test is enabled on all platforms. | 279 // not just across threads.  But the test is enabled on all platforms. | 
| 279 class SharedMemoryProcessTest : public base::MultiProcessTest { | 280 class SharedMemoryProcessTest : public MultiProcessTest { | 
| 280  public: | 281  public: | 
| 281 | 282 | 
| 282   static void CleanUp() { | 283   static void CleanUp() { | 
| 283     SharedMemory memory; | 284     SharedMemory memory; | 
| 284     memory.Delete(s_test_name_); | 285     memory.Delete(s_test_name_); | 
| 285   } | 286   } | 
| 286 | 287 | 
| 287   static int TaskTestMain() { | 288   static int TaskTestMain() { | 
| 288     int errors = 0; | 289     int errors = 0; | 
| 289     ScopedNSAutoreleasePool pool;  // noop if not OSX | 290     ScopedNSAutoreleasePool pool;  // noop if not OSX | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 318 }; | 319 }; | 
| 319 | 320 | 
| 320 const wchar_t* const SharedMemoryProcessTest::s_test_name_ = L"MPMem"; | 321 const wchar_t* const SharedMemoryProcessTest::s_test_name_ = L"MPMem"; | 
| 321 | 322 | 
| 322 | 323 | 
| 323 TEST_F(SharedMemoryProcessTest, Tasks) { | 324 TEST_F(SharedMemoryProcessTest, Tasks) { | 
| 324   SharedMemoryProcessTest::CleanUp(); | 325   SharedMemoryProcessTest::CleanUp(); | 
| 325 | 326 | 
| 326   base::ProcessHandle handles[kNumTasks]; | 327   base::ProcessHandle handles[kNumTasks]; | 
| 327   for (int index = 0; index < kNumTasks; ++index) { | 328   for (int index = 0; index < kNumTasks; ++index) { | 
| 328     handles[index] = SpawnChild("SharedMemoryTestMain", false); | 329     handles[index] = SpawnChild("SharedMemoryTestMain"); | 
| 329   } | 330   } | 
| 330 | 331 | 
| 331   int exit_code = 0; | 332   int exit_code = 0; | 
| 332   for (int index = 0; index < kNumTasks; ++index) { | 333   for (int index = 0; index < kNumTasks; ++index) { | 
| 333     EXPECT_TRUE(base::WaitForExitCode(handles[index], &exit_code)); | 334     EXPECT_TRUE(base::WaitForExitCode(handles[index], &exit_code)); | 
| 334     EXPECT_TRUE(exit_code == 0); | 335     EXPECT_TRUE(exit_code == 0); | 
| 335   } | 336   } | 
| 336 | 337 | 
| 337   SharedMemoryProcessTest::CleanUp(); | 338   SharedMemoryProcessTest::CleanUp(); | 
| 338 } | 339 } | 
| 339 | 340 | 
| 340 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { | 341 MULTIPROCESS_TEST_MAIN(SharedMemoryTestMain) { | 
| 341   return SharedMemoryProcessTest::TaskTestMain(); | 342   return SharedMemoryProcessTest::TaskTestMain(); | 
| 342 } | 343 } | 
| 343 | 344 | 
|  | 345 | 
| 344 }  // namespace base | 346 }  // namespace base | 
| OLD | NEW | 
|---|