Moved timing measurement of epicsThreadPrivateGet() to epicsThreadPerform.cpp

This commit is contained in:
Andrew Johnson
2006-11-10 21:43:16 +00:00
parent 242a7b9027
commit de29cb834f
2 changed files with 49 additions and 45 deletions

View File

@@ -170,11 +170,59 @@ static void epicsThreadGetIdSelfPerfTest ()
}
static epicsThreadPrivate < bool > priv;
static inline void callItTenTimes ()
{
bool *pFlag;
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
}
static inline void callItTenTimesSquared ()
{
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
}
static void timeEpicsThreadPrivateGet ()
{
priv.set ( 0 );
epicsTime begin = epicsTime::getCurrent ();
static const unsigned N = 1000u;
for ( unsigned i = 0u; i < N; i++ ) {
callItTenTimesSquared ();
}
double delay = epicsTime::getCurrent() - begin;
delay /= N * 100u; // convert to sec per call
delay *= 1e6; // convert to micro sec
printf("epicsThreadPrivateGet() takes %f microseconds\n", delay);
}
MAIN(epicsThreadPerform)
{
epicsThreadPriorityTest ();
threadSleepQuantumTest ();
threadSleepTest ();
epicsThreadGetIdSelfPerfTest ();
timeEpicsThreadPrivateGet ();
return 0;
}

View File

@@ -19,44 +19,12 @@
static epicsThreadPrivate < bool > priv;
static bool doneFlag = false;
extern "C" void epicsThreadPrivateTestThread ( void * )
{
testOk1 ( 0 == priv.get () );
static bool var;
priv.set ( &var );
testOk1 ( &var == priv.get () );
doneFlag = true;
}
inline void callItTenTimes ()
{
bool *pFlag;
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
pFlag = priv.get ();
}
inline void callItTenTimesSquared ()
{
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
callItTenTimes ();
}
MAIN(epicsThreadPrivateTest)
@@ -70,24 +38,12 @@ MAIN(epicsThreadPrivateTest)
epicsThreadCreate ( "epicsThreadPrivateTest", epicsThreadPriorityMax,
epicsThreadGetStackSize ( epicsThreadStackSmall ),
epicsThreadPrivateTestThread, 0 );
while ( ! doneFlag ) {
epicsThreadSleep ( 0.1 );
}
epicsThreadSleep ( 1.0 );
testOk1 ( &var == priv.get() );
priv.set ( 0 );
testOk1 ( 0 == priv.get() );
epicsTime begin = epicsTime::getCurrent ();
static const unsigned N = 1000u;
for ( unsigned i = 0u; i < N; i++ ) {
callItTenTimesSquared ();
}
double delay = epicsTime::getCurrent() - begin;
delay /= N * 100u; // convert to sec per call
delay *= 1e6; // convert to micro sec
testDiag("epicsThreadPrivateGet() takes %f microseconds", delay);
return testDone();
}