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

Side by Side Diff: appengine/findit/crash/chromecrash_parser.py

Issue 2593383002: [Predator] Move ``FilterStackBuffer`` from stack parser to ``AddFilteredStack`` of stacktrace buffe… (Closed)
Patch Set: Rebase Created 3 years, 12 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 | « appengine/findit/crash/callstack_filters.py ('k') | appengine/findit/crash/stacktrace.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import math 5 import math
6 import re 6 import re
7 7
8 from crash import callstack_filters 8 from crash import callstack_filters
9 from crash.stacktrace import CallStackBuffer 9 from crash.stacktrace import CallStackBuffer
10 from crash.stacktrace import StacktraceBuffer 10 from crash.stacktrace import StacktraceBuffer
11 from crash.stacktrace import StackFrame 11 from crash.stacktrace import StackFrame
12 from crash.stacktrace import Stacktrace 12 from crash.stacktrace import Stacktrace
13 from crash.stacktrace_parser import StacktraceParser 13 from crash.stacktrace_parser import StacktraceParser
14 from crash.type_enums import CallStackFormatType 14 from crash.type_enums import CallStackFormatType
15 from crash.type_enums import LanguageType 15 from crash.type_enums import LanguageType
16 16
17 FRACAS_CALLSTACK_START_PATTERN = re.compile(r'CRASHED \[(.*) @ 0x(.*)\]') 17 FRACAS_CALLSTACK_START_PATTERN = re.compile(r'CRASHED \[(.*) @ 0x(.*)\]')
18 JAVA_CALLSTACK_START_PATTERN = re.compile(r'\(JAVA\) CRASHED \[(.*) @ 0x(.*)\]') 18 JAVA_CALLSTACK_START_PATTERN = re.compile(r'\(JAVA\) CRASHED \[(.*) @ 0x(.*)\]')
19 DEFAULT_TOP_N_FRAMES = 7 19 DEFAULT_TOP_N_FRAMES = 7
20 20
21 21
22 class ChromeCrashParser(StacktraceParser): 22 class ChromeCrashParser(StacktraceParser):
23 23
24 def Parse(self, stacktrace_string, deps, signature=None, top_n_frames=None): 24 def Parse(self, stacktrace_string, deps, signature=None, top_n_frames=None):
25 """Parse fracas stacktrace string into Stacktrace instance.""" 25 """Parse fracas stacktrace string into Stacktrace instance."""
26 stacktrace_buffer = StacktraceBuffer(signature=signature)
27 # Filters to filter callstack buffers. 26 # Filters to filter callstack buffers.
28 filters = [callstack_filters.FilterInlineFunction(), 27 filters = [callstack_filters.FilterInlineFunction(),
29 callstack_filters.KeepTopNFrames(top_n_frames or 28 callstack_filters.KeepTopNFrames(top_n_frames or
30 DEFAULT_TOP_N_FRAMES)] 29 DEFAULT_TOP_N_FRAMES)]
30 stacktrace_buffer = StacktraceBuffer(signature=signature, filters=filters)
31 31
32 # Initial background callstack which is not to be added into Stacktrace. 32 # Initial background callstack which is not to be added into Stacktrace.
33 stack_buffer = CallStackBuffer() 33 stack_buffer = CallStackBuffer()
34 for line in stacktrace_string.splitlines(): 34 for line in stacktrace_string.splitlines():
35 is_new_callstack, priority, format_type, language_type = ( 35 is_new_callstack, priority, format_type, language_type = (
36 self._IsStartOfNewCallStack(line)) 36 self._IsStartOfNewCallStack(line))
37 37
38 if is_new_callstack: 38 if is_new_callstack:
39 # TODO(katesonia): Refactor this logic to ``AddFilteredStack`` method 39 stacktrace_buffer.AddFilteredStack(stack_buffer)
40 # of StacktraceBuffer.
41 stack_buffer = StacktraceParser.FilterStackBuffer(stack_buffer, filters)
42 if stack_buffer:
43 stacktrace_buffer.stacks.append(stack_buffer)
44
45 stack_buffer = CallStackBuffer(priority=priority, 40 stack_buffer = CallStackBuffer(priority=priority,
46 format_type=format_type, 41 format_type=format_type,
47 language_type=language_type) 42 language_type=language_type)
48 else: 43 else:
49 frame = StackFrame.Parse(stack_buffer.language_type, 44 frame = StackFrame.Parse(stack_buffer.language_type,
50 stack_buffer.format_type, line, deps, 45 stack_buffer.format_type, line, deps,
51 len(stack_buffer.frames)) 46 len(stack_buffer.frames))
52 if frame is not None: 47 if frame is not None:
53 stack_buffer.frames.append(frame) 48 stack_buffer.frames.append(frame)
54 49
55 stack_buffer = StacktraceParser.FilterStackBuffer(stack_buffer, filters) 50 # Add the last stack to stacktrace.
56 if stack_buffer: 51 stacktrace_buffer.AddFilteredStack(stack_buffer)
57 stacktrace_buffer.stacks.append(stack_buffer)
58 52
59 return stacktrace_buffer.ToStacktrace() 53 return stacktrace_buffer.ToStacktrace()
60 54
61 def _IsStartOfNewCallStack(self, line): 55 def _IsStartOfNewCallStack(self, line):
62 """Determine whether a line is a start of a callstack or not. 56 """Determine whether a line is a start of a callstack or not.
63 57
64 Returns a tuple - (is_new_callstack, stack_priority, format_type, 58 Returns a tuple - (is_new_callstack, stack_priority, format_type,
65 language type). 59 language type).
66 """ 60 """
67 if FRACAS_CALLSTACK_START_PATTERN.match(line): 61 if FRACAS_CALLSTACK_START_PATTERN.match(line):
68 #Fracas only provide magic signature stack (crash stack). 62 #Fracas only provide magic signature stack (crash stack).
69 return True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP 63 return True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP
70 64
71 if JAVA_CALLSTACK_START_PATTERN.match(line): 65 if JAVA_CALLSTACK_START_PATTERN.match(line):
72 return True, 0, CallStackFormatType.DEFAULT, LanguageType.JAVA 66 return True, 0, CallStackFormatType.DEFAULT, LanguageType.JAVA
73 67
74 return False, None, None, None 68 return False, None, None, None
OLDNEW
« no previous file with comments | « appengine/findit/crash/callstack_filters.py ('k') | appengine/findit/crash/stacktrace.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698