179 lines · bash
1#!/bin/bash2# perf script task-analyzer tests3# SPDX-License-Identifier: GPL-2.04 5tmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX)6err=07 8# set PERF_EXEC_PATH to find scripts in the source directory9perfdir=$(dirname "$0")/../..10if [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then11 export PERF_EXEC_PATH=$perfdir12fi13 14# Disable lsan to avoid warnings about python memory leaks.15export ASAN_OPTIONS=detect_leaks=016 17cleanup() {18 rm -f perf.data19 rm -f perf.data.old20 rm -f csv21 rm -f csvsummary22 rm -rf "$tmpdir"23 trap - exit term int24}25 26trap_cleanup() {27 cleanup28 exit 129}30trap trap_cleanup exit term int31 32report() {33 if [ "$1" = 0 ]; then34 echo "PASS: \"$2\""35 else36 echo "FAIL: \"$2\" Error message: \"$3\""37 err=138 fi39}40 41check_exec_0() {42 if [ $? != 0 ]; then43 report 1 "invocation of $1 command failed"44 fi45}46 47find_str_or_fail() {48 grep -q "$1" "$2"49 if [ "$?" != 0 ]; then50 report 1 "$3" "Failed to find required string:'${1}'."51 else52 report 0 "$3"53 fi54}55 56# check if perf is compiled with libtraceevent support57skip_no_probe_record_support() {58 perf check feature -q libtraceevent && return 059 return 260}61 62prepare_perf_data() {63 # 1s should be sufficient to catch at least some switches64 perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&165 # check if perf data file got created in above step.66 if [ ! -e "perf.data" ]; then67 printf "FAIL: perf record failed to create \"perf.data\" \n"68 return 169 fi70}71 72# check standard inkvokation with no arguments73test_basic() {74 out="$tmpdir/perf.out"75 perf script report task-analyzer > "$out"76 check_exec_0 "perf script report task-analyzer"77 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"78}79 80test_ns_rename(){81 out="$tmpdir/perf.out"82 perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out"83 check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random"84 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"85}86 87test_ms_filtertasks_highlight(){88 out="$tmpdir/perf.out"89 perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \90 > "$out"91 check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf"92 find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"93}94 95test_extended_times_timelimit_limittasks() {96 out="$tmpdir/perf.out"97 perf script report task-analyzer --extended-times --time-limit :99999 \98 --limit-to-tasks perf > "$out"99 check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf"100 find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"101}102 103test_summary() {104 out="$tmpdir/perf.out"105 perf script report task-analyzer --summary > "$out"106 check_exec_0 "perf script report task-analyzer --summary"107 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"108}109 110test_summaryextended() {111 out="$tmpdir/perf.out"112 perf script report task-analyzer --summary-extended > "$out"113 check_exec_0 "perf script report task-analyzer --summary-extended"114 find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}"115}116 117test_summaryonly() {118 out="$tmpdir/perf.out"119 perf script report task-analyzer --summary-only > "$out"120 check_exec_0 "perf script report task-analyzer --summary-only"121 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"122}123 124test_extended_times_summary_ns() {125 out="$tmpdir/perf.out"126 perf script report task-analyzer --extended-times --summary --ns > "$out"127 check_exec_0 "perf script report task-analyzer --extended-times --summary --ns"128 find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"129 find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"130}131 132test_csv() {133 perf script report task-analyzer --csv csv > /dev/null134 check_exec_0 "perf script report task-analyzer --csv csv"135 find_str_or_fail "Comm;" csv "${FUNCNAME[0]}"136}137 138test_csv_extended_times() {139 perf script report task-analyzer --csv csv --extended-times > /dev/null140 check_exec_0 "perf script report task-analyzer --csv csv --extended-times"141 find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}"142}143 144test_csvsummary() {145 perf script report task-analyzer --csv-summary csvsummary > /dev/null146 check_exec_0 "perf script report task-analyzer --csv-summary csvsummary"147 find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}"148}149 150test_csvsummary_extended() {151 perf script report task-analyzer --csv-summary csvsummary --summary-extended \152 >/dev/null153 check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended"154 find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}"155}156 157skip_no_probe_record_support158err=$?159if [ $err -ne 0 ]; then160 echo "WARN: Skipping tests. No libtraceevent support"161 cleanup162 exit $err163fi164prepare_perf_data165test_basic166test_ns_rename167test_ms_filtertasks_highlight168test_extended_times_timelimit_limittasks169test_summary170test_summaryextended171test_summaryonly172test_extended_times_summary_ns173test_csv174test_csvsummary175test_csv_extended_times176test_csvsummary_extended177cleanup178exit $err179