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

Side by Side Diff: tools/findit/component_dictionary.py

Issue 430943003: [Findit] Plain objects to represent and parse stack trace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changed wrong reference to stack frame Created 6 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
« no previous file with comments | « no previous file | tools/findit/crash_utils.py » ('j') | tools/findit/stacktrace.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2014 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 import os
stgao 2014/07/31 19:48:58 Usually we leave a blank line between code and the
5
6
7 class FileDictionary(object):
8 """Maps file in a stacktrace to its crash information.
9
10 It maps file to another dictionary, which maps the file's path to crashed
11 lines, stack frame indices and crashed functions.
12 """
13
14 def __init__(self):
15 """Initializes the file dictionary."""
16 self.file_dic = {}
17
18 def AddFile(self, file_name, file_path, crashed_line_number,
19 stack_frame_index, function):
20 """Adds file and its crash information to the map.
21
22 Args:
23 file_name: name of the crashed file
24 file_path: path of the crashed file
25 crashed_line_number: crashed line of the file
26 stack_frame_index: the file's position in the callstack
27 function: name of the crashed function
28 """
29 # Populate the dictionary if this file/path has not been added before.
30 if file_name not in self.file_dic:
31 self.file_dic[file_name] = {}
32
33 if file_path not in self.file_dic[file_name]:
34 self.file_dic[file_name][file_path] = {}
35
36 if 'lines' not in self.file_dic[file_name][file_path]:
37 self.file_dic[file_name][file_path]['lines'] = []
38
39 if 'stack_frame_index' not in self.file_dic[file_name][file_path]:
40 self.file_dic[file_name][file_path]['stack_frame_index'] = []
41
42 if 'function' not in self.file_dic[file_name][file_path]:
43 self.file_dic[file_name][file_path]['function'] = []
44
45 # Add the crashed line, frame index and function name.
46 self.file_dic[file_name][file_path]['lines'].append(crashed_line_number)
47 self.file_dic[file_name][file_path]['stack_frame_index'].append(
48 stack_frame_index)
49 self.file_dic[file_name][file_path]['function'].append(function)
50
51 def GetPathDic(self, file_name):
52 """Returns file's path and crash information."""
53 return self.file_dic[file_name]
54
55 def GetCrashedLines(self, file_path):
56 """Returns crashed lines given a file name and path."""
57 file_name = os.path.basename(file_path)
58 return self.file_dic[file_name][file_path]['lines']
59
60 def GetCrashStackFrameindex(self, file_path):
61 """Returns stack frame indices given a file name and path."""
62 file_name = os.path.basename(file_path)
63 return self.file_dic[file_name][file_path]['stack_frame_index']
64
65 def GetCrashFunction(self, file_path):
66 """Returns list of crashed functions given a file name and path."""
67 file_name = os.path.basename(file_path)
68 return self.file_dic[file_name][file_path]['function']
69
70 def __iter__(self):
71 return iter(self.file_dic)
72
73
74 class ComponentDictionary(object):
75 """Represents a file dictionary.
76
77 It maps each component (blink, chrome, etc) to a file dictionary.
78 """
79
80 def __init__(self, components):
81 """Initializes the dictionary with given components."""
82 self.component_dic = {}
83
84 # Create file dictionary for all the components.
85 for component in components:
86 self.component_dic[component] = FileDictionary()
87
88 def __iter__(self):
89 return iter(self.component_dic)
90
91 def GetFileDic(self, component):
92 """Returns a file dictionary for a given component."""
93 return self.component_dic[component]
94
95 def FromStacktrace(self, stack_frame_list):
96 """Parses stacktrace, given an instance of StackFrame list."""
97 # Iterate through the list of stackframe objects.
98 for stackframe in stack_frame_list:
99 # If the component of this line is not in the list of components to
100 # look for, ignore this line.
101 component = stackframe.component
102 if component not in self.component_dic:
103 continue
104
105 # Get values of the variables
106 file_name = stackframe.file_name
107 file_path = stackframe.file_path
108 crashed_line_number = stackframe.crashed_line_number
109 stack_frame_index = stackframe.index
110 function = stackframe.function
111
112 # Add the file to this component's dictionary of files.
113 file_dic = self.component_dic[component]
114 file_dic.AddFile(file_name, file_path, crashed_line_number,
115 stack_frame_index, function)
OLDNEW
« no previous file with comments | « no previous file | tools/findit/crash_utils.py » ('j') | tools/findit/stacktrace.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698