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