Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100755 124 lines (102 sloc) 3.852 kb
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
1 #!/usr/bin/python2.4 -E
2
3 import os
4 import re
5 import sys
6
7 def PrintUsage():
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
8 print "Usage:" + sys.argv[0] + " [-s serial_number] [-r] dir"
9 print " serial_number: the device being profiled"
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
10 print " -r : reuse the directory if it already exists"
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
11 print " dir: directory on the host to store profile results"
12
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
13 if (len(sys.argv) > 5):
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
14 PrintUsage()
15 sys.exit(1)
16
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
17 # identify 32-bit vs 64-bit platform
18 stream = os.popen("uname -m")
19 arch_name = stream.readline().rstrip("\n");
20 stream.close()
21
22 # default path is prebuilt/linux-x86/oprofile
23 # for 64-bit OS, use prebuilt/linux-x86_64/oprofile instead
24 if arch_name == "x86_64":
25 arch_path = "/../../linux-x86_64/oprofile"
26 else:
27 arch_path = ""
28
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
29 try:
30 oprofile_event_dir = os.environ['OPROFILE_EVENTS_DIR']
31 except:
32 print "OPROFILE_EVENTS_DIR not set. Run \". envsetup.sh\" first"
33 sys.exit(1)
34
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
35 argv_next = 1
36 if sys.argv[1] == "-s":
37 if len(sys.argv) < 4:
38 PrintUsage()
39 sys.exit(1)
40 device = " -s %s" % sys.argv[2]
41 argv_next = argv_next + 2
42 else:
43 device = ""
44
45 if sys.argv[argv_next] == "-r" :
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
46 replace_dir = 1
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
47 output_dir = sys.argv[argv_next+1]
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
48 else:
49 replace_dir = 0
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
50 output_dir = sys.argv[argv_next]
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
51
52 if (os.path.exists(output_dir) and (replace_dir == 1)):
53 os.system("rm -fr " + output_dir)
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
54
55 try:
56 os.makedirs(output_dir)
57 except:
58 if os.path.exists(output_dir):
59 print "Directory already exists:", output_dir
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
60 print "Try \"" + sys.argv[0] + " -r " + output_dir + "\""
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
61 else:
62 print "Cannot create", output_dir
63 sys.exit(1)
64
65 # get the samples off the phone
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
66 result = os.system("adb%s pull /data/oprofile/samples %s/raw_samples "
67 "> /dev/null 2>&1" % (device, output_dir))
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
68 if result != 0:
df3ced8 Add an option which enables specifying a device to pull out samples.
Jing Yu authored
69 print "adb%s pull failure, exiting" % device
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
70 sys.exit(1)
71
72 # enter the destination directory
73 os.chdir(output_dir)
afec5b9 Minor bug fix/enhancement for OProfile post-processing tools.
Ben Cheng authored
74
75 # We need to replace the " (deleted)" part in the directory names if
76 # the region is allocated through ashmem. The post-processing tool doesn't like
77 # space and parentheses.
78 # Rename each individual directory from the longest first
79 # For example, first rename
80 # raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)
81 # to
82 # raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache (deleted)/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache
83 # then to
84 # raw_samples/current/{root}/dev/ashmem/dalvik-jit-code-cache/{dep}/{root}/dev/ashmem/dalvik-jit-code-cache
85 deleted_pattern = re.compile(" \(deleted\)$");
86 stream = os.popen("find raw_samples -type d -name \*\ \(deleted\)\* | sort -r")
87 for line in stream:
88 line = line.rstrip()
89 new_dir = deleted_pattern.sub("", line)
90 cmd = "mv " + "\"" + line + "\" \"" + new_dir + "\""
91 os.system(cmd)
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
92
93 # now all the sample files are on the host, we need to invoke opimport one at a
94 # time to convert the content from the ARM abi to x86 ABI
95
96 # break the full filename into:
97 # 1: leading dir: "raw_samples"
98 # 2: intermediate dirs: "/blah/blah/blah"
99 # 3: filename: e.g. "CPU_CYCLES.150000.0.all.all.all"
100 pattern = re.compile("(^raw_samples)(.*)/(.*)$")
afec5b9 Minor bug fix/enhancement for OProfile post-processing tools.
Ben Cheng authored
101
102 stream = os.popen("find raw_samples -type f -name \*all")
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
103 for line in stream:
104 match = pattern.search(line)
105 leading_dir = match.group(1)
106 middle_part = match.group(2)
107 file_name = match.group(3)
108
109 dir = "samples" + middle_part
110
111 # if multiple events are collected the directory could have been setup
112 if not os.path.exists(dir):
113 os.makedirs(dir)
114
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
115 cmd = oprofile_event_dir + arch_path + "/bin/opimport -a " + \
116 oprofile_event_dir + \
10e23ee auto import from //depot/cupcake/@135843
The Android Open Source Project authored
117 "/abi/arm_abi -o samples" + middle_part + "/" + file_name + " " + line
118 os.system(cmd)
119
120 stream.close()
121
122 # short summary of profiling results
d6eeae3 Select the proper version of OProfile tools based on host OS information...
Ben Cheng authored
123 os.system(oprofile_event_dir + arch_path + "/bin/opreport --session-dir=.")
Something went wrong with that request. Please try again.