1#!/bin/bash 2# perf script task-analyzer tests 3# SPDX-License-Identifier: GPL-2.0 4 5tmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX) 6err=0 7 8cleanup() { 9 rm -f perf.data 10 rm -f perf.data.old 11 rm -f csv 12 rm -f csvsummary 13 rm -rf "$tmpdir" 14 trap - exit term int 15} 16 17trap_cleanup() { 18 cleanup 19 exit 1 20} 21trap trap_cleanup exit term int 22 23report() { 24 if [ "$1" = 0 ]; then 25 echo "PASS: \"$2\"" 26 else 27 echo "FAIL: \"$2\" Error message: \"$3\"" 28 err=1 29 fi 30} 31 32check_exec_0() { 33 if [ $? != 0 ]; then 34 report 1 "invocation of $1 command failed" 35 fi 36} 37 38find_str_or_fail() { 39 grep -q "$1" "$2" 40 if [ "$?" != 0 ]; then 41 report 1 "$3" "Failed to find required string:'${1}'." 42 else 43 report 0 "$3" 44 fi 45} 46 47# check if perf is compiled with libtraceevent support 48skip_no_probe_record_support() { 49 perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 50 return 0 51} 52 53prepare_perf_data() { 54 # 1s should be sufficient to catch at least some switches 55 perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1 56 # check if perf data file got created in above step. 57 if [ ! -e "perf.data" ]; then 58 printf "FAIL: perf record failed to create \"perf.data\" \n" 59 return 1 60 fi 61} 62 63# check standard inkvokation with no arguments 64test_basic() { 65 out="$tmpdir/perf.out" 66 perf script report task-analyzer > "$out" 67 check_exec_0 "perf script report task-analyzer" 68 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}" 69} 70 71test_ns_rename(){ 72 out="$tmpdir/perf.out" 73 perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out" 74 check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random" 75 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}" 76} 77 78test_ms_filtertasks_highlight(){ 79 out="$tmpdir/perf.out" 80 perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \ 81 > "$out" 82 check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf" 83 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}" 84} 85 86test_extended_times_timelimit_limittasks() { 87 out="$tmpdir/perf.out" 88 perf script report task-analyzer --extended-times --time-limit :99999 \ 89 --limit-to-tasks perf > "$out" 90 check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf" 91 find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}" 92} 93 94test_summary() { 95 out="$tmpdir/perf.out" 96 perf script report task-analyzer --summary > "$out" 97 check_exec_0 "perf script report task-analyzer --summary" 98 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}" 99} 100 101test_summaryextended() { 102 out="$tmpdir/perf.out" 103 perf script report task-analyzer --summary-extended > "$out" 104 check_exec_0 "perf script report task-analyzer --summary-extended" 105 find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}" 106} 107 108test_summaryonly() { 109 out="$tmpdir/perf.out" 110 perf script report task-analyzer --summary-only > "$out" 111 check_exec_0 "perf script report task-analyzer --summary-only" 112 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}" 113} 114 115test_extended_times_summary_ns() { 116 out="$tmpdir/perf.out" 117 perf script report task-analyzer --extended-times --summary --ns > "$out" 118 check_exec_0 "perf script report task-analyzer --extended-times --summary --ns" 119 find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}" 120 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}" 121} 122 123test_csv() { 124 perf script report task-analyzer --csv csv > /dev/null 125 check_exec_0 "perf script report task-analyzer --csv csv" 126 find_str_or_fail "Comm;" csv "${FUNCNAME[0]}" 127} 128 129test_csv_extended_times() { 130 perf script report task-analyzer --csv csv --extended-times > /dev/null 131 check_exec_0 "perf script report task-analyzer --csv csv --extended-times" 132 find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}" 133} 134 135test_csvsummary() { 136 perf script report task-analyzer --csv-summary csvsummary > /dev/null 137 check_exec_0 "perf script report task-analyzer --csv-summary csvsummary" 138 find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}" 139} 140 141test_csvsummary_extended() { 142 perf script report task-analyzer --csv-summary csvsummary --summary-extended \ 143 >/dev/null 144 check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended" 145 find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}" 146} 147 148skip_no_probe_record_support 149err=$? 150if [ $err -ne 0 ]; then 151 echo "WARN: Skipping tests. No libtraceevent support" 152 cleanup 153 exit $err 154fi 155prepare_perf_data 156test_basic 157test_ns_rename 158test_ms_filtertasks_highlight 159test_extended_times_timelimit_limittasks 160test_summary 161test_summaryextended 162test_summaryonly 163test_extended_times_summary_ns 164test_csv 165test_csvsummary 166test_csv_extended_times 167test_csvsummary_extended 168cleanup 169exit $err 170