From 05d58451a1221ba95db8fb1d159eb0f76dbafb22 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 6 May 2017 15:06:24 +0200 Subject: [PATCH] Add profiling of CPU and memory usage (#912) --- .travis.yml | 6 +++- tests/profiling/filter_massif_output.py | 41 +++++++++++++++++++++++++ tools/travis-ci/run.sh | 19 ++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tests/profiling/filter_massif_output.py diff --git a/.travis.yml b/.travis.yml index e4c9e89f..d19eb5f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,11 @@ matrix: - gcc-multilib - os: linux compiler: gcc - env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug + env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug OPJ_CI_PROFILE=1 + addons: + apt: + packages: + - valgrind - os: linux compiler: clang env: OPJ_CI_ARCH=x86_64 OPJ_CI_BUILD_CONFIGURATION=Debug OPJ_CI_ASAN=1 diff --git a/tests/profiling/filter_massif_output.py b/tests/profiling/filter_massif_output.py new file mode 100644 index 00000000..173f6892 --- /dev/null +++ b/tests/profiling/filter_massif_output.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright (c) 2017, IntoPIX SA +# Contact: support@intopix.com +# Author: Even Rouault +# +# 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 OWNER 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. +# + +import sys + +lines = open(sys.argv[1], 'rt').readlines() +display_next_lines = False +for line in lines: + line = line.replace('\n', '') + if line == 'heap_tree=peak': + display_next_lines = True + elif display_next_lines: + if line == '#-----------': + break + print(line) diff --git a/tools/travis-ci/run.sh b/tools/travis-ci/run.sh index e59bdc06..35d2473e 100755 --- a/tools/travis-ci/run.sh +++ b/tools/travis-ci/run.sh @@ -346,4 +346,23 @@ if [ "${OPJ_CI_PERF_TESTS:-}" == "1" ]; then cd ../.. fi +if [ "${OPJ_CI_PROFILE:-}" == "1" ]; then + rm -rf build_gprof + mkdir build_gprof + cd build_gprof + # We need static linking for gprof + cmake "-DCMAKE_C_FLAGS=-pg -O3" -DCMAKE_EXE_LINKER_FLAGS=-pg -DCMAKE_SHARED_LINKER_FLAGS=-pg -DBUILD_SHARED_LIBS=OFF .. + make -j3 + cd .. + build_gprof/bin/opj_decompress -i data/input/nonregression/kodak_2layers_lrcp.j2c -o out.tif > /dev/null + echo "Most CPU consuming functions:" + gprof build_gprof/bin/opj_decompress gmon.out | head || true + + rm -f massif.out.* + valgrind --tool=massif build/bin/opj_decompress -i data/input/nonregression/kodak_2layers_lrcp.j2c -o out.tif >/dev/null 2>/dev/null + echo "" + echo "Memory consumption profile:" + python tests/profiling/filter_massif_output.py massif.out.* +fi + exit ${OPJ_CI_RESULT}