#!/bin/bash # perf pipe recording and injection test # SPDX-License-Identifier: GPL-2.0 shelldir=$(dirname "$0") # shellcheck source=lib/perf_has_symbol.sh . "${shelldir}"/lib/perf_has_symbol.sh sym="noploop" skip_test_missing_symbol ${sym} data=$(mktemp /tmp/perf.data.XXXXXX) data2=$(mktemp /tmp/perf.data2.XXXXXX) prog="perf test -w noploop" err=0 set -e cleanup() { rm -rf "${data}" rm -rf "${data}".old rm -rf "${data2}" rm -rf "${data2}".old trap - EXIT TERM INT } trap_cleanup() { echo "Unexpected signal in ${FUNCNAME[1]}" cleanup exit 1 } trap trap_cleanup EXIT TERM INT test_record_report() { echo echo "Record+report pipe test" task="perf" if ! perf record -e task-clock:u -o - ${prog} | perf report -i - --task | grep -q ${task} then echo "Record+report pipe test [Failed - cannot find the test file in the perf report #1]" err=1 return fi if ! perf record -g -e task-clock:u -o - ${prog} | perf report -i - --task | grep -q ${task} then echo "Record+report pipe test [Failed - cannot find the test file in the perf report #2]" err=1 return fi perf record -g -e task-clock:u -o - ${prog} > ${data} if ! perf report -i ${data} --task | grep -q ${task} then echo "Record+report pipe test [Failed - cannot find the test file in the perf report #3]" err=1 return fi echo "Record+report pipe test [Success]" } test_inject_bids() { inject_opt=$1 echo echo "Inject ${inject_opt} build-ids test" if ! perf record -e task-clock:u -o - ${prog} | perf inject ${inject_opt}| perf report -i - | grep -q ${sym} then echo "Inject build-ids test [Failed - cannot find noploop function in pipe #1]" err=1 return fi if ! perf record -g -e task-clock:u -o - ${prog} | perf inject ${inject_opt} | perf report -i - | grep -q ${sym} then echo "Inject ${inject_opt} build-ids test [Failed - cannot find noploop function in pipe #2]" err=1 return fi perf record -e task-clock:u -o - ${prog} | perf inject ${inject_opt} -o ${data} if ! perf report -i ${data} | grep -q ${sym}; then echo "Inject ${inject_opt} build-ids test [Failed - cannot find noploop function in pipe #3]" err=1 return fi perf record -e task-clock:u -o ${data} ${prog} if ! perf inject ${inject_opt} -i ${data} | perf report -i - | grep -q ${sym}; then echo "Inject ${inject_opt} build-ids test [Failed - cannot find noploop function in pipe #4]" err=1 return fi perf record -e task-clock:u -o - ${prog} > ${data} if ! perf inject ${inject_opt} -i ${data} | perf report -i - | grep -q ${sym}; then echo "Inject ${inject_opt} build-ids test [Failed - cannot find noploop function in pipe #5]" err=1 return fi perf record -e task-clock:u -o - ${prog} > ${data} perf inject ${inject_opt} -i ${data} -o ${data2} if ! perf report -i ${data2} | grep -q ${sym}; then echo "Inject ${inject_opt} build-ids test [Failed - cannot find noploop function in pipe #6]" err=1 return fi echo "Inject ${inject_opt} build-ids test [Success]" } test_record_report test_inject_bids -B test_inject_bids -b test_inject_bids --buildid-all test_inject_bids --mmap2-buildid-all cleanup exit $err