1e8478b84SPetar Gligoric#!/bin/bash
2*d52af4b8SArnaldo Carvalho de Melo# perf script task-analyzer tests (exclusive)
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
14e293f4b1SIan Rogers# Disable lsan to avoid warnings about python memory leaks.
15e293f4b1SIan Rogersexport ASAN_OPTIONS=detect_leaks=0
16e293f4b1SIan Rogers
17e8478b84SPetar Gligoriccleanup() {
18e8478b84SPetar Gligoric  rm -f perf.data
19e8478b84SPetar Gligoric  rm -f perf.data.old
20e8478b84SPetar Gligoric  rm -f csv
21e8478b84SPetar Gligoric  rm -f csvsummary
229694dfe0SAboorva Devarajan  rm -rf "$tmpdir"
23e8478b84SPetar Gligoric  trap - exit term int
24e8478b84SPetar Gligoric}
25e8478b84SPetar Gligoric
26e8478b84SPetar Gligorictrap_cleanup() {
27e8478b84SPetar Gligoric  cleanup
28e8478b84SPetar Gligoric  exit 1
29e8478b84SPetar Gligoric}
30e8478b84SPetar Gligorictrap trap_cleanup exit term int
31e8478b84SPetar Gligoric
32e8478b84SPetar Gligoricreport() {
339694dfe0SAboorva Devarajan	if [ "$1" = 0 ]; then
34e8478b84SPetar Gligoric		echo "PASS: \"$2\""
35e8478b84SPetar Gligoric	else
36e8478b84SPetar Gligoric		echo "FAIL: \"$2\" Error message: \"$3\""
37e8478b84SPetar Gligoric		err=1
38e8478b84SPetar Gligoric	fi
39e8478b84SPetar Gligoric}
40e8478b84SPetar Gligoric
41e8478b84SPetar Gligoriccheck_exec_0() {
42e8478b84SPetar Gligoric	if [ $? != 0 ]; then
435c4396efSAditya Gupta		report 1 "invocation of $1 command failed"
44e8478b84SPetar Gligoric	fi
45e8478b84SPetar Gligoric}
46e8478b84SPetar Gligoric
47e8478b84SPetar Gligoricfind_str_or_fail() {
489694dfe0SAboorva Devarajan	grep -q "$1" "$2"
499694dfe0SAboorva Devarajan	if [ "$?" != 0 ]; then
509694dfe0SAboorva Devarajan		report 1 "$3" "Failed to find required string:'${1}'."
51e8478b84SPetar Gligoric	else
529694dfe0SAboorva Devarajan		report 0 "$3"
53e8478b84SPetar Gligoric	fi
54e8478b84SPetar Gligoric}
55e8478b84SPetar Gligoric
56c3ac3b07SAditya Gupta# check if perf is compiled with libtraceevent support
57c3ac3b07SAditya Guptaskip_no_probe_record_support() {
588a028502SAditya Gupta	perf check feature -q libtraceevent && return 0
598a028502SAditya Gupta	return 2
60c3ac3b07SAditya Gupta}
61c3ac3b07SAditya Gupta
62e8478b84SPetar Gligoricprepare_perf_data() {
63e8478b84SPetar Gligoric	# 1s should be sufficient to catch at least some switches
64e8478b84SPetar Gligoric	perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1
65c3ac3b07SAditya Gupta	# check if perf data file got created in above step.
66c3ac3b07SAditya Gupta	if [ ! -e "perf.data" ]; then
67c3ac3b07SAditya Gupta		printf "FAIL: perf record failed to create \"perf.data\" \n"
68c3ac3b07SAditya Gupta		return 1
69c3ac3b07SAditya Gupta	fi
70e8478b84SPetar Gligoric}
71e8478b84SPetar Gligoric
72e8478b84SPetar Gligoric# check standard inkvokation with no arguments
73e8478b84SPetar Gligorictest_basic() {
74e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
759694dfe0SAboorva Devarajan	perf script report task-analyzer > "$out"
76b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer"
779694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
78e8478b84SPetar Gligoric}
79e8478b84SPetar Gligoric
80e8478b84SPetar Gligorictest_ns_rename(){
81e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
829694dfe0SAboorva Devarajan	perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out"
83b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random"
849694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
85e8478b84SPetar Gligoric}
86e8478b84SPetar Gligoric
87e8478b84SPetar Gligorictest_ms_filtertasks_highlight(){
88e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
89e8478b84SPetar Gligoric	perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \
909694dfe0SAboorva Devarajan	> "$out"
91b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf"
929694dfe0SAboorva Devarajan	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
93e8478b84SPetar Gligoric}
94e8478b84SPetar Gligoric
95e8478b84SPetar Gligorictest_extended_times_timelimit_limittasks() {
96e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
97e8478b84SPetar Gligoric	perf script report task-analyzer --extended-times --time-limit :99999 \
989694dfe0SAboorva Devarajan	--limit-to-tasks perf > "$out"
99b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf"
1009694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
101e8478b84SPetar Gligoric}
102e8478b84SPetar Gligoric
103e8478b84SPetar Gligorictest_summary() {
104e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1059694dfe0SAboorva Devarajan	perf script report task-analyzer --summary > "$out"
106b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary"
1079694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
108e8478b84SPetar Gligoric}
109e8478b84SPetar Gligoric
110e8478b84SPetar Gligorictest_summaryextended() {
111e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1129694dfe0SAboorva Devarajan	perf script report task-analyzer --summary-extended > "$out"
113b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary-extended"
1149694dfe0SAboorva Devarajan	find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}"
115e8478b84SPetar Gligoric}
116e8478b84SPetar Gligoric
117e8478b84SPetar Gligorictest_summaryonly() {
118e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1199694dfe0SAboorva Devarajan	perf script report task-analyzer --summary-only > "$out"
120b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --summary-only"
1219694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
122e8478b84SPetar Gligoric}
123e8478b84SPetar Gligoric
124e8478b84SPetar Gligorictest_extended_times_summary_ns() {
125e8478b84SPetar Gligoric	out="$tmpdir/perf.out"
1269694dfe0SAboorva Devarajan	perf script report task-analyzer --extended-times --summary --ns > "$out"
127b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --extended-times --summary --ns"
1289694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
1299694dfe0SAboorva Devarajan	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
130e8478b84SPetar Gligoric}
131e8478b84SPetar Gligoric
132e8478b84SPetar Gligorictest_csv() {
133e8478b84SPetar Gligoric	perf script report task-analyzer --csv csv > /dev/null
134b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv csv"
1359694dfe0SAboorva Devarajan	find_str_or_fail "Comm;" csv "${FUNCNAME[0]}"
136e8478b84SPetar Gligoric}
137e8478b84SPetar Gligoric
138e8478b84SPetar Gligorictest_csv_extended_times() {
139e8478b84SPetar Gligoric	perf script report task-analyzer --csv csv --extended-times > /dev/null
140b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv csv --extended-times"
1419694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}"
142e8478b84SPetar Gligoric}
143e8478b84SPetar Gligoric
144e8478b84SPetar Gligorictest_csvsummary() {
145e8478b84SPetar Gligoric	perf script report task-analyzer --csv-summary csvsummary > /dev/null
146b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary"
1479694dfe0SAboorva Devarajan	find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}"
148e8478b84SPetar Gligoric}
149e8478b84SPetar Gligoric
150e8478b84SPetar Gligorictest_csvsummary_extended() {
151e8478b84SPetar Gligoric	perf script report task-analyzer --csv-summary csvsummary --summary-extended \
152e8478b84SPetar Gligoric	>/dev/null
153b8e55fdeSAditya Gupta	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended"
1549694dfe0SAboorva Devarajan	find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}"
155e8478b84SPetar Gligoric}
156e8478b84SPetar Gligoric
157c3ac3b07SAditya Guptaskip_no_probe_record_support
158c3ac3b07SAditya Guptaerr=$?
159c3ac3b07SAditya Guptaif [ $err -ne 0 ]; then
160c3ac3b07SAditya Gupta	echo "WARN: Skipping tests. No libtraceevent support"
161c3ac3b07SAditya Gupta	cleanup
162c3ac3b07SAditya Gupta	exit $err
163c3ac3b07SAditya Guptafi
164e8478b84SPetar Gligoricprepare_perf_data
165e8478b84SPetar Gligorictest_basic
166e8478b84SPetar Gligorictest_ns_rename
167e8478b84SPetar Gligorictest_ms_filtertasks_highlight
168e8478b84SPetar Gligorictest_extended_times_timelimit_limittasks
169e8478b84SPetar Gligorictest_summary
170e8478b84SPetar Gligorictest_summaryextended
171e8478b84SPetar Gligorictest_summaryonly
172e8478b84SPetar Gligorictest_extended_times_summary_ns
173e8478b84SPetar Gligorictest_csv
174e8478b84SPetar Gligorictest_csvsummary
175e8478b84SPetar Gligorictest_csv_extended_times
176e8478b84SPetar Gligorictest_csvsummary_extended
177e8478b84SPetar Gligoriccleanup
178e8478b84SPetar Gligoricexit $err
179