1 --- a/base/process/process_metrics_unittest.cc 2 +++ b/base/process/process_metrics_unittest.cc 3 @@ -569,6 +569,9 @@ MULTIPROCESS_TEST_MAIN(ChildMain) { 4 5 } // namespace 6 7 +// ARC note: don't compile as SpawnMultiProcessTestChild brings in a lot of 8 +// extra dependency. 9 +#if !defined(OS_ANDROID) && !defined(__ANDROID__) && !defined(__ANDROID_HOST__) 10 TEST(ProcessMetricsTest, GetChildOpenFdCount) { 11 ScopedTempDir temp_dir; 12 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 13 @@ -582,9 +585,23 @@ TEST(ProcessMetricsTest, GetChildOpenFdCount) { 14 15 std::unique_ptr<ProcessMetrics> metrics( 16 ProcessMetrics::CreateProcessMetrics(child.Handle())); 17 - EXPECT_EQ(0, metrics->GetOpenFdCount()); 18 + // Try a couple times to observe the child with 0 fds open. 19 + // Sometimes we've seen that the child can have 1 remaining 20 + // fd shortly after receiving the signal. Potentially this 21 + // is actually the signal file still open in the child. 22 + int open_fds = -1; 23 + for (int tries = 0; tries < 5; ++tries) { 24 + open_fds = metrics->GetOpenFdCount(); 25 + if (!open_fds) { 26 + break; 27 + } 28 + PlatformThread::Sleep(TimeDelta::FromMilliseconds(1)); 29 + } 30 + EXPECT_EQ(0, open_fds); 31 ASSERT_TRUE(child.Terminate(0, true)); 32 } 33 +#endif // !defined(__ANDROID__) 34 + 35 #endif // defined(OS_LINUX) 36 37 #if defined(OS_ANDROID) || defined(OS_LINUX) 38 --- a/base/test/multiprocess_test.cc 39 +++ b/base/test/multiprocess_test.cc 40 @@ -13,7 +13,7 @@ 41 42 namespace base { 43 44 -#if !defined(OS_ANDROID) 45 +#if !defined(OS_ANDROID) && !defined(__ANDROID__) && !defined(__ANDROID_HOST__) 46 Process SpawnMultiProcessTestChild(const std::string& procname, 47 const CommandLine& base_command_line, 48 const LaunchOptions& options) { 49 @@ -39,7 +39,7 @@ bool TerminateMultiProcessTestChild(const Process& process, 50 return process.Terminate(exit_code, wait); 51 } 52 53 -#endif // !defined(OS_ANDROID) 54 +#endif // !OS_ANDROID && !__ANDROID__ && !__ANDROID_HOST__ 55 56 CommandLine GetMultiProcessTestChildBaseCommandLine() { 57 base::ScopedAllowBlockingForTesting allow_blocking; 58 @@ -52,6 +52,8 @@ CommandLine GetMultiProcessTestChildBaseCommandLine() { 59 60 MultiProcessTest::MultiProcessTest() = default; 61 62 +// Don't compile on ARC. 63 +#if 0 64 Process MultiProcessTest::SpawnChild(const std::string& procname) { 65 LaunchOptions options; 66 #if defined(OS_WIN) 67 @@ -64,6 +66,7 @@ Process MultiProcessTest::SpawnChildWithOptions(const std::string& procname, 68 const LaunchOptions& options) { 69 return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options); 70 } 71 +#endif 72 73 CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) { 74 CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); 75