20#ifndef BEAST_ASIO_IO_LATENCY_PROBE_H_INCLUDED
21#define BEAST_ASIO_IO_LATENCY_PROBE_H_INCLUDED
23#include <xrpl/beast/utility/instrumentation.h>
24#include <boost/asio/basic_waitable_timer.hpp>
25#include <boost/asio/io_service.hpp>
47 boost::asio::basic_waitable_timer<std::chrono::steady_clock>
m_timer;
68 boost::asio::io_service&
74 boost::asio::io_service
const&
104 template <
class Handler>
112 std::forward<Handler>(handler), Clock::now(),
false,
this));
119 template <
class Handler>
127 std::forward<Handler>(handler), Clock::now(),
true,
this));
141 m_cond.
wait(lock, [
this] {
return this->m_count == 0; });
159 template <
class Handler>
168 Handler
const& handler,
179 "beast::io_latency_probe::sample_op::sample_op : non-null "
192 "beast::io_latency_probe::sample_op::sample_op(sample_op&&) : "
193 "non-null probe input");
194 from.m_probe =
nullptr;
214 typename Clock::time_point
const now(Clock::now());
215 typename Clock::duration
const elapsed(now -
m_start);
230 typename Clock::time_point
const when(
255 typename Clock::time_point
const now(Clock::now());
Measures handler latency on an io_service 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.
void sample_one(Handler &&handler)
Measure one sample of i/o latency.
typename Clock::duration duration
boost::asio::io_service & m_ios
void cancel(std::unique_lock< decltype(m_mutex)> &lock, bool wait)
std::condition_variable_any m_cond
boost::asio::io_service const & get_io_service() const
boost::asio::io_service & get_io_service()
Return the io_service associated with the latency probe.
typename Clock::time_point time_point
io_latency_probe(duration const &period, boost::asio::io_service &ios)
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