#!/bin/sh # # Script that measures statsd's PSS under an increasing number of metrics. # Globals. pss="" pid="" # Starts the loadtest. start_loadtest() { echo "Starting loadtest" adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "start" } # Stops the loadtest. stop_loadtest() { echo "Stopping loadtest" adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "stop" } # Sets the metrics replication. # Arguments: # $1: The replication factor. set_replication() { adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "set_replication" --ei "replication" "${1}" echo "Replication set to ${1}" } # Reads statsd's pid and PSS. update_pid_and_pss() { # Command that reads the PSS for statsd. This also gives us its pid. get_mem=$(adb shell dumpsys meminfo |grep statsd) # Looks for statsd's pid. regex="([0-9,]+)K: statsd \(pid ([0-9]+)\).*" if [[ $get_mem =~ $regex ]]; then pss=$(echo "${BASH_REMATCH[1]}" | tr -d , | sed 's/\.//g') pid=$(echo "${BASH_REMATCH[2]}") else echo $cmd doesnt match $regex fi } # Kills statsd. # Assumes the pid has been set. kill_statsd() { echo "Killing statsd (pid ${pid})" adb shell kill -9 "${pid}" } # Main loop. main() { start_time=$(date +%s) values=() stop_loadtest echo "" echo "********************* NEW LOADTEST ************************" update_pid_and_pss for replication in 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 do echo "**** Starting test at replication ${replication} ****" # (1) Restart statsd. This will ensure its state is empty. kill_statsd sleep 3 # wait a bit for it to restart update_pid_and_pss echo "Before the test, statsd's PSS is ${pss}" # (2) Set the replication. set_replication "${replication}" sleep 1 # wait a bit # (3) Start the loadtest. start_loadtest # (4) Wait several seconds, then read the PSS. sleep 100 && update_pid_and_pss echo "During the test, statsd's PSS is ${pss}" values+=(${pss}) echo "Values: ${values[@]}" # (5) Stop loadtest. stop_loadtest sleep 2 echo "" done end_time=$(date +%s) echo "Completed loadtest in $((${end_time} - ${start_time})) seconds." values_as_str=$(IFS=$'\n'; echo "${values[*]}") echo "The PSS values are:" echo "${values_as_str}" echo "" } main