1#ifndef BEAST_ASIO_IO_LATENCY_PROBE_H_INCLUDED
2#define BEAST_ASIO_IO_LATENCY_PROBE_H_INCLUDED
4#include <xrpl/beast/utility/instrumentation.h>
6#include <boost/asio/basic_waitable_timer.hpp>
7#include <boost/asio/io_context.hpp>
8#include <boost/asio/post.hpp>
30 boost::asio::basic_waitable_timer<std::chrono::steady_clock>
m_timer;
51 boost::asio::io_context&
57 boost::asio::io_context
const&
87 template <
class Handler>
104 template <
class Handler>
128 m_cond.
wait(lock, [
this] {
return this->m_count == 0; });
146 template <
class Handler>
155 Handler
const& handler,
166 "beast::io_latency_probe::sample_op::sample_op : non-null "
179 "beast::io_latency_probe::sample_op::sample_op(sample_op&&) : "
180 "non-null probe input");
181 from.m_probe =
nullptr;
201 typename Clock::time_point
const now(Clock::now());
202 typename Clock::duration
const elapsed(now -
m_start);
217 typename Clock::time_point
const when(
243 typename Clock::time_point
const now(Clock::now());
Measures handler latency on an io_context queue.
void sample(Handler &&handler)
Initiate continuous i/o latency sampling.
std::recursive_mutex m_mutex
boost::asio::basic_waitable_timer< std::chrono::steady_clock > m_timer
void cancel()
Cancel all pending i/o.
boost::asio::io_context const & get_io_context() const
void sample_one(Handler &&handler)
Measure one sample of i/o latency.
typename Clock::duration duration
boost::asio::io_context & get_io_context()
Return the io_context associated with the latency probe.
boost::asio::io_context & m_ios
void cancel(std::unique_lock< decltype(m_mutex)> &lock, bool wait)
std::condition_variable_any m_cond
io_latency_probe(duration const &period, boost::asio::io_context &ios)
typename Clock::time_point time_point
sample_op(Handler const &handler, time_point const &start, bool repeat, io_latency_probe *probe)
sample_op operator=(sample_op const &)=delete
sample_op & operator=(sample_op &&)=delete
sample_op(sample_op &&from) noexcept
io_latency_probe * m_probe
void operator()(boost::system::error_code const &ec)
sample_op(sample_op const &)=delete