示例#1
0
 def _get_adapted_tick_counter(self):
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just decrement by 100th of the trace length (num of bytecodes).
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length // 100)
     return max(decr_by, 1)
示例#2
0
def new_jump(self, space, bytecode, frame, cur_pc, target_pc):
    if target_pc < cur_pc and jit.we_are_jitted():
        trace_length = jit.current_trace_length()
        decr_by = int(trace_length >> 12 | 1)
        if interrupt_counter.triggers(decr_by=decr_by):
            switch_to_smalltalk(space.current_ruby_process.get())
    return old_jump(self, space, bytecode, frame, cur_pc, target_pc)
示例#3
0
 def _get_adapted_tick_counter(self):
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just decrement by 100th of the trace length (num of bytecodes).
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length // 100)
     return max(decr_by, 1)
示例#4
0
 def jitted_check_for_interrupt(self, s_frame):
     if not self.interrupts:
         return
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just divide by 12**2 and make sure it's always at least 1
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length >> 12 | 1)
     self.quick_check_for_interrupt(s_frame, decr_by)
示例#5
0
 def jitted_check_for_interrupt(self, s_frame):
     if not self.interrupts:
         return
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just divide by 12**2 and make sure it's always at least 1
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length >> 12 | 1)
     self.quick_check_for_interrupt(s_frame, decr_by)
示例#6
0
 def jitted_check_for_interrupt(self, s_frame):
     if not self.interrupts:
         return
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just decrement by 100th of the trace length (num of bytecodes).
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length // 100)
     decr_by = max(decr_by, 1)
     self.quick_check_for_interrupt(s_frame, decr_by)
示例#7
0
 def jitted_check_for_interrupt(self, s_frame):
     if not self.interrupts:
         return
     # Normally, the tick counter is decremented by 1 for every message send.
     # Since we don't know how many messages are called during this trace, we
     # just decrement by 1000th of the trace length (num of bytecodes).
     trace_length = jit.current_trace_length()
     decr_by = int(trace_length // 1000)
     if decr_by > 0:
         self.quick_check_for_interrupt(s_frame, decr_by)
示例#8
0
def _get_adapted_tick_counter():
    # Normally, the tick counter is decremented by 100 for every
    # Python opcode.  Here, to better support JIT compilation of
    # small loops, we decrement it by a possibly smaller constant.
    # We get the maximum 100 when the (unoptimized) trace length
    # is at least 3200 (a bit randomly).
    trace_length = r_uint(current_trace_length())
    decr_by = trace_length // 32
    if decr_by < 1:
        decr_by = 1
    elif decr_by > 100:  # also if current_trace_length() returned -1
        decr_by = 100
    return intmask(decr_by)
示例#9
0
def _get_adapted_tick_counter():
    # Normally, the tick counter is decremented by 100 for every
    # Python opcode.  Here, to better support JIT compilation of
    # small loops, we decrement it by a possibly smaller constant.
    # We get the maximum 100 when the (unoptimized) trace length
    # is at least 3200 (a bit randomly).
    trace_length = r_uint(current_trace_length())
    decr_by = trace_length // 32
    if decr_by < 1:
        decr_by = 1
    elif decr_by > 100:    # also if current_trace_length() returned -1
        decr_by = 100
    return intmask(decr_by)