OnixS C++ ICE Binary Order Entry Handler 1.1.1
API Documentation
Loading...
Searching...
No Matches
ReactorBenchmarkListener Class Referencefinal

Public Member Functions

 ReactorBenchmarkListener (size_t numberOfMessages)
bool receivedAllMessages () const noexcept
void resetBenchmark () noexcept override
template<typename Stack>
void collectSessionTimeMarks (Stack &stack, Session &session, MessageHolder< NewOrderRequest > &order, size_t numberOfMessages, size_t sendPeriod, size_t warmupPeriod)
template<typename Stack>
ONIXS_ICEBOE_HOTPATH void collectSessionTimeMarks (Stack &stack, Session &session, MessageHolder< NewOrderRequest > &order, size_t numberOfMessages, size_t sendPeriod, size_t warmupPeriod)
Public Member Functions inherited from BenchmarkSessionListener
 BenchmarkSessionListener (size_t numberOfMessages)
 ~BenchmarkSessionListener () override=default
bool active () const noexcept
bool packetGroupingDetected () const noexcept
const BenchmarkData::SendMarkssendMarks () const noexcept
const BenchmarkData::ReceiveMarksreceiveMarks () const noexcept
const BenchmarkData::Overheadoverhead () const noexcept
void measureOverhead ()
ONIXS_ICEBOE_HOTPATH ONIXS_ICEBOE_FORCEINLINE void beforeSending () noexcept
ONIXS_ICEBOE_HOTPATH ONIXS_ICEBOE_FORCEINLINE void afterSending () noexcept
void onStateChange (SessionStateId::Enum newState, SessionStateId::Enum, Session *) override
ONIXS_ICEBOE_HOTPATH void onExecutionReport_New (const Messaging::ExecutionReport_New, Session *) override
ONIXS_ICEBOE_HOTPATH void onExecutionReport_Modify (const Messaging::ExecutionReport_Modify, Session *) override
ONIXS_ICEBOE_HOTPATH void onExecutionReport_Cancel (const Messaging::ExecutionReport_Cancel, Session *) override
ONIXS_ICEBOE_HOTPATH void onExecutionReport_Reject (const Messaging::ExecutionReport_Reject, Session *) override
ONIXS_ICEBOE_HOTPATH void onReceivedBytes (const char *, size_t, const ReceivedDataTimestamp &, Session *) noexcept override
ONIXS_ICEBOE_HOTPATH void onMessageSending (char *, size_t, Session *) noexcept override
void onError (SessionErrorReason::Enum, const std::string &description, Session *, Messaging::SbeMessage) override
void onWarning (SessionWarningReason::Enum, const std::string &description, Session *, Messaging::SbeMessage) override

Protected Member Functions

void onReceivedAllMessages () noexcept override

Detailed Description

Definition at line 438 of file BenchmarkSessionListener.h.

Constructor & Destructor Documentation

◆ ReactorBenchmarkListener()

ReactorBenchmarkListener ( size_t numberOfMessages)
inlineexplicit

Definition at line 441 of file BenchmarkSessionListener.h.

442 : BenchmarkSessionListener(numberOfMessages)
443 , receivedAllMessages_()
444 {}
BenchmarkSessionListener(size_t numberOfMessages)

Member Function Documentation

◆ collectSessionTimeMarks() [1/2]

template<typename Stack>
void collectSessionTimeMarks ( Stack & stack,
Session & session,
MessageHolder< NewOrderRequest > & order,
size_t numberOfMessages,
size_t sendPeriod,
size_t warmupPeriod )

◆ collectSessionTimeMarks() [2/2]

template<typename Stack>
ONIXS_ICEBOE_HOTPATH void collectSessionTimeMarks ( Stack & stack,
Session & session,
MessageHolder< NewOrderRequest > & order,
size_t numberOfMessages,
size_t sendPeriod,
size_t warmupPeriod )

Definition at line 476 of file BenchmarkSessionListener.h.

479{
481
482 // When the session is used with the OnixS C++ CME Market Data Handler,
483 // this value can be taken from the packet receiving time
484 Messaging::Timestamp sendingTime = UtcWatch::now();
485
486 for(uint64_t messageCounter = 0; messageCounter < numberOfMessages; ++messageCounter)
487 {
488 order->orderQty(messageCounter + 1);
489 order->clOrdId(messageCounter);
490
492 session.send(order, sendingTime);
493 afterSending();
494
495 stack.dispatchEvents();
496
497 sendingTime = UtcWatch::now();
498
499 if(warmupPeriod || sendPeriod)
500 {
501 const auto start = PerformanceCounter::current();
502
503 PerformanceCounter::Span elapsedMicroseconds = 0;
504 do
505 {
506 do
507 {
508 stack.dispatchEvents();
509 session.warmUp(order, sendingTime);
510 elapsedMicroseconds = PerformanceCounter::elapsedMicroseconds(start);
511 }
512 while(elapsedMicroseconds < static_cast<PerformanceCounter::Span>(warmupPeriod));
513
514 stack.dispatchEvents();
515 elapsedMicroseconds = PerformanceCounter::elapsedMicroseconds(start);
516 }
517 while(elapsedMicroseconds < static_cast<PerformanceCounter::Span>(sendPeriod));
518 }
519 }
520
521 while(active())
522 stack.dispatchEvents();
523}
ONIXS_ICEBOE_HOTPATH ONIXS_ICEBOE_FORCEINLINE void afterSending() noexcept
ONIXS_ICEBOE_HOTPATH ONIXS_ICEBOE_FORCEINLINE void beforeSending() noexcept
static Span elapsedMicroseconds(const PerformanceCounter::Count &start)
static Count current()
Retrieves the current value of the high-resolution performance counter.
void resetBenchmark() noexcept override

◆ onReceivedAllMessages()

void onReceivedAllMessages ( )
inlineoverrideprotectedvirtualnoexcept

Reimplemented from BenchmarkSessionListener.

Definition at line 463 of file BenchmarkSessionListener.h.

464 {
466 receivedAllMessages_ = true;
467 }

◆ receivedAllMessages()

bool receivedAllMessages ( ) const
inlinenoexcept

Definition at line 446 of file BenchmarkSessionListener.h.

447 {
448 return receivedAllMessages_;
449 }

◆ resetBenchmark()

void resetBenchmark ( )
inlineoverridevirtualnoexcept

Reimplemented from BenchmarkSessionListener.

Definition at line 451 of file BenchmarkSessionListener.h.

452 {
454 receivedAllMessages_ = false;
455 }
virtual void resetBenchmark() noexcept