| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/fdio/spawn.h> |
| #include <lib/zx/handle.h> |
| #include <lib/zx/process.h> |
| #include <zircon/assert.h> |
| #include <zircon/process.h> |
| #include <zircon/syscalls.h> |
| |
| #include <perftest/perftest.h> |
| |
| #include "assert.h" |
| |
| namespace { |
| |
| // See fdio_spawn_helper.cc. |
| // Note: while being both a "shell binary" and a "test component", this |
| // execution path results in benchmarking shell binary resolution as well as |
| // fdio_spawn. |
| constexpr const char* kPath = "/bin/fdio_spawn_helper"; |
| constexpr const char* const kArgv[]{kPath, nullptr}; |
| |
| // Benchmark |fdio_spawn| by spawning a process that simply exits. |
| bool SpawnTest(perftest::RepeatState* state) { |
| while (state->KeepRunning()) { |
| zx::handle process; |
| ASSERT_OK(fdio_spawn(ZX_HANDLE_INVALID, FDIO_SPAWN_DEFAULT_LDSVC, kPath, kArgv, |
| process.reset_and_get_address())); |
| ASSERT_OK(process.wait_one(ZX_TASK_TERMINATED, zx::time::infinite(), nullptr)); |
| zx_info_process_t info; |
| ASSERT_OK(process.get_info(ZX_INFO_PROCESS, &info, sizeof(info), nullptr, nullptr)); |
| ZX_ASSERT(info.exited); |
| ZX_ASSERT(info.return_code == 0); |
| } |
| return true; |
| } |
| |
| void RegisterTests() { perftest::RegisterTest("Fdio/Spawn", SpawnTest); } |
| PERFTEST_CTOR(RegisterTests) |
| |
| } // namespace |