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