#!/system/xbin/bash

cat /d/ion/heaps/system|awk '
    /[[:blank:]]+[0-9]+[[:blank:]]+[0-9]+/{
        memory[$1] += $3;
    }

    /pages in.*pool = [0-9]+ total/ {
        cache += $10;
    }

    /^[[:blank:]]+total[[:blank:]]+[0-9]+[[:blank:]]*$/ {
        total += $2;
    }

    END {
        for (task in memory) {
            memory[task] /= 1024;
            print task, memory[task]"k";
        }
        print ""
        printf "used: %d kb, cache: %d kb, total: %d kb", total / 1024, cache / 1024, (total + cache) / 1024;
    }
'

echo; echo

ion_kgsl=0


## start code-generator "^\\s *#"
# for x in ion kernel ; do
# echo
# cat <<EOF
# (
#     for x in /sys/devices/virtual/kgsl/kgsl/proc/*/${x}; do
#         proc=\$(basename \$(dirname \$x))
#         ps \$proc | tail -n 1 | awk '{print \$2 " " \$9 " "}' | tr -d '\n'
#         cat \$x
#         ${x}=\$(cat \$x)
#         ${x}_kgsl=\$((${x}_kgsl + ${x}))
#     done
#     echo kgsl-${x} total: \$${x}_kgsl
# ) | sort -k 3 -n
# echo
#EOF
# done
## end code-generator
## start generated code

(
    for x in /sys/devices/virtual/kgsl/kgsl/proc/*/ion; do
        proc=$(basename $(dirname $x))
        ps $proc | tail -n 1 | awk '{print $2 " " $9 " "}' | tr -d '\n'
        cat $x
        ion=$(cat $x)
        ion_kgsl=$((ion_kgsl + ion))
    done
    echo kgsl-ion total: $ion_kgsl
) | sort -k 3 -n
echo

(
    for x in /sys/devices/virtual/kgsl/kgsl/proc/*/kernel; do
        proc=$(basename $(dirname $x))
        ps $proc | tail -n 1 | awk '{print $2 " " $9 " "}' | tr -d '\n'
        cat $x
        kernel=$(cat $x)
        kernel_kgsl=$((kernel_kgsl + kernel))
    done
    echo kgsl-kernel total: $kernel_kgsl
) | sort -k 3 -n
echo

## end generated code





echo; echo


for x in /sys/devices/virtual/kgsl/kgsl/*; do
    if test -d $x; then continue; fi;
    echo -n "$x: "; cat $x;
done
dumpsys meminfo | grep lost -i
