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

Unified Diff: media/audio/cross_process_notification_unittest.cc

Issue 11299159: Fix CrossProcessNotificationMultiProcessTest.Basic on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/gtest_filter/media_unittests_disabled ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/cross_process_notification_unittest.cc
diff --git a/media/audio/cross_process_notification_unittest.cc b/media/audio/cross_process_notification_unittest.cc
index 2726cf86f3340fb6e9f901d00d96d3ea8b07c418..d1fbeade40c4de6b1ee2579721c3ea09459f4ec9 100644
--- a/media/audio/cross_process_notification_unittest.cc
+++ b/media/audio/cross_process_notification_unittest.cc
@@ -12,9 +12,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/multiprocess_func_list.h"
-#if defined(OS_POSIX)
#include <utility> // NOLINT
-#endif
namespace {
@@ -75,6 +73,7 @@ class SingleNotifierWorker : public base::PlatformThread::Delegate {
}
virtual ~SingleNotifierWorker() {}
+ // base::PlatformThread::Delegate:
virtual void ThreadMain() OVERRIDE {
for (size_t i = 0; i < repeats_; ++i) {
notifier_->Wait();
@@ -102,6 +101,7 @@ class MultiNotifierWorker : public base::PlatformThread::Delegate {
}
virtual ~MultiNotifierWorker() {}
+ // base::PlatformThread::Delegate:
virtual void ThreadMain() OVERRIDE {
CrossProcessNotification::WaitForMultiple waiter(notifiers_);
for (size_t i = 0; i < repeats_; ++i) {
@@ -163,6 +163,7 @@ class MultiNotifierWorkerFlagArray : public base::PlatformThread::Delegate {
}
virtual ~MultiNotifierWorkerFlagArray() {}
+ // base::PlatformThread::Delegate:
virtual void ThreadMain() OVERRIDE {
for (size_t i = 0; i < repeats_; ++i) {
notifier_->Wait();
@@ -362,25 +363,10 @@ TEST(CrossProcessNotification, DISABLED_MultipleWaits1000) {
}
class CrossProcessNotificationMultiProcessTest : public base::MultiProcessTest {
- public:
- static const char kSharedMemName[];
- static const size_t kSharedMemSize = 1024;
-
- protected:
- virtual void SetUp() OVERRIDE {
- base::MultiProcessTest::SetUp();
- }
-
- virtual void TearDown() OVERRIDE {
- base::MultiProcessTest::TearDown();
- }
};
-// static
-const char CrossProcessNotificationMultiProcessTest::kSharedMemName[] =
- "CrossProcessNotificationMultiProcessTest";
-
namespace {
+
// A very crude IPC mechanism that we use to set up the spawned child process
// and the parent process.
struct CrudeIpc {
@@ -388,24 +374,31 @@ struct CrudeIpc {
CrossProcessNotification::IPCHandle handle_1;
CrossProcessNotification::IPCHandle handle_2;
};
-} // end namespace
+
+#if defined(OS_POSIX)
+const int kPosixChildSharedMem = 30;
+#else
+const char kSharedMemName[] = "CrossProcessNotificationMultiProcessTest";
+#endif
+
+const size_t kSharedMemSize = 1024;
+
+} // namespace
// The main routine of the child process. Waits for the parent process
// to copy handles over to the child and then uses a CrossProcessNotification to
// wait and signal to the parent process.
MULTIPROCESS_TEST_MAIN(CrossProcessNotificationChildMain) {
+#if defined(OS_POSIX)
+ base::SharedMemory mem(
+ base::SharedMemoryHandle(kPosixChildSharedMem, true /* auto close */),
+ false);
+#else
base::SharedMemory mem;
- bool ok = mem.CreateNamed(
- CrossProcessNotificationMultiProcessTest::kSharedMemName,
- true,
- CrossProcessNotificationMultiProcessTest::kSharedMemSize);
- DCHECK(ok);
- if (!ok) {
- LOG(ERROR) << "Failed to open shared memory segment.";
- return -1;
- }
+ CHECK(mem.CreateNamed(kSharedMemName, true, kSharedMemSize));
+#endif
- mem.Map(CrossProcessNotificationMultiProcessTest::kSharedMemSize);
+ CHECK(mem.Map(kSharedMemSize));
CrudeIpc* ipc = reinterpret_cast<CrudeIpc*>(mem.memory());
while (!ipc->ready)
@@ -422,18 +415,21 @@ MULTIPROCESS_TEST_MAIN(CrossProcessNotificationChildMain) {
// new process. Once that's done, it waits for the child process to signal
// it's end and quits.
TEST_F(CrossProcessNotificationMultiProcessTest, Basic) {
- base::SharedMemory mem;
- mem.Delete(kSharedMemName); // In case a previous run was unsuccessful.
- bool ok = mem.CreateNamed(kSharedMemName, false, kSharedMemSize);
- ASSERT_TRUE(ok);
-
- ASSERT_TRUE(mem.Map(kSharedMemSize));
-
CrossProcessNotification a, b;
ASSERT_TRUE(CrossProcessNotification::InitializePair(&a, &b));
EXPECT_TRUE(a.IsValid());
EXPECT_TRUE(b.IsValid());
+ base::SharedMemory mem;
+
+#if defined(OS_POSIX)
+ ASSERT_TRUE(mem.CreateAndMapAnonymous(kSharedMemSize));
+#else
+ mem.Delete(kSharedMemName); // In case a previous run was unsuccessful.
+ ASSERT_TRUE(mem.CreateNamed(kSharedMemName, false, kSharedMemSize));
+ ASSERT_TRUE(mem.Map(kSharedMemSize));
+#endif
+
CrudeIpc* ipc = reinterpret_cast<CrudeIpc*>(mem.memory());
ipc->ready = false;
@@ -442,8 +438,9 @@ TEST_F(CrossProcessNotificationMultiProcessTest, Basic) {
EXPECT_TRUE(b.ShareToProcess(
base::kNullProcessHandle, &ipc->handle_1, &ipc->handle_2));
base::FileHandleMappingVector fd_mapping_vec;
- fd_mapping_vec.push_back(std::pair<int, int>(ipc->handle_1.fd,
- kPosixChildSocket));
+ fd_mapping_vec.push_back(std::make_pair(ipc->handle_1.fd, kPosixChildSocket));
+ fd_mapping_vec.push_back(
+ std::make_pair(mem.handle().fd, kPosixChildSharedMem));
ipc->handle_1.fd = kPosixChildSocket;
base::ProcessHandle process = SpawnChild("CrossProcessNotificationChildMain",
fd_mapping_vec, false);
« no previous file with comments | « build/android/gtest_filter/media_unittests_disabled ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698