1#!/bin/sh 2 3EXECUTABLES="exit.nodyld \ 4 exit.nopie.dyld-but-no-Libsystem exit.pie.dyld-but-no-Libsystem \ 5 exit.nopie.dyld-and-Libsystem exit.pie.dyld-and-Libsystem \ 6 exit.nopie exit.pie" 7 8RUN=run 9PRODUCT=`sw_vers -productName` 10COUNT= 11 12# params are: record_perf_data(metric, unit, value, description) 13record_perf_data() { 14 local METRIC=$1 15 local UNIT=$2 16 local DATA=$3 17 local DESCRIPTION=$4 18 echo "{ \"version\" : \"1.0\", \"measurements\" : {\"$METRIC\": {\"description\" : \"$DESCRIPTION\", \"names\":[\"$METRIC\"], \"units\" : [\"$UNIT\"], \"data\" : [$DATA] }}}" 19} 20 21PERFDATA_DIR=$BATS_TMP_DIR 22if [ "${PERFDATA_DIR}" = "" ]; then 23 PERFDATA_DIR=/tmp/ 24fi 25 26case "$PRODUCT" in 27 "Watch OS") 28 COUNT=500 29 ;; 30 "iPhone OS") 31 COUNT=1000 32 ;; 33 "Mac OS X") 34 COUNT=6000 35 ;; 36 *) 37 COUNT=1000 38 ;; 39esac 40 41for i in ${EXECUTABLES}; do 42 echo "Running $i" 43 for j in `jot $(sysctl -n hw.ncpu) 1`; do 44 printf "\t%dx\t" $j 45 METRIC_NAME="${i}_${j}x" 46 TIMEOUT=` /usr/bin/time ./${RUN} $j $((${COUNT}/$j)) ./$i 2>&1` 47 echo ${TIMEOUT} 48 REALTIME=`echo ${TIMEOUT} | awk '{ print $1 }'` 49 TOTALTIME=`echo ${TIMEOUT} | awk '{ print $3 + $5 }'` 50 record_perf_data "${METRIC_NAME}_real" "s" $REALTIME "Real time in seconds. Lower is better. This may have variance based on load on system" > ${PERFDATA_DIR}/${METRIC_NAME}_real.perfdata 51 record_perf_data "${METRIC_NAME}_sys" "s" $TOTALTIME "User + Sys time in seconds. Lower is better." > /tmp/${METRIC_NAME}_sys.perfdata 52 if [ $? -ne 0 ]; then 53 echo "Failed $i, exit status $?" 54 exit 1 55 fi 56 done 57done 58