rippled
Loading...
Searching...
No Matches
submitters.h
1#pragma once
2
3#include <test/csf/Peer.h>
4#include <test/csf/Scheduler.h>
5#include <test/csf/SimTime.h>
6#include <test/csf/Tx.h>
7
8#include <type_traits>
9
10namespace xrpl {
11namespace test {
12namespace csf {
13
14// Submitters are classes for simulating submission of transactions to the
15// network
16
18struct Rate
19{
22
23 double
24 inv() const
25 {
26 return duration.count() / double(count);
27 }
28};
29
47template <class Distribution, class Generator, class Selector>
49{
50 Distribution dist_;
55 Generator& g_;
56
57 // Convert generated durations to SimDuration
58 static SimDuration
60 {
61 return d;
62 }
63
64 template <class T>
67 {
68 return SimDuration{static_cast<SimDuration::rep>(t)};
69 }
70
71 void
73 {
74 selector_()->submit(Tx{nextID_++});
75 if (scheduler_.now() < stop_)
76 {
77 scheduler_.in(asDuration(dist_(g_)), [&]() { submit(); });
78 }
79 }
80
81public:
82 Submitter(Distribution dist, SimTime start, SimTime end, Selector& selector, Scheduler& s, Generator& g)
83 : dist_{dist}, stop_{end}, selector_{selector}, scheduler_{s}, g_{g}
84 {
85 scheduler_.at(start, [&]() { submit(); });
86 }
87};
88
89template <class Distribution, class Generator, class Selector>
90Submitter<Distribution, Generator, Selector>
91makeSubmitter(Distribution dist, SimTime start, SimTime end, Selector& sel, Scheduler& s, Generator& g)
92{
93 return Submitter<Distribution, Generator, Selector>(dist, start, end, sel, s, g);
94}
95
96} // namespace csf
97} // namespace test
98} // namespace xrpl
Simulated discrete-event scheduler.
cancel_token in(duration const &delay, Function &&f)
Schedule an event after a specified duration passes.
time_point now() const
Return the current network time.
cancel_token at(time_point const &when, Function &&f)
Schedule an event at a specific time.
Invocable that returns random samples from a range according to a discrete distribution.
Submits transactions to a specified peer.
Definition submitters.h:49
Submitter(Distribution dist, SimTime start, SimTime end, Selector &selector, Scheduler &s, Generator &g)
Definition submitters.h:82
static std::enable_if_t< std::is_arithmetic< T >::value, SimDuration > asDuration(T t)
Definition submitters.h:66
static SimDuration asDuration(SimDuration d)
Definition submitters.h:59
A single transaction.
Definition Tx.h:22
Submitter< Distribution, Generator, Selector > makeSubmitter(Distribution dist, SimTime start, SimTime end, Selector &sel, Scheduler &s, Generator &g)
Definition submitters.h:91
typename SimClock::duration SimDuration
Definition SimTime.h:16
typename SimClock::time_point SimTime
Definition SimTime.h:17
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Represents rate as a count/duration.
Definition submitters.h:19
SimDuration duration
Definition submitters.h:21
double inv() const
Definition submitters.h:24