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