1e8478b84SPetar Gligoric#!/bin/bash
2e8478b84SPetar Gligoric# perf script task-analyzer tests
3e8478b84SPetar Gligoric# SPDX-License-Identifier: GPL-2.0
4e8478b84SPetar Gligoric
5e8478b84SPetar Gligorictmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX)
6e8478b84SPetar Gligoricerr=0
7e8478b84SPetar Gligoric
8e4ef3ef1SNamhyung Kim# set PERF_EXEC_PATH to find scripts in the source directory
9e4ef3ef1SNamhyung Kimperfdir=$(dirname "$0")/../..
10e4ef3ef1SNamhyung Kimif [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then
11e4ef3ef1SNamhyung Kim  export PERF_EXEC_PATH=$perfdir
12e4ef3ef1SNamhyung Kimfi
13e4ef3ef1SNamhyung Kim
14e8478b84SPetar Gligoriccleanup() {
15e8478b84SPetar Gligoric  rm -f perf.data
16e8478b84SPetar Gligoric  rm -f perf.data.old
17e8478b84SPetar Gligoric  rm -f csv
18e8478b84SPetar Gligoric  rm -f csvsummary
199694dfe0SAboorva Devarajan  rm -rf "$tmpdir"
20e8478b84SPetar Gligoric  trap - exit term int
21e8478b84SPetar Gligoric}
22e8478b84SPetar Gligoric
23e8478b84SPetar Gligorictrap_cleanup() {
24e8478b84SPetar Gligoric  cleanup
25e8478b84SPetar Gligoric  exit 1
26e8478b84SPetar Gligoric}
27e8478b84SPetar Gligorictrap trap_cleanup exit term int
28e8478b84SPetar Gligoric
29e8478b84SPetar Gligoricreport() {
309694dfe0SAboorva Devarajan	if [ "$1" = 0 ]; then
31e8478b84SPetar Gligoric		echo "PASS: \"$2\""
32e8478b84SPetar Gligoric	else
33e8478b84SPetar Gligoric		echo "FAIL: \"$2\" Error message: \"$3\""
34e8478b84SPetar Gligoric		err=1
35e8478b84SPetar Gligoric	fi
36e8478b84SPetar Gligoric}
37e8478b84SPetar Gligoric
38e8478b84SPetar Gligoriccheck_exec_0() {
39e8478b84SPetar Gligoric	if [ $? != 0 ]; then
405c4396efSAditya Gupta		report 1 "invocation of $1 command failed"
41e8478b84SPetar Gligoric	fi
42e8478b84SPetar Gligoric}
43e8478b84SPetar Gligoric
44e8478b84SPetar Gligoricfind_str_or_fail() {
459694dfe0SAboorva Devarajan	grep -q "$1" "$2"
469694dfe0SAboorva Devarajan	if [ "$?" != 0 ]; then
479694dfe0SAboorva Devarajan		report 1 "$3" "Failed to find required string:'${1}'."
48e8478b84SPetar Gligoric	else
499694dfe0SAboorva Devarajan		report 0 "$3"
50e8478b84SPetar Gligoric	fi
51e8478b84SPetar Gligoric}
52e8478b84SPetar Gligoric
53c3ac3b07SAditya Gupta# check if perf is compiled with libtraceevent support
54c3ac3b07SAditya Guptaskip_no_probe_record_support() {
55*11cb1ed4SAditya Gupta	perf version --build-options | grep -q " OFF .* HAVE_LIBTRACEEVENT" && return 2
56c3ac3b07SAditya Gupta	return 0
57c3ac3b07SAditya Gupta}
58c3ac3b07SAditya Gupta
59e8478b84SPetar Gligoricprepare_perf_data() {
60e8478b84SPetar Gligoric	# 1s should be sufficient to catch at least some switches
61e8478b84SPetar Gligoric	perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1
62c3ac3b07SAditya Gupta	# check if perf data file got created in above step.
63c3ac3b07SAditya Gupta	if [ ! -e "perf.data" ]; then
64c3ac3b07SAditya Gupta		printf "FAIL: perf record failed to create \"perf.data\" \n"
65c3ac3b07SAditya Gupta		return 1
66c3ac3b07SAditya Gupta	fi
67e8478b84SPetar Gligoric}
68e8478b84SPetar Gligoric
69e8478b84SPetar Gligoric# check standard inkvokation with no arguments
70e8478b84SPetar Gligorictest_basic() {
71e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
729694dfe0SAboorva Devarajan	perf script report task-analyzer > "$out"
73b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer"
749694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
75e8478b84SPetar Gligoric}
76e8478b84SPetar Gligoric
77e8478b84SPetar Gligorictest_ns_rename(){
78e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
799694dfe0SAboorva Devarajan	perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out"
80b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random"
819694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
82e8478b84SPetar Gligoric}
83e8478b84SPetar Gligoric
84e8478b84SPetar Gligorictest_ms_filtertasks_highlight(){
85e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
86e8478b84SPetar Gligoric	perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \
879694dfe0SAboorva Devarajan	> "$out"
88b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf"
899694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
90e8478b84SPetar Gligoric}
91e8478b84SPetar Gligoric
92e8478b84SPetar Gligorictest_extended_times_timelimit_limittasks() {
93e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
94e8478b84SPetar Gligoric	perf script report task-analyzer --extended-times --time-limit :99999 \
959694dfe0SAboorva Devarajan	--limit-to-tasks perf > "$out"
96b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf"
979694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
98e8478b84SPetar Gligoric}
99e8478b84SPetar Gligoric
100e8478b84SPetar Gligorictest_summary() {
101e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1029694dfe0SAboorva Devarajan	perf script report task-analyzer --summary > "$out"
103b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary"
1049694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
105e8478b84SPetar Gligoric}
106e8478b84SPetar Gligoric
107e8478b84SPetar Gligorictest_summaryextended() {
108e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1099694dfe0SAboorva Devarajan	perf script report task-analyzer --summary-extended > "$out"
110b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary-extended"
1119694dfe0SAboorva Devarajan	find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}"
112e8478b84SPetar Gligoric}
113e8478b84SPetar Gligoric
114e8478b84SPetar Gligorictest_summaryonly() {
115e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1169694dfe0SAboorva Devarajan	perf script report task-analyzer --summary-only > "$out"
117b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary-only"
1189694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
119e8478b84SPetar Gligoric}
120e8478b84SPetar Gligoric
121e8478b84SPetar Gligorictest_extended_times_summary_ns() {
122e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1239694dfe0SAboorva Devarajan	perf script report task-analyzer --extended-times --summary --ns > "$out"
124b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --extended-times --summary --ns"
1259694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
1269694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
127e8478b84SPetar Gligoric}
128e8478b84SPetar Gligoric
129e8478b84SPetar Gligorictest_csv() {
130e8478b84SPetar Gligoric	perf script report task-analyzer --csv csv > /dev/null
131b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv csv"
1329694dfe0SAboorva Devarajan	find_str_or_fail "Comm;" csv "${FUNCNAME[0]}"
133e8478b84SPetar Gligoric}
134e8478b84SPetar Gligoric
135e8478b84SPetar Gligorictest_csv_extended_times() {
136e8478b84SPetar Gligoric	perf script report task-analyzer --csv csv --extended-times > /dev/null
137b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv csv --extended-times"
1389694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}"
139e8478b84SPetar Gligoric}
140e8478b84SPetar Gligoric
141e8478b84SPetar Gligorictest_csvsummary() {
142e8478b84SPetar Gligoric	perf script report task-analyzer --csv-summary csvsummary > /dev/null
143b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary"
1449694dfe0SAboorva Devarajan	find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}"
145e8478b84SPetar Gligoric}
146e8478b84SPetar Gligoric
147e8478b84SPetar Gligorictest_csvsummary_extended() {
148e8478b84SPetar Gligoric	perf script report task-analyzer --csv-summary csvsummary --summary-extended \
149e8478b84SPetar Gligoric	>/dev/null
150b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended"
1519694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}"
152e8478b84SPetar Gligoric}
153e8478b84SPetar Gligoric
154c3ac3b07SAditya Guptaskip_no_probe_record_support
155c3ac3b07SAditya Guptaerr=$?
156c3ac3b07SAditya Guptaif [ $err -ne 0 ]; then
157c3ac3b07SAditya Gupta	echo "WARN: Skipping tests. No libtraceevent support"
158c3ac3b07SAditya Gupta	cleanup
159c3ac3b07SAditya Gupta	exit $err
160c3ac3b07SAditya Guptafi
161e8478b84SPetar Gligoricprepare_perf_data
162e8478b84SPetar Gligorictest_basic
163e8478b84SPetar Gligorictest_ns_rename
164e8478b84SPetar Gligorictest_ms_filtertasks_highlight
165e8478b84SPetar Gligorictest_extended_times_timelimit_limittasks
166e8478b84SPetar Gligorictest_summary
167e8478b84SPetar Gligorictest_summaryextended
168e8478b84SPetar Gligorictest_summaryonly
169e8478b84SPetar Gligorictest_extended_times_summary_ns
170e8478b84SPetar Gligorictest_csv
171e8478b84SPetar Gligorictest_csvsummary
172e8478b84SPetar Gligorictest_csv_extended_times
173e8478b84SPetar Gligorictest_csvsummary_extended
174e8478b84SPetar Gligoriccleanup
175e8478b84SPetar Gligoricexit $err
176