#!/bin/sh
# - events
# - freq
# - delay
# - duration

. $LKP_SRC/lib/env.sh

set_perf_path "/lkp/benchmarks/perf/perf"

default_events()
{
	for event in cycles:pp cycles:p; do
		$perf record -q --freq=800 -e $event -- sleep 0.01 >/dev/null 2>&1 && {
			echo $event
			return
		}
	done
	echo cycles
}

: ${events:=$(default_events)}
: ${duration:=10}
: ${delay:=100}

[ -n "$freq" ] &&
opt_freq="--freq=$freq"
opt_events="-e $(echo "$events" | sed 's/ / -e /g')"

# perf may consume lots of fd
ulimit -n 102400

. $LKP_SRC/lib/wait.sh
setup_wait

PERF_REPORT_SRCLINE_DATA=$TMP/perf-report-srcline.data

$perf -v || die 'perf command failed'
$perf record -q -ag --realtime=1 -m 256 $opt_freq $opt_events \
	-o $PERF_REPORT_SRCLINE_DATA -D $((delay * 1000)) -- \
	timeout $((delay + duration)) \
	$WAIT_POST_TEST_CMD

cat > "$TMP_RESULT_ROOT/post-run.perf-report-srcline" <<EOF
[ -s $PERF_REPORT_SRCLINE_DATA ] && {
	$perf report --header -i $PERF_REPORT_SRCLINE_DATA --no-children -f -v \
	      --stdio --sort sym,srcline -w 10,50,100 --full-source-path |
	gzip > $RESULT_ROOT/perf-report-srcline.gz &&
	rm -f $PERF_REPORT_SRCLINE_DATA
}
EOF
