[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