Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit 1dc6b57

Browse files
committed
Merge pull request #782 from getsentry/new-frame-slimming
Prioritize trimming system frames
2 parents 329afd7 + 82c8d9f commit 1dc6b57

1 file changed

Lines changed: 38 additions & 8 deletions

File tree

raven/utils/stacks.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
66
:license: BSD, see LICENSE for more details.
77
"""
8-
from __future__ import absolute_import
8+
from __future__ import absolute_import, division
99

1010
import inspect
1111
import linecache
@@ -198,18 +198,48 @@ def slim_frame_data(frames, frame_allowance=25):
198198
199199
Returns ``frames``.
200200
"""
201-
frames_len = len(frames)
201+
frames_len = 0
202+
app_frames = []
203+
system_frames = []
204+
for frame in frames:
205+
frames_len += 1
206+
if frame.get('in_app'):
207+
app_frames.append(frame)
208+
else:
209+
system_frames.append(frame)
202210

203211
if frames_len <= frame_allowance:
204212
return frames
205213

206-
half_max = int(frame_allowance / 2)
214+
remaining = frames_len - frame_allowance
215+
app_count = len(app_frames)
216+
system_allowance = max(frame_allowance - app_count, 0)
217+
if system_allowance:
218+
half_max = int(system_allowance / 2)
219+
# prioritize trimming system frames
220+
for frame in system_frames[half_max:-half_max]:
221+
frame.pop('vars', None)
222+
frame.pop('pre_context', None)
223+
frame.pop('post_context', None)
224+
remaining -= 1
225+
226+
else:
227+
for frame in system_frames:
228+
frame.pop('vars', None)
229+
frame.pop('pre_context', None)
230+
frame.pop('post_context', None)
231+
remaining -= 1
232+
233+
if not remaining:
234+
return frames
235+
236+
app_allowance = app_count - remaining
237+
half_max = int(app_allowance / 2)
207238

208-
for n in range(half_max, frames_len - half_max):
209-
# remove heavy components
210-
frames[n].pop('vars', None)
211-
frames[n].pop('pre_context', None)
212-
frames[n].pop('post_context', None)
239+
for frame in app_frames[half_max:-half_max]:
240+
frame.pop('vars', None)
241+
frame.pop('pre_context', None)
242+
frame.pop('post_context', None)
213243
return frames
214244

215245

0 commit comments

Comments
 (0)