36 #include <visp3/core/vpConfig.h> 38 #ifdef VISP_HAVE_CATCH2 39 #define CATCH_CONFIG_ENABLE_BENCHMARKING 40 #define CATCH_CONFIG_RUNNER 44 #include <visp3/core/vpIoTools.h> 45 #include <visp3/io/vpImageIo.h> 48 static std::vector<std::string> paths {
49 ipath +
"/Solvay/Solvay_conference_1927_Version2_640x440",
50 ipath +
"/Solvay/Solvay_conference_1927_Version2_1024x705",
51 ipath +
"/Solvay/Solvay_conference_1927_Version2_1280x881",
52 ipath +
"/Solvay/Solvay_conference_1927_Version2_2126x1463",
54 static std::vector<std::string> names {
55 "Solvay (640x440)",
"Solvay (1024x705)",
"Solvay (1280x881)",
"Solvay (2126x1463)" 57 static std::vector<vpImageIo::vpImageIoBackendType> backends {
58 #if defined(VISP_HAVE_JPEG) && defined(VISP_HAVE_PNG) 61 #if defined(VISP_HAVE_OPENCV) 67 static std::vector<std::string> backendNamesJpeg {
68 "libjpeg",
"OpenCV",
"simd",
"stb" 70 static std::vector<std::string> backendNamesPng {
71 "libpng",
"OpenCV",
"simd",
"stb" 73 static int nThreads = 0;
75 TEST_CASE(
"Benchmark grayscale JPEG image loading",
"[benchmark]") {
76 for (
size_t i = 0; i < paths.size(); i++) {
78 for (
size_t j = 0; j < backends.size(); j++) {
81 BENCHMARK(backendNamesJpeg[j] +
" backend") {
90 TEST_CASE(
"Benchmark RGBA JPEG image loading",
"[benchmark]") {
91 for (
size_t i = 0; i < paths.size(); i++) {
93 for (
size_t j = 0; j < backends.size(); j++) {
96 BENCHMARK(backendNamesJpeg[j] +
" backend") {
105 TEST_CASE(
"Benchmark grayscale PNG image loading",
"[benchmark]") {
106 for (
size_t i = 0; i < paths.size(); i++) {
108 for (
size_t j = 0; j < backends.size(); j++) {
111 BENCHMARK(backendNamesPng[j] +
" backend") {
120 TEST_CASE(
"Benchmark RGBA PNG image loading",
"[benchmark]") {
121 for (
size_t i = 0; i < paths.size(); i++) {
123 for (
size_t j = 0; j < backends.size(); j++) {
126 BENCHMARK(backendNamesPng[j] +
" backend") {
135 TEST_CASE(
"Benchmark grayscale JPEG image saving",
"[benchmark]") {
137 std::string directory_filename_tmp = tmp_dir +
"/vpIoTools_perfImageLoadSave_" +
vpTime::getDateTime(
"%Y-%m-%d_%H.%M.%S");
141 for (
size_t i = 0; i < paths.size(); i++) {
146 for (
size_t j = 0; j < backends.size(); j++) {
147 BENCHMARK(backendNamesJpeg[j] +
" backend") {
148 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
158 TEST_CASE(
"Benchmark RGBA JPEG image saving",
"[benchmark]") {
160 std::string directory_filename_tmp = tmp_dir +
"/vpIoTools_perfImageLoadSave_" +
vpTime::getDateTime(
"%Y-%m-%d_%H.%M.%S");
164 for (
size_t i = 0; i < paths.size(); i++) {
169 for (
size_t j = 0; j < backends.size(); j++) {
170 BENCHMARK(backendNamesJpeg[j] +
" backend") {
171 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.jpg", backends[j]);
181 TEST_CASE(
"Benchmark grayscale PNG image saving",
"[benchmark]") {
183 std::string directory_filename_tmp = tmp_dir +
"/vpIoTools_perfImageLoadSave_" +
vpTime::getDateTime(
"%Y-%m-%d_%H.%M.%S");
187 for (
size_t i = 0; i < paths.size(); i++) {
192 for (
size_t j = 0; j < backends.size(); j++) {
193 BENCHMARK(backendNamesPng[j] +
" backend") {
194 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
204 TEST_CASE(
"Benchmark RGBA PNG image saving",
"[benchmark]") {
206 std::string directory_filename_tmp = tmp_dir +
"/vpIoTools_perfImageLoadSave_" +
vpTime::getDateTime(
"%Y-%m-%d_%H.%M.%S");
210 for (
size_t i = 0; i < paths.size(); i++) {
215 for (
size_t j = 0; j < backends.size(); j++) {
216 BENCHMARK(backendNamesPng[j] +
" backend") {
217 vpImageIo::write(I, directory_filename_tmp +
"/ViSP_tmp_perf_write.png", backends[j]);
227 int main(
int argc,
char *argv[])
229 Catch::Session session;
231 bool runBenchmark =
false;
233 using namespace Catch::clara;
234 auto cli = session.cli()
238 | Opt(nThreads,
"nThreads")
240 (
"Number of threads");
246 session.applyCommandLine(argc, argv);
249 std::cout <<
"nThreads: " << nThreads <<
" / available threads: " << std::thread::hardware_concurrency() << std::endl;
251 int numFailed = session.run();
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Use embedded simd library.
Use system libraries like libpng or libjpeg.
Use embedded stb_image library.
static void write(const vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
VISP_EXPORT std::string getDateTime(const std::string &format="%Y/%m/%d %H:%M:%S")