You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.7 KiB
98 lines
2.7 KiB
4 months ago
|
# 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
|