summaryrefslogtreecommitdiffstats
path: root/tools/perf/tests/shell/test_task_analyzer.sh
blob: a98e4ab66040e36c5fa1e057a5e669af2d508ddb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash
# perf script task-analyzer tests
# SPDX-License-Identifier: GPL-2.0

tmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX)
err=0

cleanup() {
  rm -f perf.data
  rm -f perf.data.old
  rm -f csv
  rm -f csvsummary
  rm -rf $tmpdir
  trap - exit term int
}

trap_cleanup() {
  cleanup
  exit 1
}
trap trap_cleanup exit term int

report() {
	if [ $1 = 0 ]; then
		echo "PASS: \"$2\""
	else
		echo "FAIL: \"$2\" Error message: \"$3\""
		err=1
	fi
}

check_exec_0() {
	if [ $? != 0 ]; then
		report 1 "invokation of ${$1} command failed"
	fi
}

find_str_or_fail() {
	grep -q "$1" $2
	if [ $? != 0 ]; then
		report 1 $3 "Failed to find required string:'${1}'."
	else
		report 0 $3
	fi
}

prepare_perf_data() {
	# 1s should be sufficient to catch at least some switches
	perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1
}

# check standard inkvokation with no arguments
test_basic() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer > $out
	check_exec_0 "perf"
	find_str_or_fail "Comm" $out ${FUNCNAME[0]}
}

test_ns_rename(){
	out="$tmpdir/perf.out"
	perf script report task-analyzer --ns --rename-comms-by-tids 0:random > $out
	check_exec_0 "perf"
	find_str_or_fail "Comm" $out ${FUNCNAME[0]}
}

test_ms_filtertasks_highlight(){
	out="$tmpdir/perf.out"
	perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \
	> $out
	check_exec_0 "perf"
	find_str_or_fail "Comm" $out ${FUNCNAME[0]}
}

test_extended_times_timelimit_limittasks() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer --extended-times --time-limit :99999 \
	--limit-to-tasks perf > $out
	check_exec_0 "perf"
	find_str_or_fail "Out-Out" $out ${FUNCNAME[0]}
}

test_summary() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer --summary > $out
	check_exec_0 "perf"
	find_str_or_fail "Summary" $out ${FUNCNAME[0]}
}

test_summaryextended() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer --summary-extended > $out
	check_exec_0 "perf"
	find_str_or_fail "Inter Task Times" $out ${FUNCNAME[0]}
}

test_summaryonly() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer --summary-only > $out
	check_exec_0 "perf"
	find_str_or_fail "Summary" $out ${FUNCNAME[0]}
}

test_extended_times_summary_ns() {
	out="$tmpdir/perf.out"
	perf script report task-analyzer --extended-times --summary --ns > $out
	check_exec_0 "perf"
	find_str_or_fail "Out-Out" $out ${FUNCNAME[0]}
	find_str_or_fail "Summary" $out ${FUNCNAME[0]}
}

test_csv() {
	perf script report task-analyzer --csv csv > /dev/null
	check_exec_0 "perf"
	find_str_or_fail "Comm;" csv ${FUNCNAME[0]}
}

test_csv_extended_times() {
	perf script report task-analyzer --csv csv --extended-times > /dev/null
	check_exec_0 "perf"
	find_str_or_fail "Out-Out;" csv ${FUNCNAME[0]}
}

test_csvsummary() {
	perf script report task-analyzer --csv-summary csvsummary > /dev/null
	check_exec_0 "perf"
	find_str_or_fail "Comm;" csvsummary ${FUNCNAME[0]}
}

test_csvsummary_extended() {
	perf script report task-analyzer --csv-summary csvsummary --summary-extended \
	>/dev/null
	check_exec_0 "perf"
	find_str_or_fail "Out-Out;" csvsummary ${FUNCNAME[0]}
}

prepare_perf_data
test_basic
test_ns_rename
test_ms_filtertasks_highlight
test_extended_times_timelimit_limittasks
test_summary
test_summaryextended
test_summaryonly
test_extended_times_summary_ns
test_csv
test_csvsummary
test_csv_extended_times
test_csvsummary_extended
cleanup
exit $err