Author: Richard Plangger <planri...@gmail.com> Branch: vmprof-native Changeset: r90032:1b6119b16048 Date: 2017-02-10 16:37 +0100 http://bitbucket.org/pypy/pypy/changeset/1b6119b16048/
Log: call dyn_register_jit_page when a loop or bridge is compiled diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py --- a/rpython/jit/metainterp/compile.py +++ b/rpython/jit/metainterp/compile.py @@ -501,11 +501,17 @@ 'compiling', None, name, memo) _log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE_OPT, metainterp_sd, None) _log.write(inputargs, operations) - return metainterp_sd.cpu.compile_loop(inputargs, + asminfo = metainterp_sd.cpu.compile_loop(inputargs, operations, looptoken, jd_id=jd_id, unique_id=unique_id, - log=log, name=name, - logger=metainterp_sd.jitlog) + log=log, name=name, logger=metainterp_sd.jitlog) + + vmprof = metainterp_sd.vmprof + if vmprof: + vmprof.dyn_register_jit_page(asminfo.asmaddr, + asminfo.asmaddr+asminfo.asmlen, 1) + + return asminfo def do_compile_bridge(metainterp_sd, faildescr, inputargs, operations, original_loop_token, log=True, memo=None): @@ -515,9 +521,14 @@ _log = metainterp_sd.jitlog.log_trace(jl.MARK_TRACE_OPT, metainterp_sd, None) _log.write(inputargs, operations) assert isinstance(faildescr, AbstractFailDescr) - return metainterp_sd.cpu.compile_bridge(faildescr, inputargs, operations, + asminfo = metainterp_sd.cpu.compile_bridge(faildescr, inputargs, operations, original_loop_token, log=log, logger=metainterp_sd.jitlog) + vmprof = metainterp_sd.vmprof + if vmprof: + vmprof.dyn_register_jit_page(asminfo.asmaddr, + asminfo.asmaddr+asminfo.asmlen, 0) + return asminfo def forget_optimization_info(lst, reset_values=False): for item in lst: diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -1823,6 +1823,12 @@ self.jitlog.logger_noopt = self.logger_noopt self.jitlog.logger_ops = self.logger_ops + from rpython.rlib.rvmprof import rvmprof, cintf + try: + self.vmprof = rvmprof._get_vmprof() + except cintf.VMProfPlatformUnsupported: + self.vmprof = None + self.profiler = ProfilerClass() self.profiler.cpu = cpu self.warmrunnerdesc = warmrunnerdesc 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 @@ -160,6 +160,17 @@ if res < 0: raise VMProfError(os.strerror(rposix.get_saved_errno())) + + def dyn_register_jit_page(self, addr, end_addr, loop, name=None): + if name is None: + cname = rffi.cast(rffi.CHARP, 0) + else: + cname = rffi.str2charp(name) + return self.cintf.vmp_dyn_register_jit_page(addr, end_addr, cname) + + def dyn_cancel(self, ref): + self.cintf.vmp_dyn_cancel(ref) + def _write_code_registration(self, uid, name): assert name.count(':') == 3 and len(name) <= MAX_FUNC_NAME, ( "the name must be 'class:func_name:func_line:filename' " @@ -250,9 +261,6 @@ def _was_registered(CodeClass): return hasattr(CodeClass, '_vmprof_unique_id') -def register_jit_page(addr, end_addr, splits): - pass - _vmprof_instance = None @specialize.memo() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit