#!/bin/bash

# defines
FREQ=0 #percent
SERVICES=(perfd thermal-engine thermald mpdecision)
DIR="/sys/class/kgsl/kgsl-3d0"


###################### SETUP ######################

# helper functions
fileexists() {
  [ `adb shell "[ -f $1 ] && echo found"` ]
}
getprop() {
  if fileexists $1; then
    echo `adb shell cat $1 | tr -d '\r'`
  else
    echo "FILE $1 NOT FOUND"
  fi
}
setprop() {
  if fileexists $1; then
    adb shell "echo -n $2 > $1"
  else
    echo "FILE $1 NOT FOUND"
  fi
}

# use passed in percent frequency
if [[ $# -eq 1 ]]; then
  FREQ=$1
fi

# setup
if [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then
  adb root
fi
adb wait-for-device

# device name
echo Device: `adb shell getprop ro.product.model`

# get available gpu frequencies in sorted order
if fileexists $DIR/devfreq/available_frequencies; then
  frequencies=(`getprop $DIR/devfreq/available_frequencies`)
elif fileexists $DIR/gpu_available_frequencies; then
  frequencies=(`getprop $DIR/gpu_available_frequencies`)
elif fileexists /d/clock/gbus/possible_rates; then
  frequencies=(`getprop /d/clock/gbus/possible_rates`)
else
  echo "Unable to find available GPU frequencies"
  echo
  exit
fi
frequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` )
if [ ${frequencies[0]} == "(kHz)" ]; then
  frequencies=(`printf "%s000\n" "${frequencies[@]:1}"`)
fi
minFreq=${frequencies[0]}
maxFreq=${frequencies[-1]}
echo Frequencies: ${frequencies[@]}

# find closest frequency
targetFreq=$(( FREQ * ( maxFreq - minFreq ) / 100 + minFreq ))
freq=`printf "%d\n" "${frequencies[@]}" | awk -v closest=${frequencies[0]} -v target=$targetFreq 'BEGIN{diff=$0-target;if(diff<0)diff=-diff;lowest=diff};{diff=$0-target;if(diff<0)diff=-diff;if(diff<lowest){lowest=diff;closest=$0}};END{print closest}'`
echo Selected: $freq

echo

# freeze system
for service in ${SERVICES[@]}; do
  adb shell stop $service
done

# set GPU properties if possible
setprop $DIR/bus_split 0
setprop $DIR/devfreq/governor performance
setprop $DIR/force_bus_on 1
setprop $DIR/force_rail_on 1
setprop $DIR/force_clk_on 1
setprop $DIR/idle_timer 1000000
setprop $DIR/max_gpuclk $freq
setprop $DIR/gpuclk $freq
setprop /d/clock/override.gbus/state 1
setprop /d/clock/override.gbus/rate $freq

# final message
echo "GPU Frequency set to $freq"


