From ec82ce2d44d5ba492a3dfa6e740ff21549d438e1 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 28 Oct 2020 15:49:15 +0100 Subject: Move benchmark out of test/ into benchmark/ --- benchmark/j2k_transcode.cc | 114 ++++++++++++++++++++++++++++++++++++++++++++ benchmark/wscript | 2 +- run/bench | 18 ------- run/benchmark | 14 ++++-- test/bench.cc | 115 --------------------------------------------- test/wscript | 8 ---- 6 files changed, 125 insertions(+), 146 deletions(-) create mode 100644 benchmark/j2k_transcode.cc delete mode 100755 run/bench delete mode 100644 test/bench.cc diff --git a/benchmark/j2k_transcode.cc b/benchmark/j2k_transcode.cc new file mode 100644 index 00000000..1a814b69 --- /dev/null +++ b/benchmark/j2k_transcode.cc @@ -0,0 +1,114 @@ +/* + Copyright (C) 2015-2019 Carl Hetherington + + This file is part of libdcp. + + libdcp is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + libdcp is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with libdcp. If not, see . + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. +*/ + +#include "data.h" +#include "util.h" +#include "version.h" +#include "j2k.h" +#include "openjpeg_image.h" +#include +#include +#include + +using std::cout; +using std::cerr; +using boost::shared_ptr; + +class Timer +{ +public: + Timer () + : _total (0) + { + + } + + void start () + { + gettimeofday (&_start, 0); + } + + void stop () + { + struct timeval stop; + gettimeofday (&stop, 0); + _total += (stop.tv_sec + stop.tv_usec / 1e6) - (_start.tv_sec + _start.tv_usec / 1e6); + } + + double get () + { + return _total; + } + +private: + double _total; + struct timeval _start; +}; + +/** Run some basic benchmarks of JPEG2000 encoding / decoding */ +int +main (int argc, char* argv[]) +{ + if (argc < 2) { + cerr << "Syntax: " << argv[0] << " private-test-path\n"; + exit (EXIT_FAILURE); + } + + int const count = 100; + int const j2k_bandwidth = 100000000; + + dcp::Data j2k (boost::filesystem::path (argv[1]) / "thx.j2c"); + + Timer decompress; + Timer compress; + + dcp::Data recomp; + for (int i = 0; i < count; ++i) { + decompress.start (); + shared_ptr xyz = dcp::decompress_j2k (j2k, 0); + decompress.stop (); + compress.start (); + recomp = dcp::compress_j2k (xyz, j2k_bandwidth, 24, false, false); + compress.stop (); + cout << (i + 1) << " "; + cout.flush (); + } + cout << "\n"; + + cout << "Decompress: " << count / decompress.get() << " fps.\n"; + cout << "Compress: " << count / compress.get() << " fps.\n"; + + FILE* f = fopen ("check.j2c", "wb"); + fwrite (recomp.data().get(), 1, recomp.size(), f); + fclose (f); +} diff --git a/benchmark/wscript b/benchmark/wscript index 3a045589..219ca3fe 100644 --- a/benchmark/wscript +++ b/benchmark/wscript @@ -32,7 +32,7 @@ # def build(bld): - for p in ['rgb_to_xyz']: + for p in ['rgb_to_xyz', 'j2k_transcode']: obj = bld(features='cxx cxxprogram') obj.name = p obj.uselib = 'BOOST_FILESYSTEM ASDCPLIB_CTH' diff --git a/run/bench b/run/bench deleted file mode 100755 index ec6890be..00000000 --- a/run/bench +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Private test data; this is stuff that is non-distributable -private=../libdcp1-test-private - -export LD_LIBRARY_PATH=build/src:build/asdcplib/src:$LD_LIBRARY_PATH -if [ "$1" == "--debug" ]; then - shift - gdb --args build/test/bench $private -elif [ "$1" == "--valgrind" ]; then - shift - valgrind --tool="memcheck" build/test/bench $private -elif [ "$1" == "--callgrind" ]; then - shift - valgrind --tool="callgrind" build/test/bench $private -else - build/test/bench $private -fi diff --git a/run/benchmark b/run/benchmark index 62c40fa2..3f18afbe 100755 --- a/run/benchmark +++ b/run/benchmark @@ -1,16 +1,22 @@ #!/bin/bash +perf=0 +if [ "$1" == "--perf" ]; then + perf=1 + shift +fi + bm=$1 +shift if [ "$bm" == "" ]; then echo "Syntax: $0 [--perf] " exit 1 fi export LD_LIBRARY_PATH=build/src -if [ "$1" == "--perf" ]; then - shift - perf stat build/benchmark/$1 +if [ "$perf" == "1" ]; then + perf stat build/benchmark/$bm "$*" else - build/benchmark/$1 + build/benchmark/$bm "$*" fi diff --git a/test/bench.cc b/test/bench.cc deleted file mode 100644 index cfda4612..00000000 --- a/test/bench.cc +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright (C) 2015-2019 Carl Hetherington - - This file is part of libdcp. - - libdcp is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - libdcp is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with libdcp. If not, see . - - In addition, as a special exception, the copyright holders give - permission to link the code of portions of this program with the - OpenSSL library under certain conditions as described in each - individual source file, and distribute linked combinations - including the two. - - You must obey the GNU General Public License in all respects - for all of the code used other than OpenSSL. If you modify - file(s) with this exception, you may extend this exception to your - version of the file(s), but you are not obligated to do so. If you - do not wish to do so, delete this exception statement from your - version. If you delete this exception statement from all source - files in the program, then also delete it here. -*/ - -#include "data.h" -#include "test.h" -#include "util.h" -#include "version.h" -#include "j2k.h" -#include "openjpeg_image.h" -#include -#include -#include - -using std::cout; -using std::cerr; -using boost::shared_ptr; - -class Timer -{ -public: - Timer () - : _total (0) - { - - } - - void start () - { - gettimeofday (&_start, 0); - } - - void stop () - { - struct timeval stop; - gettimeofday (&stop, 0); - _total += (stop.tv_sec + stop.tv_usec / 1e6) - (_start.tv_sec + _start.tv_usec / 1e6); - } - - double get () - { - return _total; - } - -private: - double _total; - struct timeval _start; -}; - -/** Run some basic benchmarks of JPEG2000 encoding / decoding */ -int -main (int argc, char* argv[]) -{ - if (argc < 2) { - cerr << "Syntax: " << argv[0] << " private-test-path\n"; - exit (EXIT_FAILURE); - } - - int const count = 100; - int const j2k_bandwidth = 100000000; - - dcp::Data j2k (boost::filesystem::path (argv[1]) / "thx.j2c"); - - Timer decompress; - Timer compress; - - dcp::Data recomp; - for (int i = 0; i < count; ++i) { - decompress.start (); - shared_ptr xyz = dcp::decompress_j2k (j2k, 0); - decompress.stop (); - compress.start (); - recomp = dcp::compress_j2k (xyz, j2k_bandwidth, 24, false, false); - compress.stop (); - cout << (i + 1) << " "; - cout.flush (); - } - cout << "\n"; - - cout << "Decompress: " << count / decompress.get() << " fps.\n"; - cout << "Compress: " << count / compress.get() << " fps.\n"; - - FILE* f = fopen ("check.j2c", "wb"); - fwrite (recomp.data().get(), 1, recomp.size(), f); - fclose (f); -} diff --git a/test/wscript b/test/wscript index aa134bde..9a8a7b53 100644 --- a/test/wscript +++ b/test/wscript @@ -138,11 +138,3 @@ def build(bld): obj.source = 'rewrite_subs.cc' obj.target = 'rewrite_subs' obj.install_path = '' - - obj = bld(features='cxx cxxprogram') - obj.name = 'bench' - obj.uselib = 'BOOST_FILESYSTEM OPENJPEG CXML OPENMP ASDCPLIB_CTH XMLSEC1 OPENSSL LIBXML++' - obj.use = 'libdcp%s' % bld.env.API_VERSION - obj.source = 'bench.cc' - obj.target = 'bench' - obj.install_path = '' -- cgit v1.2.3