X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=simpleperf%2Fworkload.h;h=9d9d5952ffb76b03ea10345d1c12734c4e30e031;hb=bd2d5da516763b38d06126439e883f309ca6656a;hp=fa754b5a11a30935f0160f66659e0a1756a352a6;hpb=a85d19083715217ae3a26a5b977d6373b40506db;p=android-x86%2Fsystem-extras.git diff --git a/simpleperf/workload.h b/simpleperf/workload.h index fa754b5a..9d9d5952 100644 --- a/simpleperf/workload.h +++ b/simpleperf/workload.h @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -34,28 +35,37 @@ class Workload { public: static std::unique_ptr CreateWorkload(const std::vector& args); + static std::unique_ptr CreateWorkload(const std::function& function); ~Workload(); bool Start(); + bool IsStarted() { + return work_state_ == Started; + } pid_t GetPid() { return work_pid_; } private: - explicit Workload(const std::vector& args) + explicit Workload(const std::vector& args, + const std::function& function) : work_state_(NotYetCreateNewProcess), - args_(args), + child_proc_args_(args), + child_proc_function_(function), work_pid_(-1), start_signal_fd_(-1), exec_child_fd_(-1) { } bool CreateNewProcess(); + void ChildProcessFn(int start_signal_fd, int exec_child_fd); bool WaitChildProcess(bool wait_forever, bool is_child_killed); WorkState work_state_; - std::vector args_; + // The child process either executes child_proc_args or run child_proc_function. + std::vector child_proc_args_; + std::function child_proc_function_; pid_t work_pid_; int start_signal_fd_; // The parent process writes 1 to start workload in the child process. int exec_child_fd_; // The child process writes 1 to notify that execvp() failed.