X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fbench.cc;h=bb583e39d33d500653bc7ce0dddbd469578c4dbb;hb=33c2c1ddee9638fc4e59dbfdbeee2fb540778819;hp=0559b5a931cc4a465eff32e78835b9366f3797ee;hpb=ae6860a1e10c0dc62db16fd47aacd8c19a79c754;p=libdcp.git diff --git a/test/bench.cc b/test/bench.cc index 0559b5a9..bb583e39 100644 --- a/test/bench.cc +++ b/test/bench.cc @@ -1,33 +1,67 @@ /* Copyright (C) 2015 Carl Hetherington - This program is free software; you can redistribute it and/or modify + 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. - This program is distributed in the hope that it will be useful, + 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - + along with libdcp. If not, see . */ #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[]) @@ -37,52 +71,31 @@ main (int argc, char* argv[]) exit (EXIT_FAILURE); } - int const decompress_count = 100; - int const compress_count = 100; + int const count = 100; int const j2k_bandwidth = 100000000; - struct timeval start; dcp::Data j2k (boost::filesystem::path (argv[1]) / "thx.j2c"); - gettimeofday (&start, 0); - - shared_ptr xyz; - for (int i = 0; i < decompress_count; ++i) { - xyz = dcp::decompress_j2k (j2k, 0); - cout << (i + 1) << " "; - } - cout << "\n"; - - struct timeval stop; - gettimeofday (&stop, 0); - - double start_seconds = start.tv_sec + double(start.tv_usec) / 1000000; - double stop_seconds = stop.tv_sec + double(stop.tv_usec) / 1000000; - if (dcp::built_with_debug) { - cout << "Decompress (debug build): "; - } else { - cout << "Decompress: "; - } - cout << decompress_count / (stop_seconds - start_seconds) << " fps.\n"; - - gettimeofday (&start, 0); - - for (int i = 0; i < compress_count; ++i) { - dcp::compress_j2k (xyz, j2k_bandwidth, 24, false, false); + 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"; - gettimeofday (&stop, 0); - - start_seconds = start.tv_sec + double(start.tv_usec) / 1000000; - stop_seconds = stop.tv_sec + double(stop.tv_usec) / 1000000; - if (dcp::built_with_debug) { - cout << "Compress (debug build) "; - } else { - cout << "Compress "; - } + cout << "Decompress: " << count / decompress.get() << " fps.\n"; + cout << "Compress: " << count / compress.get() << " fps.\n"; - cout << (j2k_bandwidth / 1000000) << "Mbps: " - << compress_count / (stop_seconds - start_seconds) << " fps."; + FILE* f = fopen ("check.j2c", "wb"); + fwrite (recomp.data().get(), 1, recomp.size(), f); + fclose (f); }