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