1b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Copyright (C) 2016 The Android Open Source Project 2b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# 3b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Licensed under the Apache License, Version 2.0 (the "License"); 4b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# you may not use this file except in compliance with the License. 5b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# You may obtain a copy of the License at 6b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# 7b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# http://www.apache.org/licenses/LICENSE-2.0 8b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# # Unless required by applicable law or agreed to in writing, software 9b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# distributed under the License is distributed on an "AS IS" BASIS, 10b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# See the License for the specific language governing permissions and 12b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# limitations under the License. 13b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 14b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan#!/bin/sh 15b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 16b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# When signal is received, the stracer will get killed 17b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Call this (just to make sure anyway) 18b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasankill_strace() { 19b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan ps_line=`ps -ef | grep strace | grep adb ` 20b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan if [ $? == 0 ]; then 21b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan echo Killing `echo $ps_line | awk '{s = ""; for (i=8; i <= NF ; i++) s = s \ 22b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan$i " "; print s}' ` 23b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan kill `echo $ps_line | awk '{print $2}' ` 24b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan fi 25b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan} 26b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 27b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasancatch_sigint() 28b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan{ 29b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan echo "signal INT received, killing streaming trace capture" 30b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan kill_strace 31b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan} 32b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 33b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasancompile_tracefiles() 34b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan{ 35b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan for i in trace.* 36b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan do 37b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan if [ $i != trace.begin ] && [ $i != trace.tar ]; 38b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan then 39b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan egrep '\/system\/|\/data\/|\/vendor\/' $i > bar 40b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# parse out /sys/devices/system/... 41b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan egrep -v '\/sys\/devices\/system\/' bar > bar0 42b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan mv bar0 bar 43b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan fgrep -v '= -1' bar > foo 449d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan rm bar 459d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan # begin_time is seconds since epoch 469d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan begin_time=`cat trace.begin` 479d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan # replace seconds since epoch with SECONDS SINCE BOOT in the 489d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan # strace files 499d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan awk -v begin="$begin_time" '{ printf "%f strace ", $1 - begin; $1=""; print $0}' foo > bar 50b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan if [ -s bar ] 51b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan then 52b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan echo parsing $i 539d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan pid=${i##*.} 549d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasan compile_ioshark bar $pid.wl 55b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan rm -f bar 56b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan else 57b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan rm -f $i bar 58b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan fi 59b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan fi 60b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan done 61b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan} 62b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 63b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# main() starts here 64b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 65b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanadb root && adb wait-for-device 66b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 67b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanadb shell 'ps' | grep zygote > zygote_pids 68b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 69b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanfgrep -v grep zygote_pids > bar 70b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanmv bar zygote_pids 71b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanpid1=`grep -w zygote zygote_pids | awk '{print $2}' ` 72b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanpid2=`grep -w zygote64 zygote_pids | awk '{print $2}' ` 73b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanrm -f zygote_pids 74b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 75b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasantrap 'catch_sigint' INT 76b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 77b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanecho "^C this script once you finish running your test" 78b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 79b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanadb 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" 80b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 81b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Remove any remnant tracefiles first 82b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanrm -f trace.* 83b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 84b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Get the tracefiles from the device 85b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanadb shell 'cd /data/local/tmp ; tar cvf trace.tar trace.*' 86b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanadb pull /data/local/tmp/trace.tar 87b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 88b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Extract the tracefiles from the device 89b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasanrm -f *.wl 90b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasantar xf trace.tar 91b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 92b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# Compile the tracefiles 93b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasancompile_tracefiles 94b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan 95b707f30a7cdd521db5d0d1c1e5c391e61a1675c9Mohan Srinivasan# tar up the .wl files just created 969d00a124c5591198264ffedf0ba4c73bddfc346fMohan Srinivasanrm -f wl.tar 9702f8626d766424406bcfea1e20ef352d3b9a72cfMohan Srinivasantar cf wl.tar ioshark_filenames *.wl 98