blob: e0f35d9dcdb170418919aa7950e90758b6f3044e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
From db1cc42e9f42d464f265f8480f03e3756bd957f2 Mon Sep 17 00:00:00 2001
From: Timothy Palpant <palpant@dropbox.com>
Date: Mon, 10 Jun 2019 18:18:34 -0400
Subject: [PATCH] Use PyFrame_GetLineNumber to get line numbers
---
src/vmp_stack.c | 29 ++---------------------------
1 file changed, 2 insertions(+), 27 deletions(-)
diff --git a/src/vmp_stack.c b/src/vmp_stack.c
index 612e95a..6464846 100644
--- a/src/vmp_stack.c
+++ b/src/vmp_stack.c
@@ -82,12 +82,6 @@ int vmp_profiles_python_lines(void) {
static PY_STACK_FRAME_T * _write_python_stack_entry(PY_STACK_FRAME_T * frame, void ** result, int * depth, int max_depth)
{
- int len;
- int addr;
- int j;
- uint64_t line;
- char *lnotab;
-
#ifndef RPYTHON_VMPROF // pypy does not support line profiling
if (vmp_profiles_python_lines()) {
// In the line profiling mode we save a line number for every frame.
@@ -99,27 +93,8 @@ static PY_STACK_FRAME_T * _write_python_stack_entry(PY_STACK_FRAME_T * frame, vo
// NOTE: the profiling overhead can be reduced by storing co_lnotab in the dump and
// moving this computation to the reader instead of doing it here.
- lnotab = PyStr_AS_STRING(frame->f_code->co_lnotab);
-
- if (lnotab != NULL) {
- line = (uint64_t)frame->f_lineno;
- addr = 0;
-
- len = (int)PyStr_GET_SIZE(frame->f_code->co_lnotab);
-
- for (j = 0; j < len; j += 2) {
- addr += lnotab[j];
- if (addr > frame->f_lasti) {
- break;
- }
- line += lnotab[j+1];
- }
- result[*depth] = (void*) line;
- *depth = *depth + 1;
- } else {
- result[*depth] = (void*) 0;
- *depth = *depth + 1;
- }
+ result[*depth] = (void*) PyFrame_GetLineNumber(frame);
+ *depth = *depth + 1;
}
result[*depth] = (void*)CODE_ADDR_TO_UID(FRAME_CODE(frame));
*depth = *depth + 1;
|