]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/benchmarks/bench.h
Derive wxStatusBar from wxControl and not wxWindow.
[wxWidgets.git] / tests / benchmarks / bench.h
index 21d95a4281e266343842303fc0c1832c56eaf82e..dde2a3a49ddd0d0c8183fc3cef4d23fc6b816f80 100644 (file)
@@ -5,7 +5,7 @@
 // Created:     2008-07-19
 // RCS-ID:      $Id$
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
 // Created:     2008-07-19
 // RCS-ID:      $Id$
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_TESTS_BENCHMARKS_BENCH_H_
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_TESTS_BENCHMARKS_BENCH_H_
@@ -25,12 +25,19 @@ namespace Bench
 class Function
 {
 public:
 class Function
 {
 public:
-    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;
@@ -39,9 +46,14 @@ public:
     /// 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; }
@@ -55,7 +67,9 @@ private:
 
     // 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 Type m_func;
+    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;
@@ -98,4 +112,15 @@ wxString GetStringParameter();
     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_