OSDN Git Service

Merge "simpleperf: fix app_profiler.py." am: d98c857902 am: 5ea663c3ab am: 545ee30d39
[android-x86/system-extras.git] / simpleperf / workload_test.cpp
index f4c1601..9824143 100644 (file)
 
 #include <signal.h>
 
+#include "IOEventLoop.h"
 #include "utils.h"
 #include "workload.h"
 
-static volatile bool signaled;
-static void signal_handler(int) {
-  signaled = true;
-}
-
 TEST(workload, success) {
-  signaled = false;
-  SignalHandlerRegister signal_handler_register({SIGCHLD}, signal_handler);
+  IOEventLoop loop;
+  ASSERT_TRUE(loop.AddSignalEvent(SIGCHLD, [&]() {
+    return loop.ExitLoop();
+  }));
   auto workload = Workload::CreateWorkload({"sleep", "1"});
   ASSERT_TRUE(workload != nullptr);
   ASSERT_TRUE(workload->GetPid() != 0);
   ASSERT_TRUE(workload->Start());
-  while (!signaled) {
-  }
+  ASSERT_TRUE(loop.RunLoop());
 }
 
 TEST(workload, execvp_failure) {
@@ -45,14 +42,15 @@ TEST(workload, execvp_failure) {
 
 static void run_signaled_workload() {
   {
-    signaled = false;
-    SignalHandlerRegister signal_handler_register({SIGCHLD}, signal_handler);
+    IOEventLoop loop;
+    ASSERT_TRUE(loop.AddSignalEvent(SIGCHLD, [&]() {
+      return loop.ExitLoop();
+    }));
     auto workload = Workload::CreateWorkload({"sleep", "10"});
     ASSERT_TRUE(workload != nullptr);
     ASSERT_TRUE(workload->Start());
     ASSERT_EQ(0, kill(workload->GetPid(), SIGKILL));
-    while (!signaled) {
-    }
+    ASSERT_TRUE(loop.RunLoop());
   }
   // Make sure all destructors are called before exit().
   exit(0);
@@ -65,13 +63,14 @@ TEST(workload, signaled_warning) {
 
 static void run_exit_nonzero_workload() {
   {
-    signaled = false;
-    SignalHandlerRegister signal_handler_register({SIGCHLD}, signal_handler);
+    IOEventLoop loop;
+    ASSERT_TRUE(loop.AddSignalEvent(SIGCHLD, [&]() {
+      return loop.ExitLoop();
+    }));
     auto workload = Workload::CreateWorkload({"ls", "nonexistdir"});
     ASSERT_TRUE(workload != nullptr);
     ASSERT_TRUE(workload->Start());
-    while (!signaled) {
-    }
+    ASSERT_TRUE(loop.RunLoop());
   }
   // Make sure all destructors are called before exit().
   exit(0);