From 3e356d414488f3949baf7467bbc784f400287202 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 17 Oct 2008 12:24:24 +0000 Subject: [PATCH] add a simple benchmark for wx and iconv converters benchmarking git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56398 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- tests/benchmarks/Makefile.in | 4 ++ tests/benchmarks/bench.bkl | 1 + tests/benchmarks/bench.dsp | 4 ++ tests/benchmarks/bench.vcproj | 3 ++ tests/benchmarks/makefile.bcc | 4 ++ tests/benchmarks/makefile.gcc | 4 ++ tests/benchmarks/makefile.vc | 4 ++ tests/benchmarks/makefile.wat | 4 ++ tests/benchmarks/mbconv.cpp | 79 +++++++++++++++++++++++++++++++++++ 9 files changed, 107 insertions(+) create mode 100644 tests/benchmarks/mbconv.cpp diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in index 98b51ded8b..40cc91cb95 100644 --- a/tests/benchmarks/Makefile.in +++ b/tests/benchmarks/Makefile.in @@ -47,6 +47,7 @@ BENCH_OBJECTS = \ bench_htmlpars.o \ bench_htmltag.o \ bench_ipcclient.o \ + bench_mbconv.o \ bench_strings.o \ bench_tls.o @@ -136,6 +137,9 @@ bench_htmltag.o: $(srcdir)/htmlparser/htmltag.cpp bench_ipcclient.o: $(srcdir)/ipcclient.cpp $(CXXC) -c -o $@ $(BENCH_CXXFLAGS) $(srcdir)/ipcclient.cpp +bench_mbconv.o: $(srcdir)/mbconv.cpp + $(CXXC) -c -o $@ $(BENCH_CXXFLAGS) $(srcdir)/mbconv.cpp + bench_strings.o: $(srcdir)/strings.cpp $(CXXC) -c -o $@ $(BENCH_CXXFLAGS) $(srcdir)/strings.cpp diff --git a/tests/benchmarks/bench.bkl b/tests/benchmarks/bench.bkl index d24d9fb401..819ab0bd41 100644 --- a/tests/benchmarks/bench.bkl +++ b/tests/benchmarks/bench.bkl @@ -14,6 +14,7 @@ htmlparser/htmlpars.cpp htmlparser/htmltag.cpp ipcclient.cpp + mbconv.cpp strings.cpp tls.cpp diff --git a/tests/benchmarks/bench.dsp b/tests/benchmarks/bench.dsp index 193aa2597e..2789d23d17 100644 --- a/tests/benchmarks/bench.dsp +++ b/tests/benchmarks/bench.dsp @@ -251,6 +251,10 @@ SOURCE=.\ipcclient.cpp # End Source File # Begin Source File +SOURCE=.\mbconv.cpp +# End Source File +# Begin Source File + SOURCE=.\strings.cpp # End Source File # Begin Source File diff --git a/tests/benchmarks/bench.vcproj b/tests/benchmarks/bench.vcproj index 4abc057ec9..bc97321870 100644 --- a/tests/benchmarks/bench.vcproj +++ b/tests/benchmarks/bench.vcproj @@ -537,6 +537,9 @@ + + diff --git a/tests/benchmarks/makefile.bcc b/tests/benchmarks/makefile.bcc index 8328ca9ccb..855190d6ff 100644 --- a/tests/benchmarks/makefile.bcc +++ b/tests/benchmarks/makefile.bcc @@ -39,6 +39,7 @@ BENCH_OBJECTS = \ $(OBJS)\bench_htmlpars.obj \ $(OBJS)\bench_htmltag.obj \ $(OBJS)\bench_ipcclient.obj \ + $(OBJS)\bench_mbconv.obj \ $(OBJS)\bench_strings.obj \ $(OBJS)\bench_tls.obj @@ -212,6 +213,9 @@ $(OBJS)\bench_htmltag.obj: .\htmlparser\htmltag.cpp $(OBJS)\bench_ipcclient.obj: .\ipcclient.cpp $(CXX) -q -c -P -o$@ $(BENCH_CXXFLAGS) .\ipcclient.cpp +$(OBJS)\bench_mbconv.obj: .\mbconv.cpp + $(CXX) -q -c -P -o$@ $(BENCH_CXXFLAGS) .\mbconv.cpp + $(OBJS)\bench_strings.obj: .\strings.cpp $(CXX) -q -c -P -o$@ $(BENCH_CXXFLAGS) .\strings.cpp diff --git a/tests/benchmarks/makefile.gcc b/tests/benchmarks/makefile.gcc index c8c7b7f1d7..91f3c43b6c 100644 --- a/tests/benchmarks/makefile.gcc +++ b/tests/benchmarks/makefile.gcc @@ -32,6 +32,7 @@ BENCH_OBJECTS = \ $(OBJS)\bench_htmlpars.o \ $(OBJS)\bench_htmltag.o \ $(OBJS)\bench_ipcclient.o \ + $(OBJS)\bench_mbconv.o \ $(OBJS)\bench_strings.o \ $(OBJS)\bench_tls.o @@ -202,6 +203,9 @@ $(OBJS)\bench_htmltag.o: ./htmlparser/htmltag.cpp $(OBJS)\bench_ipcclient.o: ./ipcclient.cpp $(CXX) -c -o $@ $(BENCH_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\bench_mbconv.o: ./mbconv.cpp + $(CXX) -c -o $@ $(BENCH_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\bench_strings.o: ./strings.cpp $(CXX) -c -o $@ $(BENCH_CXXFLAGS) $(CPPDEPS) $< diff --git a/tests/benchmarks/makefile.vc b/tests/benchmarks/makefile.vc index fb7cb3e559..13fcddd7a0 100644 --- a/tests/benchmarks/makefile.vc +++ b/tests/benchmarks/makefile.vc @@ -33,6 +33,7 @@ BENCH_OBJECTS = \ $(OBJS)\bench_htmlpars.obj \ $(OBJS)\bench_htmltag.obj \ $(OBJS)\bench_ipcclient.obj \ + $(OBJS)\bench_mbconv.obj \ $(OBJS)\bench_strings.obj \ $(OBJS)\bench_tls.obj @@ -269,6 +270,9 @@ $(OBJS)\bench_htmltag.obj: .\htmlparser\htmltag.cpp $(OBJS)\bench_ipcclient.obj: .\ipcclient.cpp $(CXX) /c /nologo /TP /Fo$@ $(BENCH_CXXFLAGS) .\ipcclient.cpp +$(OBJS)\bench_mbconv.obj: .\mbconv.cpp + $(CXX) /c /nologo /TP /Fo$@ $(BENCH_CXXFLAGS) .\mbconv.cpp + $(OBJS)\bench_strings.obj: .\strings.cpp $(CXX) /c /nologo /TP /Fo$@ $(BENCH_CXXFLAGS) .\strings.cpp diff --git a/tests/benchmarks/makefile.wat b/tests/benchmarks/makefile.wat index 3e3b9b01d4..b14102eb7e 100644 --- a/tests/benchmarks/makefile.wat +++ b/tests/benchmarks/makefile.wat @@ -218,6 +218,7 @@ BENCH_OBJECTS = & $(OBJS)\bench_htmlpars.obj & $(OBJS)\bench_htmltag.obj & $(OBJS)\bench_ipcclient.obj & + $(OBJS)\bench_mbconv.obj & $(OBJS)\bench_strings.obj & $(OBJS)\bench_tls.obj @@ -266,6 +267,9 @@ $(OBJS)\bench_htmltag.obj : .AUTODEPEND .\htmlparser\htmltag.cpp $(OBJS)\bench_ipcclient.obj : .AUTODEPEND .\ipcclient.cpp $(CXX) -bt=nt -zq -fo=$^@ $(BENCH_CXXFLAGS) $< +$(OBJS)\bench_mbconv.obj : .AUTODEPEND .\mbconv.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(BENCH_CXXFLAGS) $< + $(OBJS)\bench_strings.obj : .AUTODEPEND .\strings.cpp $(CXX) -bt=nt -zq -fo=$^@ $(BENCH_CXXFLAGS) $< diff --git a/tests/benchmarks/mbconv.cpp b/tests/benchmarks/mbconv.cpp new file mode 100644 index 0000000000..a3e51305d6 --- /dev/null +++ b/tests/benchmarks/mbconv.cpp @@ -0,0 +1,79 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: tests/benchmarks/mbconv.cpp +// Purpose: MB<->WC conversion benchmarks +// Author: Vadim Zeitlin +// Created: 2008-10-17 +// RCS-ID: $Id$ +// Copyright: (c) 2008 Vadim Zeitlin +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#include "wx/strconv.h" +#include "wx/string.h" + +#include "bench.h" + +namespace +{ + +const wchar_t *TEST_STRING = + L"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod" + L"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim" + L"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea" + L"commodo consequat. Duis aute irure dolor in reprehenderit in voluptate" + L"velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint" + L"occaecat cupidatat non proident, sunt in culpa qui officia deserunt" + L"mollit anim id est laborum." + ; + +// just compute the length of the resulting multibyte string +bool ComputeMBLength(const wxMBConv& conv) +{ + // we suppose a fixed length encoding here (which happens to cover UTF-8 + // too as long as the test string is ASCII) + return conv.FromWChar(NULL, 0, TEST_STRING) + == (wcslen(TEST_STRING) + 1)*conv.GetMBNulLen(); +} + +// perform the conversion +bool ConvertToMB(const wxMBConv& conv) +{ + const size_t outlen = (wcslen(TEST_STRING) + 1)*conv.GetMBNulLen(); + wxCharBuffer buf(outlen - 1); // it adds 1 internally + return conv.FromWChar(buf.data(), outlen, TEST_STRING) == outlen; +} + +} // anonymous namespace + +BENCHMARK_FUNC(UTF16InitWX) +{ + wxMBConvUTF16 conv; + return true; +} + +BENCHMARK_FUNC(UTF16InitSys) +{ + wxCSConv conv("UTF-16LE"); + return conv.IsOk(); +} + +BENCHMARK_FUNC(UTF16LenWX) +{ + return ComputeMBLength(wxMBConvUTF16()); +} + +BENCHMARK_FUNC(UTF16LenSys) +{ + return ComputeMBLength(wxCSConv("UTF-16LE")); +} + +BENCHMARK_FUNC(UTF16WX) +{ + return ConvertToMB(wxMBConvUTF16()); +} + +BENCHMARK_FUNC(UTF16Sys) +{ + return ConvertToMB(wxCSConv("UTF-16LE")); +} + -- 2.47.2