1*e1eccf28SAndroid Build Coastguard Worker#!/bin/bash 2*e1eccf28SAndroid Build Coastguard Worker 3*e1eccf28SAndroid Build Coastguard Worker# defines 4*e1eccf28SAndroid Build Coastguard WorkerCPU_DIR="/sys/devices/system/cpu" 5*e1eccf28SAndroid Build Coastguard WorkerGPU_DIR="/sys/class/kgsl/kgsl-3d0" 6*e1eccf28SAndroid Build Coastguard Worker 7*e1eccf28SAndroid Build Coastguard Worker# helper functions 8*e1eccf28SAndroid Build Coastguard Workerfileexists() { 9*e1eccf28SAndroid Build Coastguard Worker [ `adb shell "[ -f $1 ] && echo found"` ] 10*e1eccf28SAndroid Build Coastguard Worker} 11*e1eccf28SAndroid Build Coastguard Workergetprop() { 12*e1eccf28SAndroid Build Coastguard Worker if fileexists $1; then 13*e1eccf28SAndroid Build Coastguard Worker echo `adb shell cat $1 | tr -d '\r'` 14*e1eccf28SAndroid Build Coastguard Worker else 15*e1eccf28SAndroid Build Coastguard Worker echo "FILE $1 NOT FOUND" 16*e1eccf28SAndroid Build Coastguard Worker fi 17*e1eccf28SAndroid Build Coastguard Worker} 18*e1eccf28SAndroid Build Coastguard Workersetprop() { 19*e1eccf28SAndroid Build Coastguard Worker if fileexists $1; then 20*e1eccf28SAndroid Build Coastguard Worker adb shell "echo -n $2 > $1" 21*e1eccf28SAndroid Build Coastguard Worker else 22*e1eccf28SAndroid Build Coastguard Worker echo "FILE $1 NOT FOUND" 23*e1eccf28SAndroid Build Coastguard Worker fi 24*e1eccf28SAndroid Build Coastguard Worker} 25*e1eccf28SAndroid Build Coastguard Worker 26*e1eccf28SAndroid Build Coastguard Worker# setup 27*e1eccf28SAndroid Build Coastguard Workerecho 28*e1eccf28SAndroid Build Coastguard Workerif [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then 29*e1eccf28SAndroid Build Coastguard Worker adb root 30*e1eccf28SAndroid Build Coastguard Worker adb wait-for-device 31*e1eccf28SAndroid Build Coastguard Workerfi 32*e1eccf28SAndroid Build Coastguard Worker 33*e1eccf28SAndroid Build Coastguard Worker# device name 34*e1eccf28SAndroid Build Coastguard Workerecho Device: `adb shell getprop ro.product.model` 35*e1eccf28SAndroid Build Coastguard Workerecho 36*e1eccf28SAndroid Build Coastguard Worker 37*e1eccf28SAndroid Build Coastguard Worker# collect and count all cores 38*e1eccf28SAndroid Build Coastguard Workerfrequency= 39*e1eccf28SAndroid Build Coastguard Workerfrequencies= 40*e1eccf28SAndroid Build Coastguard Workercores=`adb shell ls /sys/devices/system/cpu/ | grep cpu[0-9].* | tr -d '\r'` 41*e1eccf28SAndroid Build Coastguard Workerfor core in $cores; do 42*e1eccf28SAndroid Build Coastguard Worker 43*e1eccf28SAndroid Build Coastguard Worker # display cpu 44*e1eccf28SAndroid Build Coastguard Worker echo "$core:" 45*e1eccf28SAndroid Build Coastguard Worker 46*e1eccf28SAndroid Build Coastguard Worker # display current status 47*e1eccf28SAndroid Build Coastguard Worker if fileexists $CPU_DIR/$core/online && [ `getprop $CPU_DIR/$core/online` -eq 0 ]; then 48*e1eccf28SAndroid Build Coastguard Worker echo " Status: OFFLINE" 49*e1eccf28SAndroid Build Coastguard Worker else 50*e1eccf28SAndroid Build Coastguard Worker echo " Status: ONLINE" 51*e1eccf28SAndroid Build Coastguard Worker fi 52*e1eccf28SAndroid Build Coastguard Worker 53*e1eccf28SAndroid Build Coastguard Worker # display available frequencies 54*e1eccf28SAndroid Build Coastguard Worker if fileexists $CPU_DIR/$core/cpufreq/scaling_available_frequencies; then 55*e1eccf28SAndroid Build Coastguard Worker frequencies=(`getprop $CPU_DIR/$core/cpufreq/scaling_available_frequencies`) 56*e1eccf28SAndroid Build Coastguard Worker elif fileexists $CPU_DIR/$core/cpufreq/stats/time_in_state; then 57*e1eccf28SAndroid Build Coastguard Worker frequencies=(`adb shell cat $CPU_DIR/$core/cpufreq/stats/time_in_state | cut -f1 -d " " | tr -d '\r'`) 58*e1eccf28SAndroid Build Coastguard Worker fi 59*e1eccf28SAndroid Build Coastguard Worker frequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` ) 60*e1eccf28SAndroid Build Coastguard Worker echo " Available Frequencies: ${frequencies[@]} (Hz)" 61*e1eccf28SAndroid Build Coastguard Worker 62*e1eccf28SAndroid Build Coastguard Worker # display current frequency 63*e1eccf28SAndroid Build Coastguard Worker if fileexists $CPU_DIR/$core/cpufreq/scaling_cur_freq; then 64*e1eccf28SAndroid Build Coastguard Worker frequency=`getprop $CPU_DIR/$core/cpufreq/scaling_cur_freq` 65*e1eccf28SAndroid Build Coastguard Worker fi 66*e1eccf28SAndroid Build Coastguard Worker echo " Current Frequency: $frequency (Hz)" 67*e1eccf28SAndroid Build Coastguard Worker 68*e1eccf28SAndroid Build Coastguard Workerdone 69*e1eccf28SAndroid Build Coastguard Worker 70*e1eccf28SAndroid Build Coastguard Worker# poll gpu 71*e1eccf28SAndroid Build Coastguard Workerecho 72*e1eccf28SAndroid Build Coastguard Workerecho "GPU:" 73*e1eccf28SAndroid Build Coastguard Worker 74*e1eccf28SAndroid Build Coastguard Worker# get available gpu frequencies in sorted order 75*e1eccf28SAndroid Build Coastguard Workerif fileexists $GPU_DIR/devfreq/available_frequencies; then 76*e1eccf28SAndroid Build Coastguard Worker frequencies=(`getprop $GPU_DIR/devfreq/available_frequencies`) 77*e1eccf28SAndroid Build Coastguard Workerelif fileexists $GPU_DIR/gpu_available_frequencies; then 78*e1eccf28SAndroid Build Coastguard Worker frequencies=(`getprop $GPU_DIR/gpu_available_frequencies`) 79*e1eccf28SAndroid Build Coastguard Workerelif fileexists /d/clock/gbus/possible_rates; then 80*e1eccf28SAndroid Build Coastguard Worker frequencies=(`getprop /d/clock/gbus/possible_rates`) 81*e1eccf28SAndroid Build Coastguard Workerelse 82*e1eccf28SAndroid Build Coastguard Worker echo " Unable to find available GPU frequencies" 83*e1eccf28SAndroid Build Coastguard Worker echo 84*e1eccf28SAndroid Build Coastguard Worker exit 85*e1eccf28SAndroid Build Coastguard Workerfi 86*e1eccf28SAndroid Build Coastguard Workerfrequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` ) 87*e1eccf28SAndroid Build Coastguard Workerif [ ${frequencies[0]} == "(kHz)" ]; then 88*e1eccf28SAndroid Build Coastguard Worker frequencies=(`printf "%s000\n" "${frequencies[@]:1}"`) 89*e1eccf28SAndroid Build Coastguard Workerfi 90*e1eccf28SAndroid Build Coastguard Workerecho " Available Frequencies: ${frequencies[@]} (Hz)" 91*e1eccf28SAndroid Build Coastguard Worker 92*e1eccf28SAndroid Build Coastguard Worker# collect and print current gpu frequency 93*e1eccf28SAndroid Build Coastguard Workerif fileexists $GPU_DIR/max_gpuclk; then 94*e1eccf28SAndroid Build Coastguard Worker freq=`getprop $GPU_DIR/max_gpuclk` 95*e1eccf28SAndroid Build Coastguard Workerelif fileexists /d/clock/override.gbus/rate; then 96*e1eccf28SAndroid Build Coastguard Worker freq=`getprop /d/clock/override.gbus/rate` 97*e1eccf28SAndroid Build Coastguard Workerelse 98*e1eccf28SAndroid Build Coastguard Worker echo "ERROR: unable to find current GPU frequency" 99*e1eccf28SAndroid Build Coastguard Worker exit 100*e1eccf28SAndroid Build Coastguard Workerfi 101*e1eccf28SAndroid Build Coastguard Workerecho " Current Frequency: $freq (Hz)" 102*e1eccf28SAndroid Build Coastguard Workerecho 103*e1eccf28SAndroid Build Coastguard Worker 104*e1eccf28SAndroid Build Coastguard Worker 105