bench_htmlpars.o \
bench_htmltag.o \
bench_ipcclient.o \
+ bench_mbconv.o \
bench_strings.o \
bench_tls.o
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
htmlparser/htmlpars.cpp
htmlparser/htmltag.cpp
ipcclient.cpp
+ mbconv.cpp
strings.cpp
tls.cpp
</sources>
# End Source File\r
# Begin Source File\r
\r
+SOURCE=.\mbconv.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
SOURCE=.\strings.cpp\r
# End Source File\r
# Begin Source File\r
<File\r
RelativePath=".\ipcclient.cpp">\r
</File>\r
+ <File\r
+ RelativePath=".\mbconv.cpp">\r
+ </File>\r
<File\r
RelativePath=".\strings.cpp">\r
</File>\r
$(OBJS)\bench_htmlpars.obj \
$(OBJS)\bench_htmltag.obj \
$(OBJS)\bench_ipcclient.obj \
+ $(OBJS)\bench_mbconv.obj \
$(OBJS)\bench_strings.obj \
$(OBJS)\bench_tls.obj
$(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
$(OBJS)\bench_htmlpars.o \
$(OBJS)\bench_htmltag.o \
$(OBJS)\bench_ipcclient.o \
+ $(OBJS)\bench_mbconv.o \
$(OBJS)\bench_strings.o \
$(OBJS)\bench_tls.o
$(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) $<
$(OBJS)\bench_htmlpars.obj \
$(OBJS)\bench_htmltag.obj \
$(OBJS)\bench_ipcclient.obj \
+ $(OBJS)\bench_mbconv.obj \
$(OBJS)\bench_strings.obj \
$(OBJS)\bench_tls.obj
$(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
$(OBJS)\bench_htmlpars.obj &
$(OBJS)\bench_htmltag.obj &
$(OBJS)\bench_ipcclient.obj &
+ $(OBJS)\bench_mbconv.obj &
$(OBJS)\bench_strings.obj &
$(OBJS)\bench_tls.obj
$(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) $<
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// 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 <vadim@wxwidgets.org>
+// 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"));
+}
+