|
5 | 5 | :copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details. |
6 | 6 | :license: BSD, see LICENSE for more details. |
7 | 7 | """ |
8 | | -from __future__ import absolute_import |
| 8 | +from __future__ import absolute_import, division |
9 | 9 |
|
10 | 10 | import inspect |
11 | 11 | import linecache |
@@ -198,18 +198,48 @@ def slim_frame_data(frames, frame_allowance=25): |
198 | 198 |
|
199 | 199 | Returns ``frames``. |
200 | 200 | """ |
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) |
202 | 210 |
|
203 | 211 | if frames_len <= frame_allowance: |
204 | 212 | return frames |
205 | 213 |
|
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) |
207 | 238 |
|
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) |
213 | 243 | return frames |
214 | 244 |
|
215 | 245 |
|
|
0 commit comments