[pypy-commit] pypy vmprof-newstack: random progres

fijal noreply at buildbot.pypy.org
Wed Nov 4 03:49:10 EST 2015


Author: fijal
Branch: vmprof-newstack
Changeset: r80533:92eb26363b25
Date: 2015-11-01 12:36 +0000
http://bitbucket.org/pypy/pypy/changeset/92eb26363b25/

Log:	random progres

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
@@ -52,10 +52,22 @@
     vmprof_register_virtual_function = rffi.llexternal(
                                            "vmprof_register_virtual_function",
                                            [rffi.CCHARP, rffi.LONG, rffi.INT],
-                                           rffi.INT, compilation_info=eci)
+                                           rffi.INT, compilation_info=eci,
+                                           _nowrapper=True)
     vmprof_ignore_signals = rffi.llexternal("vmprof_ignore_signals",
                                             [rffi.INT], lltype.Void,
-                                            compilation_info=eci)
+                                            compilation_info=eci,
+                                            _nowrapper=True)
+    vmprof_stack_new = rffi.llexternal("vmprof_stack_new",
+        [], rffi.VOIDP, compilation_info=eci, _nowrapper=True)
+    vmprof_stack_append = rffi.llexternal("vmprof_stack_append",
+        [rffi.VOIDP, lltype.Signed], rffi.INT, compilation_info=eci,
+        _nowrapper=True)
+    vmprof_stack_pop = rffi.llexternal("vmprof_stack_pop",
+        [rffi.VOIDP], lltype.Signed, compilation_info=eci,
+        _nowrapper=True)
+    vmprof_stack_free = rffi.llexternal("vmprof_stack_free",
+        [rffi.VOIDP], lltype.Void, compilation_info=eci, _nowrapper=True)
     return CInterface(locals())
 
 
diff --git a/rpython/rlib/rvmprof/rvmprof.py b/rpython/rlib/rvmprof/rvmprof.py
--- a/rpython/rlib/rvmprof/rvmprof.py
+++ b/rpython/rlib/rvmprof/rvmprof.py
@@ -19,6 +19,8 @@
 
 class VMProf(object):
 
+    _immutable_fields_ = ['is_enabled?']
+
     def __init__(self):
         "NOT_RPYTHON: use _get_vmprof()"
         self._code_classes = set()
diff --git a/rpython/rlib/rvmprof/src/rvmprof.h b/rpython/rlib/rvmprof/src/rvmprof.h
--- a/rpython/rlib/rvmprof/src/rvmprof.h
+++ b/rpython/rlib/rvmprof/src/rvmprof.h
@@ -4,3 +4,7 @@
 RPY_EXTERN int vmprof_enable(void);
 RPY_EXTERN int vmprof_disable(void);
 RPY_EXTERN int vmprof_register_virtual_function(char *, long, int);
+RPY_EXTERN void* vmprof_stack_new(void);
+RPY_EXTERN int vmprof_stack_append(void*, long);
+RPY_EXTERN long vmprof_stack_pop(void*);
+RPY_EXTERN void vmprof_stack_free(void*);
\ No newline at end of file
diff --git a/rpython/rlib/rvmprof/src/vmprof_main.h b/rpython/rlib/rvmprof/src/vmprof_main.h
--- a/rpython/rlib/rvmprof/src/vmprof_main.h
+++ b/rpython/rlib/rvmprof/src/vmprof_main.h
@@ -37,6 +37,7 @@
 #include "vmprof_unwind.h"
 #endif
 #include "vmprof_mt.h"
+#include "vmprof_stack.h"
 
 
 /************************************************************/
diff --git a/rpython/rlib/rvmprof/src/vmprof_stack.h b/rpython/rlib/rvmprof/src/vmprof_stack.h
new file mode 100644
--- /dev/null
+++ b/rpython/rlib/rvmprof/src/vmprof_stack.h
@@ -0,0 +1,42 @@
+
+#define STACK_SIZE 8192
+#include <stdlib.h>
+
+typedef struct vmprof_stack {
+    volatile long stack_depth;
+    long stack_items[STACK_SIZE];
+} vmprof_stack;
+
+void *vmprof_stack_new(void)
+{
+    vmprof_stack* stack = (vmprof_stack *)malloc(sizeof(vmprof_stack));
+    stack->stack_depth = 0;
+    return (void*)stack;
+}
+
+int vmprof_stack_append(void *_stack, long item)
+{
+    vmprof_stack* stack = (vmprof_stack*)_stack;
+    if (stack->stack_depth >= STACK_SIZE - 1)
+        return -1;
+    stack->stack_items[stack->stack_depth] = item;
+    stack->stack_depth += 1;
+    return 0;
+}
+
+long vmprof_stack_pop(void *_stack)
+{
+    vmprof_stack* stack = (vmprof_stack*)_stack;
+    long res;
+
+    if (stack->stack_depth <= 0)
+        return -1;
+    res = stack->stack_items[stack->stack_depth];
+    stack->stack_depth -= 1;
+    return res;
+}
+
+void vmprof_stack_free(void* stack)
+{
+    free(stack);
+}
\ No newline at end of file


More information about the pypy-commit mailing list