// Purpose: Main file of the benchmarking suite
// Author: Vadim Zeitlin
// Created: 2008-07-19
-// RCS-ID: $Id$
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
#include "wx/cmdline.h"
#include "wx/stopwatch.h"
+#if wxUSE_GUI
+ #include "wx/frame.h"
+#endif
+
#include "bench.h"
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
static const char OPTION_LIST = 'l';
+static const char OPTION_SINGLE = '1';
static const char OPTION_AVG_COUNT = 'a';
static const char OPTION_NUM_RUNS = 'n';
"list",
"list all the existing benchmarks");
+ parser.AddSwitch(OPTION_SINGLE,
+ "single",
+ "run the benchmark once only");
+
parser.AddOption(OPTION_AVG_COUNT,
"avg-count",
wxString::Format
return false;
}
- parser.Found(OPTION_AVG_COUNT, &m_avgCount);
- parser.Found(OPTION_NUM_RUNS, &m_numRuns);
+ bool numRunsSpecified = false;
+ if ( parser.Found(OPTION_AVG_COUNT, &m_avgCount) )
+ numRunsSpecified = true;
+ if ( parser.Found(OPTION_NUM_RUNS, &m_numRuns) )
+ numRunsSpecified = true;
parser.Found(OPTION_NUMERIC_PARAM, &m_numParam);
parser.Found(OPTION_STRING_PARAM, &m_strParam);
+ if ( parser.Found(OPTION_SINGLE) )
+ {
+ if ( numRunsSpecified )
+ {
+ wxFprintf(stderr, "Incompatible options specified.\n");
+
+ return false;
+ }
+
+ m_avgCount =
+ m_numRuns = 1;
+ }
// construct sorted array for quick verification of benchmark names
wxSortedArrayString benchmarks;
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++ )
sw.Pause();
- if ( !ok )
- break;
-
const long t = sw.Time();
if ( t < timeMin )
timeMin = t;
timeTotal += t;
}
+ func->Done();
+
if ( !ok )
{
wxPrintf("ERROR\n");
wxPrintf("%.2f avg (min=%ld, max=%ld)\n",
(float)timeTotal / times, timeMin, timeMax);
}
+
+ fflush(stdout);
}
return rc;