162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# perf script task-analyzer tests
362306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
462306a36Sopenharmony_ci
562306a36Sopenharmony_citmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX)
662306a36Sopenharmony_cierr=0
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci# set PERF_EXEC_PATH to find scripts in the source directory
962306a36Sopenharmony_ciperfdir=$(dirname "$0")/../..
1062306a36Sopenharmony_ciif [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then
1162306a36Sopenharmony_ci  export PERF_EXEC_PATH=$perfdir
1262306a36Sopenharmony_cifi
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cicleanup() {
1562306a36Sopenharmony_ci  rm -f perf.data
1662306a36Sopenharmony_ci  rm -f perf.data.old
1762306a36Sopenharmony_ci  rm -f csv
1862306a36Sopenharmony_ci  rm -f csvsummary
1962306a36Sopenharmony_ci  rm -rf "$tmpdir"
2062306a36Sopenharmony_ci  trap - exit term int
2162306a36Sopenharmony_ci}
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_citrap_cleanup() {
2462306a36Sopenharmony_ci  cleanup
2562306a36Sopenharmony_ci  exit 1
2662306a36Sopenharmony_ci}
2762306a36Sopenharmony_citrap trap_cleanup exit term int
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cireport() {
3062306a36Sopenharmony_ci	if [ "$1" = 0 ]; then
3162306a36Sopenharmony_ci		echo "PASS: \"$2\""
3262306a36Sopenharmony_ci	else
3362306a36Sopenharmony_ci		echo "FAIL: \"$2\" Error message: \"$3\""
3462306a36Sopenharmony_ci		err=1
3562306a36Sopenharmony_ci	fi
3662306a36Sopenharmony_ci}
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cicheck_exec_0() {
3962306a36Sopenharmony_ci	if [ $? != 0 ]; then
4062306a36Sopenharmony_ci		report 1 "invocation of $1 command failed"
4162306a36Sopenharmony_ci	fi
4262306a36Sopenharmony_ci}
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cifind_str_or_fail() {
4562306a36Sopenharmony_ci	grep -q "$1" "$2"
4662306a36Sopenharmony_ci	if [ "$?" != 0 ]; then
4762306a36Sopenharmony_ci		report 1 "$3" "Failed to find required string:'${1}'."
4862306a36Sopenharmony_ci	else
4962306a36Sopenharmony_ci		report 0 "$3"
5062306a36Sopenharmony_ci	fi
5162306a36Sopenharmony_ci}
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci# check if perf is compiled with libtraceevent support
5462306a36Sopenharmony_ciskip_no_probe_record_support() {
5562306a36Sopenharmony_ci	perf version --build-options | grep -q " OFF .* HAVE_LIBTRACEEVENT" && return 2
5662306a36Sopenharmony_ci	return 0
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciprepare_perf_data() {
6062306a36Sopenharmony_ci	# 1s should be sufficient to catch at least some switches
6162306a36Sopenharmony_ci	perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1
6262306a36Sopenharmony_ci	# check if perf data file got created in above step.
6362306a36Sopenharmony_ci	if [ ! -e "perf.data" ]; then
6462306a36Sopenharmony_ci		printf "FAIL: perf record failed to create \"perf.data\" \n"
6562306a36Sopenharmony_ci		return 1
6662306a36Sopenharmony_ci	fi
6762306a36Sopenharmony_ci}
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci# check standard inkvokation with no arguments
7062306a36Sopenharmony_citest_basic() {
7162306a36Sopenharmony_ci	out="$tmpdir/perf.out"
7262306a36Sopenharmony_ci	perf script report task-analyzer > "$out"
7362306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer"
7462306a36Sopenharmony_ci	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
7562306a36Sopenharmony_ci}
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_citest_ns_rename(){
7862306a36Sopenharmony_ci	out="$tmpdir/perf.out"
7962306a36Sopenharmony_ci	perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out"
8062306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random"
8162306a36Sopenharmony_ci	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
8262306a36Sopenharmony_ci}
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_citest_ms_filtertasks_highlight(){
8562306a36Sopenharmony_ci	out="$tmpdir/perf.out"
8662306a36Sopenharmony_ci	perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \
8762306a36Sopenharmony_ci	> "$out"
8862306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf"
8962306a36Sopenharmony_ci	find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
9062306a36Sopenharmony_ci}
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_citest_extended_times_timelimit_limittasks() {
9362306a36Sopenharmony_ci	out="$tmpdir/perf.out"
9462306a36Sopenharmony_ci	perf script report task-analyzer --extended-times --time-limit :99999 \
9562306a36Sopenharmony_ci	--limit-to-tasks perf > "$out"
9662306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf"
9762306a36Sopenharmony_ci	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
9862306a36Sopenharmony_ci}
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_citest_summary() {
10162306a36Sopenharmony_ci	out="$tmpdir/perf.out"
10262306a36Sopenharmony_ci	perf script report task-analyzer --summary > "$out"
10362306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --summary"
10462306a36Sopenharmony_ci	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
10562306a36Sopenharmony_ci}
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_citest_summaryextended() {
10862306a36Sopenharmony_ci	out="$tmpdir/perf.out"
10962306a36Sopenharmony_ci	perf script report task-analyzer --summary-extended > "$out"
11062306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --summary-extended"
11162306a36Sopenharmony_ci	find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}"
11262306a36Sopenharmony_ci}
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_citest_summaryonly() {
11562306a36Sopenharmony_ci	out="$tmpdir/perf.out"
11662306a36Sopenharmony_ci	perf script report task-analyzer --summary-only > "$out"
11762306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --summary-only"
11862306a36Sopenharmony_ci	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
11962306a36Sopenharmony_ci}
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_citest_extended_times_summary_ns() {
12262306a36Sopenharmony_ci	out="$tmpdir/perf.out"
12362306a36Sopenharmony_ci	perf script report task-analyzer --extended-times --summary --ns > "$out"
12462306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --extended-times --summary --ns"
12562306a36Sopenharmony_ci	find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
12662306a36Sopenharmony_ci	find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
12762306a36Sopenharmony_ci}
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_citest_csv() {
13062306a36Sopenharmony_ci	perf script report task-analyzer --csv csv > /dev/null
13162306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --csv csv"
13262306a36Sopenharmony_ci	find_str_or_fail "Comm;" csv "${FUNCNAME[0]}"
13362306a36Sopenharmony_ci}
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_citest_csv_extended_times() {
13662306a36Sopenharmony_ci	perf script report task-analyzer --csv csv --extended-times > /dev/null
13762306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --csv csv --extended-times"
13862306a36Sopenharmony_ci	find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}"
13962306a36Sopenharmony_ci}
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_citest_csvsummary() {
14262306a36Sopenharmony_ci	perf script report task-analyzer --csv-summary csvsummary > /dev/null
14362306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary"
14462306a36Sopenharmony_ci	find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}"
14562306a36Sopenharmony_ci}
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_citest_csvsummary_extended() {
14862306a36Sopenharmony_ci	perf script report task-analyzer --csv-summary csvsummary --summary-extended \
14962306a36Sopenharmony_ci	>/dev/null
15062306a36Sopenharmony_ci	check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended"
15162306a36Sopenharmony_ci	find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}"
15262306a36Sopenharmony_ci}
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ciskip_no_probe_record_support
15562306a36Sopenharmony_cierr=$?
15662306a36Sopenharmony_ciif [ $err -ne 0 ]; then
15762306a36Sopenharmony_ci	echo "WARN: Skipping tests. No libtraceevent support"
15862306a36Sopenharmony_ci	cleanup
15962306a36Sopenharmony_ci	exit $err
16062306a36Sopenharmony_cifi
16162306a36Sopenharmony_ciprepare_perf_data
16262306a36Sopenharmony_citest_basic
16362306a36Sopenharmony_citest_ns_rename
16462306a36Sopenharmony_citest_ms_filtertasks_highlight
16562306a36Sopenharmony_citest_extended_times_timelimit_limittasks
16662306a36Sopenharmony_citest_summary
16762306a36Sopenharmony_citest_summaryextended
16862306a36Sopenharmony_citest_summaryonly
16962306a36Sopenharmony_citest_extended_times_summary_ns
17062306a36Sopenharmony_citest_csv
17162306a36Sopenharmony_citest_csvsummary
17262306a36Sopenharmony_citest_csv_extended_times
17362306a36Sopenharmony_citest_csvsummary_extended
17462306a36Sopenharmony_cicleanup
17562306a36Sopenharmony_ciexit $err
176