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

Unified 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: Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: tools/findit/component_dictionary.py
diff --git a/tools/findit/component_dictionary.py b/tools/findit/component_dictionary.py
new file mode 100644
index 0000000000000000000000000000000000000000..e5821dfce1e686c642df47a399cf433e4c8aae85
--- /dev/null
+++ b/tools/findit/component_dictionary.py
@@ -0,0 +1,114 @@
+# Copyright (c) 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+class ComponentDictionary(object):
+ """Represents a file dictionary.
+
+ It maps each component (blink, chrome, etc) to a component dictionary.
stgao 2014/07/31 01:52:24 component dictionary? or should be file dictionary
jeun 2014/07/31 18:41:14 Done.
+ """
+
+ def __init__(self, components):
+ """Initializes the dictionary with given components."""
+ self.component_dic = {}
+ self.components = components
stgao 2014/07/31 01:52:23 Do we need to save |components| here? It could be
jeun 2014/07/31 18:41:14 Done.
+
+ # Create file dictionary for all the components
+ for component in components:
+ self.component_dic[component] = FileDictionary()
stgao 2014/07/31 01:52:23 As FileDictionary is used by ComponentDictionary,
jeun 2014/07/31 18:41:14 Done.
+
+ def __iter__(self):
+ return iter(self.component_dic)
+
+ def GetFileDic(self, component):
+ """Returns a component dictionary for a given component."""
stgao 2014/07/31 01:52:24 FileDictionary or component dictionary?
jeun 2014/07/31 18:41:14 Done.
+ return self.component_dic[component]
+
+ def FromStacktrace(self, stack_list):
stgao 2014/07/31 01:52:24 |stack_list| is misleading here. Should it be |sta
jeun 2014/07/31 18:41:14 Done.
+ """Parses stacktrace, given an instance of StacktraceLine list."""
+ # Iterate through the list of stacktrace line objects
+ for stacktrace_line in stack_list:
+
stgao 2014/07/31 01:52:23 This empty line could be removed.
jeun 2014/07/31 18:41:14 Done.
+ # If the component of this line is not believed to have caused the
+ # crash, ignore this line
stgao 2014/07/31 01:52:24 How do you know this here?
jeun 2014/07/31 18:41:14 Updated the comment to explain this in a better wa
+ component = stacktrace_line.component
+ if component not in self.components:
stgao 2014/07/31 01:52:24 we could do below instead: if component not in se
jeun 2014/07/31 18:41:14 Done.
+ continue
+
+ # Get values of the variables
+ file_name = stacktrace_line.file_name
+ file_path = stacktrace_line.file_path
+ crashed_line = stacktrace_line.crashed_line
+ stack_frame_index = stacktrace_line.stack_frame_index
+ function = stacktrace_line.function
+
+ # Add the file to this component's dictionary of files
+ file_dic = self.component_dic[component]
+ file_dic.AddFile(file_name, file_path, crashed_line, stack_frame_index,
+ function)
+
+
+class FileDictionary(object):
+ """Maps file in a stacktrace to its crash information.
+
+ It maps file to another dictionary, which maps the file's path to crashed
+ lines, stack frame indices and crashed functions.
+ """
+
+ def __init__(self):
+ """Initializes the component dictionary."""
+ self.file_dic = {}
+
+ def AddFile(self, file_name, file_path, crashed_line,
+ stack_frame_index, function):
+ """Adds file and its crash information to the map.
+
+ Args:
+ file_name: name of the crashed file
stgao 2014/07/31 01:52:23 I think file_name is not needed, as it could be de
jeun 2014/07/31 18:41:14 I think because stacktrace line already has file_n
stgao 2014/08/01 17:22:20 OK, that's fine. It is a problem of time and memor
+ file_path: path of the crashed file
+ crashed_line: crashed line of the file
+ stack_frame_index: the file's position in the stack frame
+ function: name of the crashed function
+ """
+
stgao 2014/07/31 01:52:23 Empty line is not needed.
jeun 2014/07/31 18:41:14 Done.
+ # Populate the dictionary if this file/path has not been added before
+ if file_name not in self.file_dic:
+ self.file_dic[file_name] = {}
+
+ if file_path not in self.file_dic[file_name]:
+ self.file_dic[file_name][file_path] = {}
+
+ if 'lines' not in self.file_dic[file_name][file_path]:
+ self.file_dic[file_name][file_path]['lines'] = []
+
+ if 'stack_frame_index' not in self.file_dic[file_name][file_path]:
+ self.file_dic[file_name][file_path]['stack_frame_index'] = []
+
+ if 'function' not in self.file_dic[file_name][file_path]:
+ self.file_dic[file_name][file_path]['function'] = []
+
+ # Add the crashed line, frame index and function name
+ self.file_dic[file_name][file_path]['lines'].append(crashed_line)
+ self.file_dic[file_name][file_path]['stack_frame_index'].append(
+ stack_frame_index)
+ self.file_dic[file_name][file_path]['function'].append(function)
+
+ def GetPathDic(self, file_name):
stgao 2014/07/31 01:52:23 For these Get functions here, could we just use fi
jeun 2014/07/31 18:41:14 Done.
+ """Returns file's path and crash information."""
+ return self.file_dic[file_name]
+
+ def GetCrashedLines(self, file_name, file_path):
+ """Returns crashed lines given a file name and path."""
+ return self.file_dic[file_name][file_path]['lines']
+
+ def GetCrashStackFrameindex(self, file_name, file_path):
+ """Returns stack frame indices given a file name and path."""
+ return self.file_dic[file_name][file_path]['stack_frame_index']
+
+ def GetCrashFunction(self, file_name, file_path):
+ """Returns list of crashed functions given a file name and path."""
+ return self.file_dic[file_name][file_path]['function']
+
+ def __iter__(self):
+ return iter(self.file_dic)

Powered by Google App Engine
This is Rietveld 408576698