From: Thomas Jahns Date: Mon, 3 Mar 2014 14:33:42 +0000 (+0100) Subject: Add simple program to measure run-time. X-Git-Tag: accepted/tizen/5.0/unified/20181102.025501~112 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ab54a5d725736414ae5c5174958f3bbba51390b0;p=platform%2Fupstream%2Flibaec.git Add simple program to measure run-time. --- diff --git a/src/Makefile.am b/src/Makefile.am index eeeafad..4c7a260 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,5 +7,7 @@ libsz_la_LIBADD = libaec.la include_HEADERS = libaec.h szlib.h bin_PROGRAMS = aec +noinst_PROGRAMS = utime +utime_SOURCES = utime.c aec_LDADD = libaec.la aec_SOURCES = aec.c diff --git a/src/utime.c b/src/utime.c new file mode 100644 index 0000000..ca83900 --- /dev/null +++ b/src/utime.c @@ -0,0 +1,122 @@ +/** + * @file utime.c + * + * @author Thomas Jahns, Deutsches Klimarechenzentrum + * + * @section LICENSE + * Copyright 2012 - 2014 + * + * Mathis Rosenhauer, Luis Kornblueh + * Moritz Hanke, + * Joerg Behrens, + * Thomas Jahns + * + * Deutsches Klimarechenzentrum GmbH Max-Planck-Institut fuer Meteorologie + * Bundesstr. 45a Bundesstr. 53 + * 20146 Hamburg 20146 Hamburg + * Germany Germany + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @section DESCRIPTION + * + * Simple timing command, since calling time(1) gives non-portable results. + * + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +static int +run_cmd(int argc, char *argv[]); + +int main(int argc, char **argv) +{ + struct timeval utime = { .tv_sec = 0, .tv_usec = 0 }; + int status, rstatus; + if (argc > 1 && ((status = run_cmd(argc - 1, argv + 1)) >= 0)) + { + struct rusage usage; + if ((rstatus = getrusage(RUSAGE_CHILDREN, &usage) == -1)) + { + perror("resource usage statistics unavailable"); + } + else if (rstatus != 0) + { + fputs("an unknown error occurred\n", stderr); + return EXIT_FAILURE; + } + else + { + utime = usage.ru_utime; + } + } + else if (status) + { + fputs("could not fork child\n", stderr); + return EXIT_FAILURE; + } + fprintf(stderr, "%f\n", (utime.tv_sec * 1000000 + utime.tv_usec)/1000000.0); + return status; +} + +static int +run_cmd(int argc, char *argv[]) +{ + int status; + pid_t child_pid; + if (argc < 1) + return -1; + if ((child_pid = fork()) < 0) + status = -1; + else if (child_pid == 0) + { + /* child */ + execvp(argv[0], argv); + _exit(127); /* execvp should not have returned */ + } + else + { + while (waitpid(child_pid, &status, 0) < 0) + if (errno != EINTR) + { + status = -1; + break; + } + } + return status; +} + diff --git a/tests/bdec.sh b/tests/bdec.sh index 9a8544f..9dcdf79 100755 --- a/tests/bdec.sh +++ b/tests/bdec.sh @@ -9,12 +9,7 @@ if [ ! -f bench.rz ]; then fi rm -f dec.dat bsize=$(stat -c "%s" bench.dat) -utime=$( - ( - /usr/bin/time -f "%U" $AEC -d -n16 -j64 -r256 -m -c \ - bench.rz > dec.dat - ) 2>&1 -) +utime=$(../src/utime $AEC -d -n16 -j64 -r256 -m -c bench.rz 2>&1 >dec.dat) perf=$(echo "$bsize/1048576/$utime" | bc) echo "*** Decoding with $perf MiB/s user time ***" cmp bench.dat dec.dat diff --git a/tests/benc.sh b/tests/benc.sh index 4ce7586..a05bd78 100755 --- a/tests/benc.sh +++ b/tests/benc.sh @@ -14,11 +14,7 @@ if [ ! -f bench.dat ]; then done fi rm -f bench.rz -utime=$( - ( - /usr/bin/time -f "%U" $AEC -n16 -j64 -r256 -m -c bench.dat > bench.rz - ) 2>&1 -) +utime=$(../src/utime $AEC -n16 -j64 -r256 -m -c bench.dat 2>&1 >bench.rz) bsize=$(stat -c "%s" bench.dat) perf=$(echo "$bsize/1048576/$utime" | bc) echo "*** Encoding with $perf MiB/s user time ***"