Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: mojo/devtools/common/android_stack_parser/stack_utils.py

Issue 1306603002: Improve android stack parser (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Utility functions for the stack tool."""
6
7 import glob
8 import os
9 import os.path
10 import re
11
ppi 2015/08/21 14:53:07 two blank lines please
etiennej 2015/08/21 15:07:18 Done.
12 def UnzipSymbols(symbolfile, symdir=None):
13 """Unzips a file to _DEFAULT_SYMROOT and returns the unzipped location.
14
15 Args:
16 symbolfile: The .zip file to unzip
17 symdir: Optional temporary directory to use for extraction
18
19 Returns:
20 A tuple containing (the directory into which the zip file was unzipped,
21 the path to the "symbols" directory in the unzipped file). To clean
22 up, the caller can delete the first element of the tuple.
23
24 Raises:
25 SymbolDownloadException: When the unzip fails.
26 """
27 if not symdir:
28 symdir = "%s/%s" % (_DEFAULT_SYMROOT, hash(symbolfile))
29 if not os.path.exists(symdir):
30 os.makedirs(symdir)
31
32 print "extracting %s..." % symbolfile
33 saveddir = os.getcwd()
34 os.chdir(symdir)
35 try:
36 unzipcode = subprocess.call(["unzip", "-qq", "-o", symbolfile])
37 if unzipcode > 0:
38 os.remove(symbolfile)
39 raise SymbolDownloadException("failed to extract symbol files (%s)."
40 % symbolfile)
41 finally:
42 os.chdir(saveddir)
43
44 android_symbols = glob.glob("%s/out/target/product/*/symbols" % symdir)
45 if android_symbols:
46 return (symdir, android_symbols[0])
47 else:
48 # This is a zip of Chrome symbols, so symbol.CHROME_SYMBOLS_DIR needs to be
49 # updated to point here.
50 symbol.CHROME_SYMBOLS_DIR = symdir
51 return (symdir, symdir)
52
53
54 def GetBasenameFromMojoApp(url):
55 """Used by GetSymbolMapping() to extract the basename from the location the
56 mojo app was downloaded from. The location is a URL, e.g.
57 http://foo/bar/x.so."""
58 index = url.rfind('/')
59 return url[(index + 1):] if index != -1 else url
60
61
62 def GetSymboledNameForMojoApp(path):
63 """Used by GetSymbolMapping to get the non-stripped library name for an
64 installed mojo app."""
65 # e.g. tracing.mojo -> libtracing_library.so
66 name, ext = os.path.splitext(path)
67 if ext != '.mojo':
68 return path
69 return 'lib%s_library.so' % name
70
71
72 def GetSymbolMapping(lines):
73 """Returns a mapping (dictionary) from download file to .so."""
74 regex = re.compile('Caching mojo app (\S+?)(?:\?\S+)? at (\S+)')
75 mappings = {}
76 for line in lines:
77 result = regex.search(line)
78 if result:
79 url = GetBasenameFromMojoApp(result.group(1))
80 mappings[os.path.normpath(result.group(2))] = GetSymboledNameForMojoApp(
81 url)
82 return mappings
83
84
85 def _LowestAncestorContainingRelpath(dir_path, relpath):
86 """Returns the lowest ancestor dir of |dir_path| that contains |relpath|.
87 """
88 cur_dir_path = os.path.abspath(dir_path)
89 while True:
90 if os.path.exists(os.path.join(cur_dir_path, relpath)):
91 return cur_dir_path
92
93 next_dir_path = os.path.dirname(cur_dir_path)
94 if next_dir_path != cur_dir_path:
95 cur_dir_path = next_dir_path
96 else:
97 return None
98
99
100 def GuessDir(relpath):
101 """Returns absolute path to location |relpath| in the lowest ancestor of this
102 file that contains it."""
103 lowest_ancestor = _LowestAncestorContainingRelpath(
104 os.path.dirname(__file__), relpath)
105 if not lowest_ancestor:
106 return None
107 return os.path.join(lowest_ancestor, relpath)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698