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