X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ebfa7ceaa468f67d73407eb768aa44115c3220a7..d9a4a0d022f4a2d03422411eb93e5b9dc28d5d4c:/tests/benchmarks/bench.cpp diff --git a/tests/benchmarks/bench.cpp b/tests/benchmarks/bench.cpp index c885d337ed..2662554ef8 100644 --- a/tests/benchmarks/bench.cpp +++ b/tests/benchmarks/bench.cpp @@ -5,7 +5,7 @@ // Created: 2008-07-19 // RCS-ID: $Id$ // Copyright: (c) 2008 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -27,6 +27,7 @@ // ---------------------------------------------------------------------------- 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'; @@ -124,6 +125,10 @@ void BenchApp::OnInitCmdLine(wxCmdLineParser& parser) "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 @@ -180,10 +185,25 @@ bool BenchApp::OnCmdLineParsed(wxCmdLineParser& parser) 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; @@ -234,8 +254,8 @@ int BenchApp::OnRun() 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++ ) @@ -245,9 +265,6 @@ int BenchApp::OnRun() sw.Pause(); - if ( !ok ) - break; - const long t = sw.Time(); if ( t < timeMin ) timeMin = t; @@ -256,6 +273,8 @@ int BenchApp::OnRun() timeTotal += t; } + func->Done(); + if ( !ok ) { wxPrintf("ERROR\n"); @@ -275,6 +294,8 @@ int BenchApp::OnRun() wxPrintf("%.2f avg (min=%ld, max=%ld)\n", (float)timeTotal / times, timeMin, timeMax); } + + fflush(stdout); } return rc;