[pypy-commit] pypy faster-traceback: try to get a raw way of getting traceback quickly
fijal
pypy.commits at gmail.com
Fri Mar 25 15:33:57 EDT 2016
Author: fijal
Branch: faster-traceback
Changeset: r83368:5c1292c4398f
Date: 2016-03-25 21:32 +0200
http://bitbucket.org/pypy/pypy/changeset/5c1292c4398f/
Log: try to get a raw way of getting traceback quickly
diff --git a/pypy/module/__pypy__/interp_traceback.py b/pypy/module/__pypy__/interp_traceback.py
new file mode 100644
diff --git a/pypy/module/_vmprof/__init__.py b/pypy/module/_vmprof/__init__.py
--- a/pypy/module/_vmprof/__init__.py
+++ b/pypy/module/_vmprof/__init__.py
@@ -13,6 +13,8 @@
'disable': 'interp_vmprof.disable',
'write_all_code_objects': 'interp_vmprof.write_all_code_objects',
'VMProfError': 'space.fromcache(interp_vmprof.Cache).w_VMProfError',
+ 'get_fast_traceback' : 'interp_vmprof.get_fast_traceback',
+ 'code_get_unique_id' : 'interp_vmprof.code_get_unique_id',
}
diff --git a/pypy/module/_vmprof/interp_vmprof.py b/pypy/module/_vmprof/interp_vmprof.py
--- a/pypy/module/_vmprof/interp_vmprof.py
+++ b/pypy/module/_vmprof/interp_vmprof.py
@@ -5,6 +5,9 @@
from pypy.interpreter.baseobjspace import W_Root
from rpython.rlib import rvmprof
+from rpython.rtyper.lltypesystem import lltype
+
+
# ____________________________________________________________
@@ -82,3 +85,20 @@
rvmprof.disable()
except rvmprof.VMProfError, e:
raise VMProfError(space, e)
+
+
+def get_fast_traceback(space):
+ MAX_SIZE = 1000
+ l = []
+
+ with lltype.scoped_alloc(lltype.Signed, MAX_SIZE) as buf:
+ n = rvmprof._get_vmprof().cintf.get_stack_trace_default(
+ buf, MAX_SIZE)
+ for i in range(n):
+ l.append(buf[i])
+ return space.newlist_int(l)
+
+ at unwrap_spec(w_code=PyCode)
+def code_get_unique_id(space, w_code):
+ return space.wrap(w_code._vmprof_unique_id)
+
diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -55,6 +55,10 @@
[rffi.INT], lltype.Void,
compilation_info=eci,
_nowrapper=True)
+ vmprof_get_stack_trace_default = rffi.llexternal(
+ "vmprof_get_stack_trace_default",
+ [rffi.CArrayPtr(lltype.Signed), rffi.INT],
+ rffi.INT, compilation_info=eci, threadsafe=False)
return CInterface(locals())
diff --git a/rpython/rlib/rvmprof/src/vmprof_common.h b/rpython/rlib/rvmprof/src/vmprof_common.h
--- a/rpython/rlib/rvmprof/src/vmprof_common.h
+++ b/rpython/rlib/rvmprof/src/vmprof_common.h
@@ -119,3 +119,8 @@
return 0;
}
#endif
+
+static int get_stack_trace_default(intptr_t *result, int max_depth)
+{
+ return get_stack_trace(get_vmprof_stack(), result, max_depth, 0);
+}
More information about the pypy-commit
mailing list