#!/bin/bash
# sampler.sh -- profiler sampling mini di atas berkas sampel.
# Setiap baris pada berkas sampel adalah satu "snapshot" stack saat timer
# berdetak -- persis data mentah yang dikumpulkan perf record lewat
# perf_event_open, sebelum dirangkum perf report menjadi persentase.
# Pemakaian: bash sampler.sh <berkas-sampel>

if [ $# -lt 1 ]; then
    exit 0
fi
berkas=$1
if [ ! -f "$berkas" ]; then
    echo "berkas sampel tidak ditemukan: $berkas"
    exit 0
fi

declare -A hitung
total=0
while IFS= read -r fungsi; do
    case $fungsi in
        ''|'#'*) continue ;;
    esac
    hitung[$fungsi]=$(( ${hitung[$fungsi]:-0} + 1 ))
    total=$(( total + 1 ))
done < "$berkas"

for fungsi in "${!hitung[@]}"; do
    printf '%s %s\n' "${hitung[$fungsi]}" "$fungsi"
done | sort -rn | awk -v total="$total" \
    '{printf "%5.1f%%  %-15s (%s/%d sampel)\n", $1 * 100 / total, $2, $1, total}'
