Chromium Code Reviews| Index: appengine/findit/crash/stacktrace.py |
| diff --git a/appengine/findit/crash/stacktrace.py b/appengine/findit/crash/stacktrace.py |
| index 4db6faf2f798d0bfe8188ef56e8e13cabd6932f3..ce3bea60d232d92bc8f9169ada69bc5d6a2e2c5a 100644 |
| --- a/appengine/findit/crash/stacktrace.py |
| +++ b/appengine/findit/crash/stacktrace.py |
| @@ -5,6 +5,7 @@ |
| from collections import namedtuple |
| import copy |
| import logging |
| +import math |
| import re |
| from crash import parse_util |
| @@ -314,13 +315,14 @@ class StacktraceBuffer(object): |
| Note, to make this class fully mutable, it should contain CallStackBuffer |
| list instead of CallStack list. |
| """ |
| - def __init__(self, stacks=None, signature=None): |
| + def __init__(self, stacks=None, signature=None, filters=None): |
| """Initialize StacktraceBuffer instance. |
| Args: |
| stacks (list of CallStackBuffer): CallStackBuffer objects to |
| build stacktrace. |
| - signature (str): signagure is used to determine the crash stack. |
| + signature (str): The signagure is used to determine the crash stack. |
|
wrengr
2016/12/22 22:42:59
"signagure" -> "signature"
Sharu Jiang
2016/12/23 00:26:20
Done.
|
| + filters (list of CallStackBuffer): List of filters to filter stack buffer. |
|
wrengr
2016/12/22 22:43:00
Those aren't CallStackBuffers...
"filters to filt
Sharu Jiang
2016/12/23 00:26:19
Oops, corrected.
|
| """ |
| self.stacks = stacks or [] |
| if signature: |
| @@ -331,12 +333,28 @@ class StacktraceBuffer(object): |
| self.signature_parts = signature.splitlines() |
| else: |
| self.signature_parts = None |
| + self.filters = filters |
|
wrengr
2016/12/22 22:42:59
should have a blank line before this, iirc
Sharu Jiang
2016/12/23 00:26:20
Done.
|
| def __nonzero__(self): |
| """Returns whether this trace buffer is empty.""" |
| return bool(self.stacks) |
| __bool__ = __nonzero__ |
| + def AddFilteredStack(self, stack_buffer): |
| + """Filters stack_buffer and add it to stacks if it's not empty.""" |
| + # If the callstack is the initial one (infinte priority) or empty, return |
| + # None. |
| + if math.isinf(stack_buffer.priority) or not stack_buffer.frames: |
| + return |
| + |
| + if self.filters: |
| + for stack_filter in self.filters: |
|
wrengr
2016/12/22 22:42:59
``if filters: for f in filters:...`` -> ``for f in
Sharu Jiang
2016/12/23 00:26:19
Done.
|
| + stack_buffer = stack_filter(stack_buffer) |
| + if not stack_buffer: |
| + return |
| + |
| + self.stacks.append(stack_buffer) |
| + |
| def ToStacktrace(self): |
| """Converts to ``Stacktrace`` object.""" |
| if not self: |