git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56359
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
long timeMin = LONG_MAX,
timeMax = 0,
timeTotal = 0;
long timeMin = LONG_MAX,
timeMax = 0,
timeTotal = 0;
- bool ok = true;
- for ( long a = 0; a < m_avgCount; a++ )
+ bool ok = func->Init();
+ for ( long a = 0; ok && a < m_avgCount; a++ )
{
wxStopWatch sw;
for ( long n = 0; n < m_numRuns && ok; n++ )
{
wxStopWatch sw;
for ( long n = 0; n < m_numRuns && ok; n++ )
const long t = sw.Time();
if ( t < timeMin )
timeMin = t;
const long t = sw.Time();
if ( t < timeMin )
timeMin = t;
if ( !ok )
{
wxPrintf("ERROR\n");
if ( !ok )
{
wxPrintf("ERROR\n");
- typedef bool (*Type)();
+ typedef bool (*InitType)();
+ typedef bool (*FuncType)();
+ typedef void (*DoneType)();
/// Ctor is used implicitly by BENCHMARK_FUNC().
/// Ctor is used implicitly by BENCHMARK_FUNC().
- Function(const char *name, Type func)
+ Function(const char *name,
+ FuncType func,
+ InitType init = NULL,
+ DoneType done = NULL)
: m_name(name),
m_func(func),
: m_name(name),
m_func(func),
+ m_init(init),
+ m_done(done),
m_next(ms_head)
{
ms_head = this;
m_next(ms_head)
{
ms_head = this;
/// Get the name of this function
const char *GetName() const { return m_name; }
/// Get the name of this function
const char *GetName() const { return m_name; }
+ /// Perform once-only initialization prior to Run().
+ bool Init() { return m_init ? (*m_init)() : true; }
+
/// Run the function, return its return value.
bool Run() { return (*m_func)(); }
/// Run the function, return its return value.
bool Run() { return (*m_func)(); }
+ /// Clean up after performing the benchmark.
+ void Done() { if ( m_done ) (*m_done)(); }
/// Get the head of the linked list of benchmark objects
static Function *GetFirst() { return ms_head; }
/// Get the head of the linked list of benchmark objects
static Function *GetFirst() { return ms_head; }
// name of and pointer to the function, as passed to the ctor
const char * const m_name;
// name of and pointer to the function, as passed to the ctor
const char * const m_name;
+ const FuncType m_func;
+ const InitType m_init;
+ const DoneType m_done;
// pointer to the next object in the linked list or NULL
Function * const m_next;
// pointer to the next object in the linked list or NULL
Function * const m_next;
static Bench::Function wxMAKE_UNIQUE_NAME(name)(#name, name); \
bool name()
static Bench::Function wxMAKE_UNIQUE_NAME(name)(#name, name); \
bool name()
+/**
+ Define a benchmark function requiring initialization and shutdown.
+
+ This macro is similar to BENCHMARK_FUNC() but ensures that @a init is
+ called before the benchmark is ran and @a done afterwards.
+ */
+#define BENCHMARK_FUNC_WITH_INIT(name, init, done) \
+ static bool name(); \
+ static Bench::Function wxMAKE_UNIQUE_NAME(name)(#name, name, init, done); \
+ bool name()
+
#endif // _WX_TESTS_BENCHMARKS_BENCH_H_
#endif // _WX_TESTS_BENCHMARKS_BENCH_H_