[pypy-commit] pypy vmprof: cache some writes on the code object level
fijal
noreply at buildbot.pypy.org
Tue Mar 31 13:10:14 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: vmprof
Changeset: r76659:f4ad7a7e6e7a
Date: 2015-03-31 13:10 +0200
http://bitbucket.org/pypy/pypy/changeset/f4ad7a7e6e7a/
Log: cache some writes on the code object level
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
@@ -124,12 +124,14 @@
def try_cast_to_pycode(gcref):
return rgc.try_cast_gcref_to_instance(PyCode, gcref)
+MAX_CODES = 1000
+
class VMProf(object):
def __init__(self):
self.is_enabled = False
self.ever_enabled = False
- self.mapping_so_far = [] # stored mapping in between runs
self.fileno = -1
+ self.current_codes = []
def enable(self, space, fileno, period):
if self.is_enabled:
@@ -175,20 +177,29 @@
if self.fileno == -1:
raise OperationError(space.w_RuntimeError,
space.wrap("vmprof not running"))
- name = code._get_full_name()
+ if len(self.current_codes) < MAX_CODES:
+ self.current_codes.append(code)
+ else:
+ self._flush_codes(space)
+
+ def _fluch_codes(self, space):
b = StringBuilder()
- b.append('\x02')
- write_long_to_string_builder(code._unique_id, b)
- write_long_to_string_builder(len(name), b)
- b.append(name)
+ for code in self.current_codes:
+ name = code._get_full_name()
+ b.append('\x02')
+ write_long_to_string_builder(code._unique_id, b)
+ write_long_to_string_builder(len(name), b)
+ b.append(name)
os.write(self.fileno, b.build())
+ self.current_codes = []
def disable(self, space):
if not self.is_enabled:
raise oefmt(space.w_ValueError, "_vmprof not enabled")
self.is_enabled = False
+ space.register_code_callback(None)
+ self._fluch_codes(space)
self.fileno = -1
- space.register_code_callback(None)
if we_are_translated():
# does not work untranslated
res = vmprof_disable()
More information about the pypy-commit
mailing list