Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 124 lines (102 sloc) 3.852 kb
#!/usr/bin/python2.4 -E
import os
import re
import sys
def PrintUsage():
print "Usage:" + sys.argv[0] + " [-s serial_number] [-r] dir"
print " serial_number: the device being profiled"
print " -r : reuse the directory if it already exists"
print " dir: directory on the host to store profile results"
if (len(sys.argv) > 5):
PrintUsage()
sys.exit(1)
# identify 32-bit vs 64-bit platform
stream = os.popen("uname -m")
arch_name = stream.readline().rstrip("\n");
stream.close()
# default path is prebuilt/linux-x86/oprofile
# for 64-bit OS, use prebuilt/linux-x86_64/oprofile instead
if arch_name == "x86_64":
arch_path = "/../../linux-x86_64/oprofile"
else:
arch_path = ""
try:
oprofile_event_dir = os.environ['OPROFILE_EVENTS_DIR']
except:
print "OPROFILE_EVENTS_DIR not set. Run \". envsetup.sh\" first"
sys.exit(1)
argv_next = 1
if sys.argv[1] == "-s":
if len(sys.argv) < 4:
PrintUsage()
sys.exit(1)
device = " -s %s" % sys.argv[2]
argv_next = argv_next + 2
else:
device = ""
if sys.argv[argv_next] == "-r" :
replace_dir = 1
output_dir = sys.argv[argv_next+1]
else:
replace_dir = 0
output_dir = sys.argv[argv_next]
if (os.path.exists(output_dir) and (replace_dir == 1)):
os.system("rm -fr " + output_dir)
try:
os.makedirs(output_dir)
except:
if os.path.exists(output_dir):
print "Directory already exists:", output_dir
print "Try \"" + sys.argv[0] + " -r " + output_dir + "\""
else:
print "Cannot create", output_dir
sys.exit(1)
# get the samples off the phone
result = os.system("adb%s pull /data/oprofile/samples %s/raw_samples "
"> /dev/null 2>&1" % (device, output_dir))
if result != 0:
print "adb%s pull failure, exiting" % device
sys.exit(1)
# enter the destination directory
os.chdir(output_dir)
# We need to replace the " (deleted)" part in the directory names if
# the region is allocated through ashmem. The post-processing tool doesn't like
# space and parentheses.
# Rename each individual directory from the longest first
# For example, first rename
# raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)
# to
# raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache
# then to
# raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache
deleted_pattern = re.compile(" \(deleted\)$");
stream = os.popen("find raw_samples -type d -name \*\ \(deleted\)\* | sort -r")
for line in stream:
line = line.rstrip()
new_dir = deleted_pattern.sub("", line)
cmd = "mv " + "\"" + line + "\" \"" + new_dir + "\""
os.system(cmd)
# now all the sample files are on the host, we need to invoke opimport one at a
# time to convert the content from the ARM abi to x86 ABI
# break the full filename into:
# 1: leading dir: "raw_samples"
# 2: intermediate dirs: "/blah/blah/blah"
# 3: filename: e.g. "CPU_CYCLES.150000.0.all.all.all"
pattern = re.compile("(^raw_samples)(.*)/(.*)$")
stream = os.popen("find raw_samples -type f -name \*all")
for line in stream:
match = pattern.search(line)
leading_dir = match.group(1)
middle_part = match.group(2)
file_name = match.group(3)
dir = "samples" + middle_part
# if multiple events are collected the directory could have been setup
if not os.path.exists(dir):
os.makedirs(dir)
cmd = oprofile_event_dir + arch_path + "/bin/opimport -a " + \
oprofile_event_dir + \
"/abi/arm_abi -o samples" + middle_part + "/" + file_name + " " + line
os.system(cmd)
stream.close()
# short summary of profiling results
os.system(oprofile_event_dir + arch_path + "/bin/opreport --session-dir=.")
Jump to Line
Something went wrong with that request. Please try again.