opimport_pull revision 10e23eebca4175a8dfe3a788b2bebacb1fcfce54
1#!/usr/bin/python2.4 -E
2
3import os
4import re
5import sys
6
7def PrintUsage():
8    print "Usage:" + sys.argv[0] + " dir"
9    print "    dir: directory on the host to store profile results"
10
11if (len(sys.argv) != 2):
12    PrintUsage()
13    sys.exit(1)
14
15try:
16    oprofile_event_dir = os.environ['OPROFILE_EVENTS_DIR']
17except:
18    print "OPROFILE_EVENTS_DIR not set. Run \". envsetup.sh\" first"
19    sys.exit(1)
20
21output_dir = sys.argv[1];
22
23try:
24    os.makedirs(output_dir)
25except:
26    if os.path.exists(output_dir):
27        print "Directory already exists:", output_dir
28    else:
29        print "Cannot create", output_dir
30    sys.exit(1)
31
32# get the samples off the phone
33result = os.system("adb pull /data/oprofile/samples " + output_dir + \
34                   "/raw_samples > /dev/null 2>&1")
35if result != 0:
36    print "adb pull failure, exiting"
37    sys.exit(1)
38
39# enter the destination directory
40os.chdir(output_dir)
41stream = os.popen("find raw_samples -type f -name \*all")
42
43# now all the sample files are on the host, we need to invoke opimport one at a
44# time to convert the content from the ARM abi to x86 ABI
45
46# break the full filename into:
47# 1: leading dir: "raw_samples"
48# 2: intermediate dirs: "/blah/blah/blah"
49# 3: filename: e.g. "CPU_CYCLES.150000.0.all.all.all"
50pattern = re.compile("(^raw_samples)(.*)/(.*)$")
51for line in stream:
52    match = pattern.search(line)
53    leading_dir = match.group(1)
54    middle_part = match.group(2)
55    file_name = match.group(3)
56
57    dir = "samples" + middle_part
58
59    # if multiple events are collected the directory could have been setup
60    if not os.path.exists(dir):
61        os.makedirs(dir)
62
63    cmd = oprofile_event_dir + "/bin/opimport -a " + oprofile_event_dir + \
64          "/abi/arm_abi -o samples" + middle_part + "/" + file_name + " " + line
65    os.system(cmd)
66
67stream.close()
68
69# short summary of profiling results
70os.system(oprofile_event_dir + "/bin/opreport --session-dir=.")
71