| // Copyright 2017 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/zx/port.h> |
| #include <zircon/syscalls/port.h> |
| |
| #include <perftest/perftest.h> |
| |
| #include "assert.h" |
| |
| namespace { |
| |
| // Measure the times taken to enqueue and then dequeue a packet from a |
| // Zircon port, on a single thread. This does not involve any cross-thread |
| // wakeups. |
| bool PortQueueWaitTest(perftest::RepeatState* state) { |
| state->DeclareStep("queue"); |
| state->DeclareStep("wait"); |
| |
| zx::port port; |
| ASSERT_OK(zx::port::create(0, &port)); |
| zx_port_packet in_packet; |
| zx_port_packet out_packet = {}; |
| out_packet.type = ZX_PKT_TYPE_USER; |
| |
| while (state->KeepRunning()) { |
| ASSERT_OK(port.queue(&out_packet)); |
| state->NextStep(); |
| ASSERT_OK(port.wait(zx::time::infinite(), &in_packet)); |
| } |
| return true; |
| } |
| |
| void RegisterTests() { perftest::RegisterTest("Port/QueueWait", PortQueueWaitTest); } |
| PERFTEST_CTOR(RegisterTests); |
| |
| } // namespace |