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

Unified Diff: appengine/findit/crash/stacktrace.py

Issue 2593383002: [Predator] Move ``FilterStackBuffer`` from stack parser to ``AddFilteredStack`` of stacktrace buffe… (Closed)
Patch Set: . Created 4 years 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: 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:

Powered by Google App Engine
This is Rietveld 408576698