52 mHwThread([aHw] () {aHw->
run();})
64 mHw->setReplyDelay(aDelay);
70 return measureReadLatency(std::vector<ClientInterface*>(1, &aClient), aBaseAddr, aDepth, aNrIterations, aDispatchEachIteration, aVerbose);
74double measureReadLatency(
const std::vector<ClientInterface*>& aClients, uint32_t aBaseAddr, uint32_t aDepth,
size_t aNrIterations,
bool aDispatchEachIteration,
bool aVerbose)
78 for (
unsigned i = 0; i < aNrIterations ; ++i )
82 std::cout <<
"Iteration " << i << std::endl;
85 for (
const auto&
c: aClients)
88 if ( aDispatchEachIteration )
90 for (
const auto&
c: aClients)
95 if ( !aDispatchEachIteration )
97 for (
const auto&
c: aClients)
107 return measureWriteLatency(std::vector<ClientInterface*>(1, &aClient), aBaseAddr, aDepth, aNrIterations, aDispatchEachIteration, aVerbose);
111double measureWriteLatency(
const std::vector<ClientInterface*>& aClients, uint32_t aBaseAddr, uint32_t aDepth,
size_t aNrIterations,
bool aDispatchEachIteration,
bool aVerbose)
114 std::vector<uint32_t> sendBuffer ( aDepth, 0xbebafeca );
117 for (
unsigned i = 0; i < aNrIterations ; ++i )
121 std::cout <<
"Iteration " << i << std::endl;
125 for (
const auto&
c: aClients)
128 if ( aDispatchEachIteration )
130 for (
const auto&
c: aClients)
135 if ( !aDispatchEachIteration )
137 for (
const auto&
c: aClients)
145double measureFileReadLatency(
const std::string& aFilePath, uint32_t aBaseAddr, uint32_t aDepth,
size_t aNrIterations,
bool aVerbose)
147 PCIe::File lFile(aFilePath, O_RDWR | O_NONBLOCK);
150 std::vector<uint32_t> lRecvBuffer;
151 lFile.
read(aBaseAddr, aDepth, lRecvBuffer);
155 for (
unsigned i = 0; i < aNrIterations ; ++i )
159 std::cout <<
"Iteration " << i << std::endl;
162 lFile.
read(aBaseAddr, aDepth, lRecvBuffer);
170double measureFileWriteLatency(
const std::string& aFilePath, uint32_t aBaseAddr, uint32_t aDepth,
size_t aNrIterations,
bool aVerbose)
173 std::vector<uint32_t> lSendBuffer(aDepth, 0x0);
174 lFile.
write(aBaseAddr, lSendBuffer);
177 for (
unsigned i = 0; i < aNrIterations ; ++i )
181 std::cout <<
"Iteration " << i << std::endl;
184 lFile.
write(aBaseAddr, lSendBuffer);
An abstract base class for defining the interface to the various IPbus clients as well as providing t...
ValHeader writeBlock(const uint32_t &aAddr, const std::vector< uint32_t > &aValues, const defs::BlockReadWriteMode &aMode=defs::INCREMENTAL)
Write a block of data to a block of registers or a block-write port.
void dispatch()
Method to dispatch all queued transactions, and wait until all corresponding responses have been rece...
ValVector< uint32_t > readBlock(const uint32_t &aAddr, const uint32_t &aSize, const defs::BlockReadWriteMode &aMode=defs::INCREMENTAL)
Read a block of unsigned data from a block of registers or a block-read port.
void write(const uint32_t aAddr, const std::vector< uint32_t > &aValues)
void read(const uint32_t aAddr, const uint32_t aNrWords, std::vector< uint32_t > &aValues)
Common abstract base class for IPbus 1.3 and 2.0 dummy hardware.
virtual void run()=0
Function which "starts" the dummy hardware; does not return until the 'stop' method is called.
void setReplyDelay(const std::chrono::microseconds &aDelay)
DummyHardwareRunner(DummyHardwareInterface *aHw)
std::unique_ptr< DummyHardwareInterface > mHw
double elapsedSeconds()
Returns number of elapsed seconds since the timer was instantiated.
None tests(nox.Session session)
double measureFileWriteLatency(const std::string &aFilePath, uint32_t aBaseAddr, uint32_t aDepth, size_t aNrIterations, bool aVerbose)
double measureReadLatency(ClientInterface &aClient, uint32_t aBaseAddr, uint32_t aDepth, size_t aNrIterations, bool aDispatchEachIteration, bool aVerbose)
double measureFileReadLatency(const std::string &aFilePath, uint32_t aBaseAddr, uint32_t aDepth, size_t aNrIterations, bool aVerbose)
double measureWriteLatency(ClientInterface &aClient, uint32_t aBaseAddr, uint32_t aDepth, size_t aNrIterations, bool aDispatchEachIteration, bool aVerbose)