From: Vadim Zeitlin Date: Thu, 28 Aug 2008 17:14:39 +0000 (+0000) Subject: add the possibility to pass numeric parameters to benchmark functions X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/8fad8b2e523579570274d9a8ee561a038dec5cab?hp=3bbc1d95a1186dffdc1229299c9aaf8bdf57ebe9 add the possibility to pass numeric parameters to benchmark functions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55332 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/tests/benchmarks/bench.cpp b/tests/benchmarks/bench.cpp index 67005abab8..9fe61f52fa 100644 --- a/tests/benchmarks/bench.cpp +++ b/tests/benchmarks/bench.cpp @@ -30,6 +30,7 @@ static const char OPTION_LIST = 'l'; static const char OPTION_AVG_COUNT = 'a'; static const char OPTION_NUM_RUNS = 'n'; +static const char OPTION_NUMERIC_PARAM = 'p'; // ---------------------------------------------------------------------------- // BenchApp declaration @@ -53,6 +54,9 @@ public: virtual int OnRun(); virtual int OnExit(); + // accessor + int GetNumericParameter() const { return m_numParam; } + private: // list all registered benchmarks void ListBenchmarks(); @@ -60,25 +64,32 @@ private: // command lines options/parameters wxSortedArrayString m_toRun; long m_numRuns, - m_avgCount; + m_avgCount, + m_numParam; }; +IMPLEMENT_APP_CONSOLE(BenchApp) + // ============================================================================ -// Bench::Function implementation +// Bench namespace symbols implementation // ============================================================================ Bench::Function *Bench::Function::ms_head = NULL; +long Bench::GetNumericParameter() +{ + return wxGetApp().GetNumericParameter(); +} + // ============================================================================ // BenchApp implementation // ============================================================================ -IMPLEMENT_APP_CONSOLE(BenchApp) - BenchApp::BenchApp() { m_avgCount = 10; m_numRuns = 10000; // just some default (TODO: switch to time-based one) + m_numParam = 1; } bool BenchApp::OnInit() @@ -122,6 +133,12 @@ void BenchApp::OnInitCmdLine(wxCmdLineParser& parser) m_numRuns ), wxCMD_LINE_VAL_NUMBER); + parser.AddOption(OPTION_NUMERIC_PARAM, + "num-param", + "numeric parameter used by some benchmark functions " + "(default: 1)", + wxCMD_LINE_VAL_NUMBER); + parser.AddParam("benchmark name", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE); @@ -148,6 +165,7 @@ bool BenchApp::OnCmdLineParsed(wxCmdLineParser& parser) parser.Found(OPTION_AVG_COUNT, &m_avgCount); parser.Found(OPTION_NUM_RUNS, &m_numRuns); + parser.Found(OPTION_NUMERIC_PARAM, &m_numParam); // construct sorted array for quick verification of benchmark names wxSortedArrayString benchmarks; @@ -183,7 +201,7 @@ int BenchApp::OnRun() if ( m_toRun.Index(func->GetName()) == wxNOT_FOUND ) continue; - wxPrintf("Benchmarking %s: ", func->GetName()); + wxPrintf("Benchmarking %s(%ld): ", func->GetName(), m_numParam); long timeMin = LONG_MAX, timeMax = 0, diff --git a/tests/benchmarks/bench.h b/tests/benchmarks/bench.h index 96a9a1fc8c..eae52886f4 100644 --- a/tests/benchmarks/bench.h +++ b/tests/benchmarks/bench.h @@ -63,6 +63,14 @@ private: DECLARE_NO_COPY_CLASS(Function) }; +/** + Get the numeric parameter. + + Tests may use this parameter in whatever way they see fit, by default it is + 1 but can be set to a different value by user from the command line. + */ +long GetNumericParameter(); + } // namespace Bench /** diff --git a/tests/benchmarks/strings.cpp b/tests/benchmarks/strings.cpp index 306eca6b9b..23a181d8c3 100644 --- a/tests/benchmarks/strings.cpp +++ b/tests/benchmarks/strings.cpp @@ -296,7 +296,13 @@ BENCHMARK_FUNC(ParseHTML) static wxString html; if ( html.empty() ) { - wxFFile("htmltest.html").ReadAll(&html, wxConvUTF8); + wxString html1; + wxFFile("htmltest.html").ReadAll(&html1, wxConvUTF8); + + // this is going to make for some invalid HTML, of course, but it + // doesn't really matter + for ( long n = 0; n < Bench::GetNumericParameter(); n++ ) + html += html1; } parser.Parse(html);