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

Reply via email to