ó
ßüÚ\c           @` sE  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z m Z d e f d „  ƒ  YZ d	 „  Z e j d
 d „ ƒ Z e	 j j e d d ƒd „  ƒ Z e	 j j d d ƒ e	 j j e d d ƒd „  ƒ ƒ Z d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   PY2(   t   thread_time(   t   FractionalTimert   GCDiagnosist   disable_gc_diagnosis(   t   captured_loggert   run_fort   RandomTimerc           B` s    e  Z d  Z d „  Z d „  Z RS(   s?   
    A mock timer producing random (but monotonic) values.
    c         C` sI   d |  _  g  |  _ g  g  f |  _ t j d ƒ |  _ t j d ƒ |  _ d  S(   Ng        i    i   i*   (   i    i   (   t   lastt   timingst	   durationst	   itertoolst   cyclet   i_durationst   randomt   Random(   t   self(    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   __init__   s
    		c         C` sX   |  j  j d ƒ } |  j | 7_ |  j j |  j ƒ |  j t |  j ƒ j | ƒ |  j S(   Ng      ð?(   R   t   expovariateR   R   t   appendR   t   nextR   (   R   t   dt(    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   __call__   s
    (   t   __name__t
   __module__t   __doc__R   R   (    (    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyR
      s   	c          ` s+  d ‰  ‡  f d †  }  t  ƒ  } t d ˆ  d | ƒ } x( t ˆ  ƒ D] } | j ƒ  | j ƒ  q@ Wt | j ƒ ˆ  d k s} t ‚ | j d  k s’ t ‚ | j ƒ  | j ƒ  t | j ƒ ˆ  d d k sÉ t ‚ | j d  k	 sÞ t ‚ |  | | ƒ x9 t ˆ  d ƒ D]' } | j ƒ  | j ƒ  |  | | ƒ qü Wd  S(   Ni
   c         ` sf   | j  } t |  j d ˆ  ƒ t |  j d ˆ  |  j d ˆ  ƒ } | t j | ƒ k sb t ‚ d  S(   Ni   i    (   t   running_fractiont   sumR   t   pytestt   approxt   AssertionError(   t   timert   ftt   actualt   expected(   t   N(    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   check_fraction(   s    	)t	   n_samplesR"   i   i   (
   R
   R   t   ranget   start_timingt   stop_timingt   lenR   R!   R   t   None(   R'   R"   R#   t   i(    (   R&   s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   test_fractional_timer%   s$    
	


#

t   INFOc         c` s   t  d t ƒ t j r) t d t j ƒ n  t d d | d t ƒF } t j ƒ  t j ƒ  |  j	 ƒ  z	 | VWd  |  j ƒ  t j	 ƒ  XWd  QXd  S(   Nt   forces   Unexpected gc.callbackss   distributed.utils_perft   levelt	   propagate(
   R   t   Truet   gct	   callbackst   printR   t   Falset   disablet   collectt   enable(   t   diagR2   t   sio(    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   enable_gc_diagnosis_and_logF   s    	


	
t   reasons   requires Python 3c       
   C` s:  t  d d ƒ }  d |  _ t |  d d ƒŽ } x! t |  j ƒ D] } t j ƒ  q= W| j ƒ  sd t ‚ t j ƒ  | j ƒ  j ƒ  } t	 | ƒ d k s˜ t ‚ t
 j d | d ƒ s´ t ‚ Wd  QXt |  d d ƒh } xK t |  j d ƒ D]6 } t ƒ  } t j ƒ  t ƒ  | } t | d	 t ƒqã W| j ƒ  s0t ‚ Wd  QXd  S(
   Nt   warn_over_fracg      è?i   R2   t   WARNi   s@   full garbage collections took (100|[89][0-9])% CPU time recentlyi    R"   (   R   t	   N_SAMPLESR>   R)   R5   R:   t   getvalueR!   t
   splitlinesR,   t   ret   matchR   R	   (   R<   R=   R.   t   linest   t1R   (    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   test_gc_diagnosis_cpu_timeW   s&    	
	
t   unknownc          C` s²   t  d d ƒ }  d „  } t |  ƒ ˆ } | d
 ƒ t j ƒ  | j ƒ  sN t ‚ | d ƒ t j ƒ  | j ƒ  j ƒ  } t | ƒ d k sŒ t ‚ t j	 d | d	 ƒ s¨ t ‚ Wd  QXd  S(   Nt   info_over_rss_wing    ÐcAc         S` s   d |  g } | j  | ƒ d  S(   Nt   x(   R   (   t   nbytest   l(    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   make_refcyclez   s    id   i   iÈ   i   sJ   full garbage collection released [\d\.]+ MB from [1-9]\d* reference cyclesi    i  i   i  €(
   R   R>   R5   R:   RC   R!   RD   R,   RE   RF   (   R<   RO   R=   RG   (    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   test_gc_diagnosis_rss_winu   s    	



(   t
   __future__R    R   R   t
   contextlibR5   R   R   RE   R   t   distributed.compatibilityR   t   distributed.metricsR   t   distributed.utils_perfR   R   R   t   distributed.utils_testR   R	   t   objectR
   R/   t   contextmanagerR>   t   markt   skipifRI   t   xfailRP   (    (    (    s@   lib/python2.7/site-packages/distributed/tests/test_utils_perf.pyt   <module>   s"   	!!