1*56b170dbSXin Li#!/bin/bash -x 2*56b170dbSXin Li 3*56b170dbSXin Li# usage: run-startup.sh <package name> <activity name> 4*56b170dbSXin Li 5*56b170dbSXin Li# Runs an Android app, collects a trace and prints out a summary of startup 6*56b170dbSXin Li# metrics. 7*56b170dbSXin Li 8*56b170dbSXin LiPACKAGE=$1 9*56b170dbSXin LiACTIVITY=$2 10*56b170dbSXin Li 11*56b170dbSXin LiADB=adb 12*56b170dbSXin Li 13*56b170dbSXin Li# Make sure we use the right adb, etc. 14*56b170dbSXin Li$ADB root 15*56b170dbSXin Li 16*56b170dbSXin Li# Stop the app 17*56b170dbSXin Li$ADB shell "am force-stop $PACKAGE" 18*56b170dbSXin Li 19*56b170dbSXin Li# Make sure it's compiled for speed 20*56b170dbSXin Li$ADB shell "pm compile -m speed $PACKAGE" 21*56b170dbSXin Li 22*56b170dbSXin Li# Clear the page cache 23*56b170dbSXin Li$ADB shell "echo 3 > /proc/sys/vm/drop_caches" 24*56b170dbSXin Li 25*56b170dbSXin Li# Start tracing 26*56b170dbSXin Li$ADB shell "atrace -a $PACKAGE -b 32768 --async_start input dalvik view am wm sched freq idle sync irq binder_driver workq hal freq" 27*56b170dbSXin Li 28*56b170dbSXin Li# Launch the app 29*56b170dbSXin Li$ADB shell "am start -W -n $PACKAGE/$ACTIVITY" 30*56b170dbSXin Li 31*56b170dbSXin Li# Wait a little longer for the app to do whatever it does. 32*56b170dbSXin Lisleep 10 33*56b170dbSXin Li 34*56b170dbSXin Li# Capture the trace 35*56b170dbSXin Li$ADB shell "atrace --async_stop -o /sdcard/atrace.trace" 36*56b170dbSXin Li 37*56b170dbSXin Li# Get the trace 38*56b170dbSXin Li$ADB pull /sdcard/atrace.trace 39*56b170dbSXin Li 40*56b170dbSXin Li# Dump the startup info 41*56b170dbSXin Li./gradlew :trebuchet:startup-analyzer:run --args="`pwd`/atrace.trace" 42