Author: Richard Plangger <[email protected]>
Branch: vmprof-native
Changeset: r90019:a68ddcd69e6c
Date: 2017-02-09 11:50 +0100
http://bitbucket.org/pypy/pypy/changeset/a68ddcd69e6c/
Log: extend the comment on vmprof_execute_code, add more parameters to
_vmprof.enable in the tests
diff --git a/pypy/module/_vmprof/test/test__vmprof.py
b/pypy/module/_vmprof/test/test__vmprof.py
--- a/pypy/module/_vmprof/test/test__vmprof.py
+++ b/pypy/module/_vmprof/test/test__vmprof.py
@@ -48,7 +48,7 @@
import _vmprof
gc.collect() # try to make the weakref list deterministic
gc.collect() # by freeing all dead code objects
- _vmprof.enable(tmpfileno, 0.01)
+ _vmprof.enable(tmpfileno, 0.01, 0, 0, 0)
_vmprof.disable()
s = open(self.tmpfilename, 'rb').read()
no_of_codes = count(s)
@@ -61,7 +61,7 @@
gc.collect()
gc.collect()
- _vmprof.enable(tmpfileno2, 0.01)
+ _vmprof.enable(tmpfileno2, 0.01, 0, 0, 0)
exec """def foo2():
pass
@@ -76,9 +76,9 @@
def test_enable_ovf(self):
import _vmprof
- raises(_vmprof.VMProfError, _vmprof.enable, 2, 0)
- raises(_vmprof.VMProfError, _vmprof.enable, 2, -2.5)
- raises(_vmprof.VMProfError, _vmprof.enable, 2, 1e300)
- raises(_vmprof.VMProfError, _vmprof.enable, 2, 1e300 * 1e300)
+ raises(_vmprof.VMProfError, _vmprof.enable, 2, 0, 0, 0, 0)
+ raises(_vmprof.VMProfError, _vmprof.enable, 2, -2.5, 0, 0, 0)
+ raises(_vmprof.VMProfError, _vmprof.enable, 2, 1e300, 0, 0, 0)
+ raises(_vmprof.VMProfError, _vmprof.enable, 2, 1e300 * 1e300, 0, 0, 0)
NaN = (1e300*1e300) / (1e300*1e300)
- raises(_vmprof.VMProfError, _vmprof.enable, 2, NaN)
+ raises(_vmprof.VMProfError, _vmprof.enable, 2, NaN, 0, 0, 0)
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
@@ -94,11 +94,6 @@
"""
if CodeClass in self._code_classes:
return
- # nope does not work for our tests
- # assert len(self._code_classes) == 0, \
- # "native profiling currently prohibits " \
- # "to have more than one code class. see comment "\
- # "in vmprof_execute_code for details"
CodeClass._vmprof_unique_id = 0 # default value: "unknown"
immut = CodeClass.__dict__.get('_immutable_fields_', [])
CodeClass._immutable_fields_ = list(immut) + ['_vmprof_unique_id']
@@ -184,10 +179,21 @@
'result_class' is ignored (backward compatibility).
- NOTE Native profiling: this function can only be called once during
- translation. It would require the macro IS_VMPROF_EVAL to check
- the IP agains several (not one) symbols. The current symbol is called
- __vmprof_eval_vmprof.
+ ====================================
+ TRANSLATION NOTE CALL THIS ONLY ONCE
+ ====================================
+
+ This function can only be called once during translation.
+ It generates a C function called __vmprof_eval_vmprof which is used by
+ the C source code as an extern function. This is necessary while walking
+ the native stack. If you see __vmprof_eval_vmprof defined twice during
+ translation, read on:
+
+ To remove this restriction do the following:
+
+ *) Extend the macro IS_VMPROF_EVAL in the vmprof source repo to check
several
+ sybmols.
+ *) Give each function provided to this decorator a unique name in C
"""
if _hack_update_stack_untranslated:
from rpython.rtyper.annlowlevel import llhelper
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit