162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# perf stat --bpf-counters test
362306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciset -e
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci# check whether $2 is within +/- 10% of $1
862306a36Sopenharmony_cicompare_number()
962306a36Sopenharmony_ci{
1062306a36Sopenharmony_ci       first_num=$1
1162306a36Sopenharmony_ci       second_num=$2
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci       # upper bound is first_num * 110%
1462306a36Sopenharmony_ci       upper=$(expr $first_num + $first_num / 10 )
1562306a36Sopenharmony_ci       # lower bound is first_num * 90%
1662306a36Sopenharmony_ci       lower=$(expr $first_num - $first_num / 10 )
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci       if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then
1962306a36Sopenharmony_ci               echo "The difference between $first_num and $second_num are greater than 10%."
2062306a36Sopenharmony_ci               exit 1
2162306a36Sopenharmony_ci       fi
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci# skip if --bpf-counters is not supported
2562306a36Sopenharmony_ciif ! perf stat -e cycles --bpf-counters true > /dev/null 2>&1; then
2662306a36Sopenharmony_ci	if [ "$1" = "-v" ]; then
2762306a36Sopenharmony_ci		echo "Skipping: --bpf-counters not supported"
2862306a36Sopenharmony_ci		perf --no-pager stat -e cycles --bpf-counters true || true
2962306a36Sopenharmony_ci	fi
3062306a36Sopenharmony_ci	exit 2
3162306a36Sopenharmony_cifi
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cibase_cycles=$(perf stat --no-big-num -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}')
3462306a36Sopenharmony_ciif [ "$base_cycles" = "<not" ]; then
3562306a36Sopenharmony_ci	echo "Skipping: cycles event not counted"
3662306a36Sopenharmony_ci	exit 2
3762306a36Sopenharmony_cifi
3862306a36Sopenharmony_cibpf_cycles=$(perf stat --no-big-num --bpf-counters -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}')
3962306a36Sopenharmony_ciif [ "$bpf_cycles" = "<not" ]; then
4062306a36Sopenharmony_ci	echo "Failed: cycles not counted with --bpf-counters"
4162306a36Sopenharmony_ci	exit 1
4262306a36Sopenharmony_cifi
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_cicompare_number $base_cycles $bpf_cycles
4562306a36Sopenharmony_ciexit 0
46