Android 是一個基於 Linux 內核的移動操做系統,Linux 的 CPU 佔有率的計算方式也能夠應用到 Android App 上。html
今天分享的這個腳本的功能,是在多核狀況下計算進程的 CPU 佔有率。詳細的算法,有一篇別人寫的關於 Linux 環境下計算進程和線程的 CPU 佔有率的文章,推薦一讀,連接附在文末。linux
這裏就簡單說下計算步驟吧: 1.獲取測試設備的 CPU 核心數 2.計算進程的 CPU 使用時間 3.計算總的 CPU 使用時間 4.進程的 CPU 使用率 = (進程的 CPU 使用時間 / 總的 CPU 使用時間) * CPU 核心數 * 100算法
代碼以下:shell
#!/usr/bin/env bash # 建立輸出文件夾和臨時文件夾 function init_data() { if [[ ! -d ${OUTPUT} ]]; then mkdir -p ${OUTPUT} fi if [[ ! -d ${TEMP_FILE} ]]; then mkdir -p ${TEMP_FILE} fi } # 經過adb shell ps命令獲取進程號 function get_pid() { adb shell ps | grep ${1} | tr -d $'\r' | awk '{print $2}' | head -n 1 } # 經過adb shell cat /proc/cpuinfo命令計算出CPU核心數 function get_cpu_ker() { adb shell cat /proc/cpuinfo | grep "processor" > ${TEMP_FILE}/processor_count cpu_ker_count=`awk 'END{print NR}' ${TEMP_FILE}/processor_count` echo ${cpu_ker_count} } # 經過adb shell cat /proc/<pid>/stat命令計算出進程CPU時間 function process_cpu_time() { adb shell cat /proc/${1}/stat > ${TEMP_FILE}/process_cpu_time utime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $14}') stime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $15}') cutime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $16}') cstime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $17}') result=`expr ${utime} + ${stime} + ${cutime} + ${cstime}` echo ${result} } # 經過adb shell cat /proc/stat命令計算出總CPU時間 function total_cpu_time() { adb shell cat /proc/stat > ${TEMP_FILE}/total_cpu_time cat ${TEMP_FILE}/total_cpu_time | grep "cpu" | head -n 1 > ${TEMP_FILE}/total_cpu user=$(cat ${TEMP_FILE}/total_cpu | awk '{print $2}') nice=$(cat ${TEMP_FILE}/total_cpu | awk '{print $3}') system=$(cat ${TEMP_FILE}/total_cpu | awk '{print $4}') idle=$(cat ${TEMP_FILE}/total_cpu | awk '{print $5}') iowait=$(cat ${TEMP_FILE}/total_cpu | awk '{print $6}') irq=$(cat ${TEMP_FILE}/total_cpu | awk '{print $7}') softirq=$(cat ${TEMP_FILE}/total_cpu | awk '{print $8}') result=`expr ${user} + ${nice} + ${system} + ${idle} + ${iowait} + ${irq} + ${softirq}` echo ${result} } # 計算進程的CPU佔有率 function get_cpu_rate() { process_cpu_time1=`process_cpu_time ${1}` total_cpu_time1=`total_cpu_time` sleep 1s process_cpu_time2=`process_cpu_time ${1}` total_cpu_time2=`total_cpu_time` process_cpu_time3=$(( ${process_cpu_time2} - ${process_cpu_time1} )) total_cpu_time3=$(( ${total_cpu_time2} - ${total_cpu_time1} )) cpu_rate=$(bc <<< "scale=3;(${process_cpu_time3}/${total_cpu_time3})*${2}*100") result=$(echo "scale=0;${cpu_rate}/1" | bc -l) echo ${result} } # 獲取腳本所在的路徑 WORKSPACE=`pwd` # 輸出文件夾 OUTPUT=${WORKSPACE}/output_cpu # 臨時文件夾 TEMP_FILE=${OUTPUT}/temp # 建立文件夾 init_data # 獲取應用包名 PACKAGE_NAME=${1} # 獲取進程號 pid=`get_pid ${PACKAGE_NAME}` # 獲取CPU核心數 cpu_ker=`get_cpu_ker` # CPU佔有率 rate=`get_cpu_rate ${pid} ${cpu_ker}` echo ${rate} # 返老還童 rm -r output_cpu
參考連接: Linux環境下進程的CPU佔用率bash
歡迎關注微信公衆號"測試開發Stack",更多精彩文章第一時間發佈!微信
原文出處:https://www.cnblogs.com/liushengchieh/p/10514978.html測試