Home | History | Annotate | Download | only in perf-test-scripts
      1 #!/bin/bash
      2 
      3 # defines
      4 FREQ=0 #percent
      5 SERVICES=(perfd thermal-engine thermald mpdecision)
      6 DIR="/sys/class/kgsl/kgsl-3d0"
      7 
      8 
      9 ###################### SETUP ######################
     10 
     11 # helper functions
     12 fileexists() {
     13   [ `adb shell "[ -f $1 ] && echo found"` ]
     14 }
     15 getprop() {
     16   if fileexists $1; then
     17     echo `adb shell cat $1 | tr -d '\r'`
     18   else
     19     echo "FILE $1 NOT FOUND"
     20   fi
     21 }
     22 setprop() {
     23   if fileexists $1; then
     24     adb shell "echo -n $2 > $1"
     25   else
     26     echo "FILE $1 NOT FOUND"
     27   fi
     28 }
     29 
     30 # use passed in percent frequency
     31 if [[ $# -eq 1 ]]; then
     32   FREQ=$1
     33 fi
     34 
     35 # setup
     36 if [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then
     37   adb root
     38 fi
     39 adb wait-for-device
     40 
     41 # device name
     42 echo Device: `adb shell getprop ro.product.model`
     43 
     44 # get available gpu frequencies in sorted order
     45 if fileexists $DIR/devfreq/available_frequencies; then
     46   frequencies=(`getprop $DIR/devfreq/available_frequencies`)
     47 elif fileexists $DIR/gpu_available_frequencies; then
     48   frequencies=(`getprop $DIR/gpu_available_frequencies`)
     49 elif fileexists /d/clock/gbus/possible_rates; then
     50   frequencies=(`getprop /d/clock/gbus/possible_rates`)
     51 else
     52   echo "Unable to find available GPU frequencies"
     53   echo
     54   exit
     55 fi
     56 frequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` )
     57 if [ ${frequencies[0]} == "(kHz)" ]; then
     58   frequencies=(`printf "%s000\n" "${frequencies[@]:1}"`)
     59 fi
     60 minFreq=${frequencies[0]}
     61 maxFreq=${frequencies[-1]}
     62 echo Frequencies: ${frequencies[@]}
     63 
     64 # find closest frequency
     65 targetFreq=$(( FREQ * ( maxFreq - minFreq ) / 100 + minFreq ))
     66 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}'`
     67 echo Selected: $freq
     68 
     69 echo
     70 
     71 # freeze system
     72 for service in ${SERVICES[@]}; do
     73   adb shell stop $service
     74 done
     75 
     76 # set GPU properties if possible
     77 setprop $DIR/bus_split 0
     78 setprop $DIR/devfreq/governor performance
     79 setprop $DIR/force_bus_on 1
     80 setprop $DIR/force_rail_on 1
     81 setprop $DIR/force_clk_on 1
     82 setprop $DIR/idle_timer 1000000
     83 setprop $DIR/max_gpuclk $freq
     84 setprop $DIR/gpuclk $freq
     85 setprop /d/clock/override.gbus/state 1
     86 setprop /d/clock/override.gbus/rate $freq
     87 
     88 # final message
     89 echo "GPU Frequency set to $freq"
     90 
     91 
     92