]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/benchmarks/bench.h
remove also wxT(); it's confusing, too; do load wxstd.mo catalog after calling wxLoca...
[wxWidgets.git] / tests / benchmarks / bench.h
index eae52886f4ce7fbeae91c61d5fb5ddb4cb024353..8b1ef764e5e67b082b9ee39bb1b6a67467c2f713 100644 (file)
@@ -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;
@@ -71,6 +85,14 @@ private:
  */
 long GetNumericParameter();
 
  */
 long GetNumericParameter();
 
+/**
+    Get the string parameter.
+
+    Tests may use this parameter in whatever way they see fit, by default it is
+    empty but can be set to a different value by user from the command line.
+ */
+wxString GetStringParameter();
+
 } // namespace Bench
 
 /**
 } // namespace Bench
 
 /**
@@ -90,4 +112,15 @@ long GetNumericParameter();
     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_