12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/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"
|