* limitations under the License.
*/
-
#include <glib.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
#include <chrono>
#include <iostream>
namespace {
constexpr const char SERVER_PROC_NAME[] = "org.tizen.appfw.rpc_port.benchmark";
+constexpr const char SERVER_BIN[] = "/usr/bin/rpc-port-benchmark-server";
namespace bp = rpc_port::BenchmarkProxy::proxy;
}
~Tester() {
+ if (server_pid_ > 0) {
+ if (kill(server_pid_, SIGTERM) != 0) {
+ std::cerr << "kill() is failed. errno: " << errno << std::endl;
+ } else {
+ int status;
+ waitpid(server_pid_, &status, 0);
+ }
+ }
}
void Run(int argc, char** argv) {
exit(1);
}
+ ExecuteServer();
proxy_.reset(new bp::Benchmark(&listener_, SERVER_PROC_NAME));
try {
std::cout << "Latency: " << std::to_string(l) << "ms" << std::endl;
}
+ void ExecuteServer() {
+ server_pid_ = fork();
+ if (server_pid_ == 0) {
+ setsid();
+
+ char* argv[] = { strdup(SERVER_BIN), nullptr, nullptr };
+ int ret = execv(argv[0], argv);
+ if (ret < 0) {
+ std::cerr << "execv() is failed. errno: " << errno << std::endl;
+ exit(-1);
+ }
+ } else if (server_pid_ == -1) {
+ std::cerr << "fork() is failed. errno: " << errno << std::endl;
+ exit(-1);
+ } else {
+ _W("benchmark server is running. pid: %d", server_pid_);
+ usleep(100 * 1000);
+ }
+ }
+
private:
std::unique_ptr<rpc_port::benchmark::Options> options_;
std::unique_ptr<bp::Benchmark> proxy_;
ConnectionListener listener_;
std::chrono::system_clock::time_point start_;
+ pid_t server_pid_ = -1;
};
} // namespace