Add very simple benchmark for rgb_to_xyz.
authorCarl Hetherington <cth@carlh.net>
Sun, 31 May 2020 19:49:41 +0000 (21:49 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 31 May 2020 19:49:41 +0000 (21:49 +0200)
benchmark/rgb_to_xyz.cc [new file with mode: 0644]
benchmark/wscript [new file with mode: 0644]
run/benchmark [new file with mode: 0755]
wscript

diff --git a/benchmark/rgb_to_xyz.cc b/benchmark/rgb_to_xyz.cc
new file mode 100644 (file)
index 0000000..7b4400e
--- /dev/null
@@ -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 (file)
index 0000000..3e74897
--- /dev/null
@@ -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 (executable)
index 0000000..62c40fa
--- /dev/null
@@ -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
+
diff --git a/wscript b/wscript
index 689a84fb9096cb0a8decd81b50d7fa17a21d7551..4c1c6146c92a448a14585a4a73caba6dc0264a9a 100644 (file)
--- a/wscript
+++ b/wscript
@@ -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))