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>
25#include <boost/asio/basic_waitable_timer.hpp>
26#include <boost/asio/io_service.hpp>
48 boost::asio::basic_waitable_timer<std::chrono::steady_clock>
m_timer;
69 boost::asio::io_service&
75 boost::asio::io_service
const&
105 template <
class Handler>
113 std::forward<Handler>(handler), Clock::now(),
false,
this));
120 template <
class Handler>
128 std::forward<Handler>(handler), Clock::now(),
true,
this));
142 m_cond.
wait(lock, [
this] {
return this->m_count == 0; });
160 template <
class Handler>
169 Handler
const& handler,
180 "beast::io_latency_probe::sample_op::sample_op : non-null "
193 "beast::io_latency_probe::sample_op::sample_op(sample_op&&) : "
194 "non-null probe input");
195 from.m_probe =
nullptr;
215 typename Clock::time_point
const now(Clock::now());
216 typename Clock::duration
const elapsed(now -
m_start);
231 typename Clock::time_point
const when(
256 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