
H/\c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z d d	 d
 g Z d e f d     YZ d e f d     YZ d	 e f d     YZ d
 e f d     YZ d  d l m Z e e   d  d S(   i    (   t   print_functiont   absolute_importt   divisionN(   t   settrace(   t
   getcurrent(   t   format_run_info(   t   perf_counter(   t   gmctimet   GreenletTracert   HubSwitchTracert   MaxSwitchTracerc           B` sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C` s4   d |  _  d  |  _ t |   } | |  _ t |  _ d  S(   Ni    (   t   greenlet_switch_countert   Nonet   active_greenletR   t   previous_trace_functiont   Falset   _killed(   t   selft
   prev_trace(    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   __init__   s
    			c         C` s/   |  j  s+ t |  _  t |  j  d  |  _ n  d  S(   N(   R   t   TrueR   R   R   (   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   kill1   s    		c         C` sZ   |  j  d 7_  | d k r+ | d |  _ n	 d  |  _ |  j d  k	 rV |  j | |  n  d  S(   Ni   t   switcht   throw(   R   R   (   R   R   R   R   (   R   t   eventt   args(    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   _trace8   s    	c         C` s   |  j  | |  S(   N(   R   (   R   R   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   __call__D   s    c         C` sM   |  j  } |  j d k } d |  _ | s? | d  k s? | | k rC t St | f S(   Ni    (   R   R   R   R   R   (   R   t   hubR   t
   did_switch(    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   did_block_hubG   s    		c         C` s   d  |  _ d  S(   N(   R   R   (   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt    ignore_current_greenlet_blocking^   s    c         C` s   t    |  _ d  S(   N(   R   R   (   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt!   monitor_current_greenlet_blockingb   s    c         C` s   d d d t    | f g } | j d |  f  y t j   | j } Wn! t k
 rk d | f g } n Xt j |  } | j d t | j  f  | j d j	 |   | j d  | j
 t |    | S(	   Nt   =iP   s'   
%s : Greenlet %s appears to be blockeds       Reported by %ss$   Unknown: No thread found for hub %r
s!   Blocked Stack (for thread id %s):t    s   Info:(   R   t   appendt   syst   _current_framest   thread_identt   KeyErrort	   tracebackt   format_stackt   hext   joint   extendR   (   R   R   R   t   format_kwargst   reportt   framet   stack(    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   did_block_hub_reporte   s    (
   t   __name__t
   __module__R   R   R   R   R   R   R    R1   (    (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s   							t
   _HubTracerc           B` s   e  Z d    Z d   Z RS(   c         C` s#   t  j |   | |  _ | |  _ d  S(   N(   R   R   t   max_blocking_timeR   (   R   R   R5   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR   {   s    	c         C` s   d  |  _ t j |   d  S(   N(   R   R   R   R   (   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    	(   R2   R3   R   R   (    (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR4   z   s   	c           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s    t  j |  | |  d |  _ d  S(   Ni    (   R4   R   t   last_entered_hub(   R   R   R5   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    c         C` s8   t  j |  | |  |  j |  j k r4 t   |  _ n  d  S(   N(   R   R   R   R   R   R6   (   R   R   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    c         C` s*   t    |  j |  j k r& t |  j f Sd  S(   N(   R   R6   R5   R   R   (   R   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    (   R2   R3   R   R   R   (    (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR	      s   		c           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s,   t  j |  | |  t   |  _ d |  _ d  S(   Ni    (   R4   R   R   t   last_switcht   max_blocking(   R   R   R5   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    c         C` sc   |  j  } t j |  | |  | |  j k	 r_ | d  k	 r_ t   } t |  j | |  j  |  _ n  d  S(   N(	   R   R   R   R   R   R   t   maxR8   R7   (   R   R   R   t
   old_activet   switched_at(    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    			c         C` sH   |  j  d k r% t   |  j |  _  n  |  j  |  j k rD t |  j f Sd  S(   Ni    (   R8   R   R7   R5   R   R   (   R   R   (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR      s    (   R2   R3   R   R   R   (    (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyR
      s   		
(   t   import_c_accels   gevent.__tracer(   t
   __future__R    R   R   R$   R(   t   greenletR   R   t   gevent.utilR   t   gevent._compatR   t   gevent._utilR   t   __all__t   objectR   R4   R	   R
   R<   t   globals(    (    (    s-   lib/python2.7/site-packages/gevent/_tracer.pyt   <module>   s    	_