# Copyright (C) 2016 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #!/bin/sh # When signal is received, the stracer will get killed # Call this (just to make sure anyway) kill_strace() { ps_line=`ps -ef | grep strace | grep adb ` if [ $? == 0 ]; then echo Killing `echo $ps_line | awk '{s = ""; for (i=8; i <= NF ; i++) s = s \ $i " "; print s}' ` kill `echo $ps_line | awk '{print $2}' ` fi } catch_sigint() { echo "signal INT received, killing streaming trace capture" kill_strace } compile_tracefiles() { for i in trace.* do if [ $i != trace.begin ] && [ $i != trace.tar ]; then egrep '\/system\/|\/data\/|\/vendor\/' $i > bar # parse out /sys/devices/system/... egrep -v '\/sys\/devices\/system\/' bar > bar0 mv bar0 bar fgrep -v '= -1' bar > foo rm bar # begin_time is seconds since epoch begin_time=`cat trace.begin` # replace seconds since epoch with SECONDS SINCE BOOT in the # strace files awk -v begin="$begin_time" '{ printf "%f strace ", $1 - begin; $1=""; print $0}' foo > bar if [ -s bar ] then echo parsing $i pid=${i##*.} compile_ioshark bar $pid.wl rm -f bar else rm -f $i bar fi fi done } # main() starts here adb root && adb wait-for-device adb shell 'ps' | grep zygote > zygote_pids fgrep -v grep zygote_pids > bar mv bar zygote_pids pid1=`grep -w zygote zygote_pids | awk '{print $2}' ` pid2=`grep -w zygote64 zygote_pids | awk '{print $2}' ` rm -f zygote_pids trap 'catch_sigint' INT echo "^C this script once you finish running your test" adb shell "date +%s > /data/local/tmp/trace.begin ; strace -p $pid1,$pid2 -o /data/local/tmp/trace -q -qq -f -ff -y -ttt -e trace=mmap2,read,write,pread64,pwrite64,fsync,fdatasync,openat,close,lseek,_llseek" # Remove any remnant tracefiles first rm -f trace.* # Get the tracefiles from the device adb shell 'cd /data/local/tmp ; tar cvf trace.tar trace.*' adb pull /data/local/tmp/trace.tar # Extract the tracefiles from the device rm -f *.wl tar xf trace.tar # Compile the tracefiles compile_tracefiles # tar up the .wl files just created rm -f wl.tar tar cf wl.tar ioshark_filenames *.wl