From d6793893c044477f8ae55f8f4624f5d4a873956a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 30 Sep 2018 00:29:02 +0200 Subject: [PATCH] Add a simple benchmark of wxDisplaySize() and related functions This benchmark shows that wxGetDisplaySize() has only minimal overhead compared to wxDisplaySize(), but wxDisplay().GetGeometry() is almost 3 times slower (under wxGTK). --- tests/benchmarks/Makefile.in | 4 +++ tests/benchmarks/bench.bkl | 1 + tests/benchmarks/bench_vc7_bench_gui.vcproj | 3 +++ tests/benchmarks/bench_vc8_bench_gui.vcproj | 4 +++ tests/benchmarks/bench_vc9_bench_gui.vcproj | 4 +++ tests/benchmarks/display.cpp | 30 +++++++++++++++++++++ tests/benchmarks/makefile.bcc | 4 +++ tests/benchmarks/makefile.gcc | 4 +++ tests/benchmarks/makefile.vc | 4 +++ 9 files changed, 58 insertions(+) create mode 100644 tests/benchmarks/display.cpp diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in index 401b6e54b8..ab8a00ec9d 100644 --- a/tests/benchmarks/Makefile.in +++ b/tests/benchmarks/Makefile.in @@ -64,6 +64,7 @@ BENCH_GUI_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ BENCH_GUI_OBJECTS = \ $(__bench_gui___win32rc) \ bench_gui_bench.o \ + bench_gui_display.o \ bench_gui_image.o BENCH_GRAPHICS_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \ @@ -306,6 +307,9 @@ bench_gui_sample_rc.o: $(srcdir)/../../samples/sample.rc bench_gui_bench.o: $(srcdir)/bench.cpp $(CXXC) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(srcdir)/bench.cpp +bench_gui_display.o: $(srcdir)/display.cpp + $(CXXC) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(srcdir)/display.cpp + bench_gui_image.o: $(srcdir)/image.cpp $(CXXC) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(srcdir)/image.cpp diff --git a/tests/benchmarks/bench.bkl b/tests/benchmarks/bench.bkl index acf774a861..f3efa94295 100644 --- a/tests/benchmarks/bench.bkl +++ b/tests/benchmarks/bench.bkl @@ -36,6 +36,7 @@ bench.cpp + display.cpp image.cpp core diff --git a/tests/benchmarks/bench_vc7_bench_gui.vcproj b/tests/benchmarks/bench_vc7_bench_gui.vcproj index 6556d7d2cf..d5393ca7ff 100644 --- a/tests/benchmarks/bench_vc7_bench_gui.vcproj +++ b/tests/benchmarks/bench_vc7_bench_gui.vcproj @@ -286,6 +286,9 @@ + + diff --git a/tests/benchmarks/bench_vc8_bench_gui.vcproj b/tests/benchmarks/bench_vc8_bench_gui.vcproj index 323f786d9f..fe30ed5fd1 100644 --- a/tests/benchmarks/bench_vc8_bench_gui.vcproj +++ b/tests/benchmarks/bench_vc8_bench_gui.vcproj @@ -810,6 +810,10 @@ RelativePath=".\bench.cpp" > + + diff --git a/tests/benchmarks/bench_vc9_bench_gui.vcproj b/tests/benchmarks/bench_vc9_bench_gui.vcproj index 45fc9f54ac..6f9f17cf00 100644 --- a/tests/benchmarks/bench_vc9_bench_gui.vcproj +++ b/tests/benchmarks/bench_vc9_bench_gui.vcproj @@ -782,6 +782,10 @@ RelativePath=".\bench.cpp" > + + diff --git a/tests/benchmarks/display.cpp b/tests/benchmarks/display.cpp new file mode 100644 index 0000000000..d9ad2cb7d5 --- /dev/null +++ b/tests/benchmarks/display.cpp @@ -0,0 +1,30 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: tests/benchmarks/display.cpp +// Purpose: wxDisplay benchmarks +// Author: Vadim Zeitlin +// Created: 2018-09-30 +// Copyright: (c) 2018 Vadim Zeitlin +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/display.h" +#include "wx/gdicmn.h" + +#include "bench.h" + +BENCHMARK_FUNC(DisplaySize) +{ + int w, h; + wxDisplaySize(&w, &h); + return w > 0; +} + +BENCHMARK_FUNC(GetDisplaySize) +{ + return wxGetDisplaySize().x > 0; +} + +BENCHMARK_FUNC(DisplayGetGeometry) +{ + return wxDisplay().GetGeometry().GetSize().x > 0; +} diff --git a/tests/benchmarks/makefile.bcc b/tests/benchmarks/makefile.bcc index b34d95adee..be62ce066f 100644 --- a/tests/benchmarks/makefile.bcc +++ b/tests/benchmarks/makefile.bcc @@ -54,6 +54,7 @@ BENCH_GUI_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \ $(__DLLFLAG_p) -I.\..\..\samples -DNOPCH $(CPPFLAGS) $(CXXFLAGS) BENCH_GUI_OBJECTS = \ $(OBJS)\bench_gui_bench.obj \ + $(OBJS)\bench_gui_display.obj \ $(OBJS)\bench_gui_image.obj BENCH_GRAPHICS_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \ $(__OPTIMIZEFLAG) $(__THREADSFLAG_1) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \ @@ -340,6 +341,9 @@ $(OBJS)\bench_gui_sample.res: .\..\..\samples\sample.rc $(OBJS)\bench_gui_bench.obj: .\bench.cpp $(CXX) -q -c -P -o$@ $(BENCH_GUI_CXXFLAGS) .\bench.cpp +$(OBJS)\bench_gui_display.obj: .\display.cpp + $(CXX) -q -c -P -o$@ $(BENCH_GUI_CXXFLAGS) .\display.cpp + $(OBJS)\bench_gui_image.obj: .\image.cpp $(CXX) -q -c -P -o$@ $(BENCH_GUI_CXXFLAGS) .\image.cpp diff --git a/tests/benchmarks/makefile.gcc b/tests/benchmarks/makefile.gcc index 54948a8494..6546847f3f 100644 --- a/tests/benchmarks/makefile.gcc +++ b/tests/benchmarks/makefile.gcc @@ -49,6 +49,7 @@ BENCH_GUI_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \ BENCH_GUI_OBJECTS = \ $(OBJS)\bench_gui_sample_rc.o \ $(OBJS)\bench_gui_bench.o \ + $(OBJS)\bench_gui_display.o \ $(OBJS)\bench_gui_image.o BENCH_GRAPHICS_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \ $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \ @@ -318,6 +319,9 @@ $(OBJS)\bench_gui_sample_rc.o: ./../../samples/sample.rc $(OBJS)\bench_gui_bench.o: ./bench.cpp $(CXX) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\bench_gui_display.o: ./display.cpp + $(CXX) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\bench_gui_image.o: ./image.cpp $(CXX) -c -o $@ $(BENCH_GUI_CXXFLAGS) $(CPPDEPS) $< diff --git a/tests/benchmarks/makefile.vc b/tests/benchmarks/makefile.vc index 784e045c6c..3dbf2a2da8 100644 --- a/tests/benchmarks/makefile.vc +++ b/tests/benchmarks/makefile.vc @@ -51,6 +51,7 @@ BENCH_GUI_CXXFLAGS = /M$(__RUNTIME_LIBS_26)$(__DEBUGRUNTIME) /DWIN32 \ /DNOPCH /D_CONSOLE $(__RTTIFLAG) $(__EXCEPTIONSFLAG) $(CPPFLAGS) $(CXXFLAGS) BENCH_GUI_OBJECTS = \ $(OBJS)\bench_gui_bench.obj \ + $(OBJS)\bench_gui_display.obj \ $(OBJS)\bench_gui_image.obj BENCH_GUI_RESOURCES = \ $(OBJS)\bench_gui_sample.res @@ -512,6 +513,9 @@ $(OBJS)\bench_gui_sample.res: .\..\..\samples\sample.rc $(OBJS)\bench_gui_bench.obj: .\bench.cpp $(CXX) /c /nologo /TP /Fo$@ $(BENCH_GUI_CXXFLAGS) .\bench.cpp +$(OBJS)\bench_gui_display.obj: .\display.cpp + $(CXX) /c /nologo /TP /Fo$@ $(BENCH_GUI_CXXFLAGS) .\display.cpp + $(OBJS)\bench_gui_image.obj: .\image.cpp $(CXX) /c /nologo /TP /Fo$@ $(BENCH_GUI_CXXFLAGS) .\image.cpp