diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-05-31 21:49:41 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-05-31 21:49:41 +0200 |
| commit | 46ef94502b3df6f4142c79e6926df34ca619f9dc (patch) | |
| tree | 1b7449bf4caaeaf3d0d834e68aa61c1305a99d16 | |
| parent | da78a8adb2302b15f89d353fa6610385f0bf2a69 (diff) | |
Add very simple benchmark for rgb_to_xyz.
| -rw-r--r-- | benchmark/rgb_to_xyz.cc | 69 | ||||
| -rw-r--r-- | benchmark/wscript | 42 | ||||
| -rwxr-xr-x | run/benchmark | 16 | ||||
| -rw-r--r-- | wscript | 3 |
4 files changed, 129 insertions, 1 deletions
diff --git a/benchmark/rgb_to_xyz.cc b/benchmark/rgb_to_xyz.cc new file mode 100644 index 00000000..7b4400ec --- /dev/null +++ b/benchmark/rgb_to_xyz.cc @@ -0,0 +1,69 @@ +/* + Copyright (C) 2020 Carl Hetherington <cth@carlh.net> + + 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 <http://www.gnu.org/licenses/>. + + 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 "openjpeg_image.h" +#include "rgb_xyz.h" +#include "colour_conversion.h" +#include <boost/scoped_array.hpp> +#include <stdint.h> + +using boost::scoped_array; +using boost::shared_ptr; + +int const trials = 256; + +int +main () +{ + srand (1); + + dcp::Size size(1998, 1080); + + scoped_array<uint8_t> rgb (new uint8_t[size.width * size.height * 6]); + for (int y = 0; y < size.height; ++y) { + uint16_t* p = reinterpret_cast<uint16_t*> (rgb.get() + y * size.width * 6); + for (int x = 0; x < size.width; ++x) { + for (int c = 0; c < 3; ++c) { + *p = (rand() & 0xfff) << 4; + ++p; + } + } + } + + shared_ptr<dcp::OpenJPEGImage> xyz; + for (int i = 0; i < trials; ++i) { + xyz = dcp::rgb_to_xyz (rgb.get(), size, size.width * 6, dcp::ColourConversion::srgb_to_xyz()); + } +} + + diff --git a/benchmark/wscript b/benchmark/wscript new file mode 100644 index 00000000..3e748972 --- /dev/null +++ b/benchmark/wscript @@ -0,0 +1,42 @@ +# +# Copyright (C) 2020 Carl Hetherington <cth@carlh.net> +# +# 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 <http://www.gnu.org/licenses/>. +# +# 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. +# + +def build(bld): + for p in ['rgb_to_xyz']: + obj = bld(features='cxx cxxprogram') + obj.name = p + obj.uselib = 'BOOST_FILESYSTEM' + obj.cppflags = ['-g', '-O2'] + obj.use = 'libdcp%s' % bld.env.API_VERSION + obj.source = "%s.cc" % p + obj.target = p diff --git a/run/benchmark b/run/benchmark new file mode 100755 index 00000000..62c40fa2 --- /dev/null +++ b/run/benchmark @@ -0,0 +1,16 @@ +#!/bin/bash + +bm=$1 +if [ "$bm" == "" ]; then + echo "Syntax: $0 [--perf] <benchmark>" + exit 1 +fi + +export LD_LIBRARY_PATH=build/src +if [ "$1" == "--perf" ]; then + shift + perf stat build/benchmark/$1 +else + build/benchmark/$1 +fi + @@ -1,5 +1,5 @@ # -# Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net> +# Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net> # # This file is part of libdcp. # @@ -230,6 +230,7 @@ def build(bld): bld.recurse('test') if not bld.env.DISABLE_EXAMPLES: bld.recurse('examples') + bld.recurse('benchmark') for i in ['SMPTE-429-7-2006-CPL.xsd', 'SMPTE-429-8-2006-PKL.xsd', 'SMPTE-429-9-2007-AM.xsd', 'xmldsig-core-schema.xsd', 'XMLSchema.dtd', 'XMLSchema.xsd', 'xml.xsd', 'PROTO-ASDCP-CPL-20040511.xsd', 'PROTO-ASDCP-PKL-20040311.xsd', 'PROTO-ASDCP-AM-20040311.xsd', 'Main-Stereo-Picture-CPL.xsd' ]: bld.install_files('${PREFIX}/share/libdcp/xsd', os.path.join('xsd', i)) |
