From a5a7499a5169c93548566b0cb9ad0aa9f20d90ba Mon Sep 17 00:00:00 2001
From: amichelo <andrea.michelotti@lnf.infn.it>
Date: Thu, 5 Jul 2018 16:12:29 +0200
Subject: [PATCH] tool to generate pdf of profiles

---
 config/CMakeChaos.txt             |  8 ++++++++
 tools/common_util.sh              | 24 ++++++++++++++++--------
 tools/generateGoogleProfilePdf.sh | 21 +++++++++++++++++++++
 3 files changed, 45 insertions(+), 8 deletions(-)
 create mode 100755 tools/generateGoogleProfilePdf.sh

diff --git a/config/CMakeChaos.txt b/config/CMakeChaos.txt
index 49e59bc92..43c434a34 100644
--- a/config/CMakeChaos.txt
+++ b/config/CMakeChaos.txt
@@ -69,6 +69,14 @@ ELSE()
    MESG("BUILD TYPE:${CMAKE_BUILD_TYPE}")
 ENDIF()
 
+if(CMAKE_BUILD_TYPE MATCHES SANITIZE)
+   MESG("ENABLING PROFILE")
+   set (CHAOS_CXX_FLAGS "${CHAOS_CXX_FLAGS} -g -fsanitize=address")
+   set (CHAOS_C_FLAGS "${CHAOS_C_FLAGS} -g -fsanitize=address")
+ELSE()
+   MESG("BUILD TYPE:${CMAKE_BUILD_TYPE}")
+ENDIF()
+
 set (BOOST_CXX_ADDITIONAL_FLAGS "")
 IF(CHAOS_ENABLE_C11 AND NOT CHAOS_TARGET)
   set (CHAOS_CXX_FLAGS "${CHAOS_CXX_FLAGS} -std=c++11")
diff --git a/tools/common_util.sh b/tools/common_util.sh
index 6af5042d4..6ce2ecaeb 100644
--- a/tools/common_util.sh
+++ b/tools/common_util.sh
@@ -365,12 +365,17 @@ stop_proc(){
     pid=`get_pid "$1"`
     for p in $pid;do
 	if [ -n "$p" ]; then
-	    if ! kill -9 $p ; then
-		error_mesg "cannot kill process $p"
-		exit 1
-	    else
-		ok_mesg "process $1 ($p) killed"
+	    ## kill gently
+	    kill -SIGQUIT $p
+	    sleep 1
+	    pid=`get_pid "$p"`
+	    if [ -n "$pid" ]; then
+		if ! kill -9 $p ; then
+		    error_mesg "cannot kill process $p"
+		    exit 1
+		fi
 	    fi
+	    ok_mesg "process $1 ($p) killed"
 
 	else
 	    warn_mesg "process $1 ($p) " "not running"
@@ -467,7 +472,7 @@ run_proc(){
     debug=""
     if [ -n "$GOOGLE_PROFILE" ];then
 	debug="$GOOGLE_PROFILE "
-	info_mesg "google heap check " "enabled" 
+	info_mesg "google heap check for '$process_name' " "enabled" 
     elif [ -n "$CHAOS_DEBUG_CMD" ];then
 	echo "set disable-randomization off" > /tmp/gdbbatch
 	echo "run" >> /tmp/gdbbatch
@@ -487,7 +492,10 @@ run_proc(){
 	cmdline="$debug $run_prefix $command_line"
 	
     fi
-   eval $cmdline
+    eval $cmdline
+    if [ -n "$GOOGLE_PROFILE" ];then
+	sleep 1
+    fi
    if [ $? -eq 0 ]; then
 	pid=$!
 	sleep 1
@@ -512,7 +520,7 @@ run_proc(){
 
    else
        echo "$cmdline" > $CHAOS_PREFIX/log/$process_name.cmdline.errlaunch.log
-	error_mesg "error lunching $process_name"
+	error_mesg "error lunching $process_name cmdline: '$cmdline'"
 	exit 1
     fi
     return 0
diff --git a/tools/generateGoogleProfilePdf.sh b/tools/generateGoogleProfilePdf.sh
new file mode 100755
index 000000000..83f1b9d50
--- /dev/null
+++ b/tools/generateGoogleProfilePdf.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+echo "* looking .heap in $1 using prefix $2"
+heapls=`find $1 -name "*.heap"`
+for heapf in $heapls;do
+    echo "* processing $heapf"
+    if [[ $heapf =~ \/([[:alpha:]]+)\.(.+)\.(.+)\.heap$ ]];then
+	pname=${BASH_REMATCH[1]}
+	ppid=${BASH_REMATCH[2]}
+#	echo "program name:$pname"
+#	echo "program pid:$ppid"
+	if [ ! -x $2/$pname ];then
+	    echo "## cannot find executable $2/$pname"
+	    exit 1
+	fi
+	if google-pprof $2/$pname "$heapf" --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10 --pdf > $pname.$ppid.pdf;then
+	    echo "* generated $pname.$ppid.pdf"
+	else
+	    echo "## error processing $heapf"
+	fi
+    fi
+done
-- 
GitLab