Author: Richard Plangger <planri...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit