a
    Ad                     @   sh   d dl Z d dlZG dd dZG dd dZejddZejdd	d
d e d  Zeej	dZ
dZdS )    Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )TimerSubcategoryc                 C   s   || _ || _d | _|j| _d S N)timercategorystartbase_categoryoriginal_base_category)selfr   r    r
   5/var/www/html/stable-diffusion-webui/modules/timer.py__init__   s    zTimerSubcategory.__init__c                 C   sV   t   | _| j| j d | j_| j jd7  _| jjrRtd| jj  | j d d S )N/     :)	timer   r   r   r   r   subcategory_level	print_logprintr	   r
   r
   r   	__enter__   s
    
zTimerSubcategory.__enter__c                 C   sT   t   | j }| j| j_| j| j| j | | j jd8  _| jj| jdd d S )Nr   T)disable_log)	r   r   r   r   r   add_time_to_recordr   r   record)r	   exc_typeZexc_valZexc_tbZelapsed_for_subcategroyr
   r
   r   __exit__   s
    
zTimerSubcategory.__exit__N)__name__
__module____qualname__r   r   r   r
   r
   r
   r   r      s   r   c                   @   sP   e Zd ZdddZdd Zdd Zdd	d
Zdd Zdd Zdd Z	dd Z
dS )TimerFc                 C   s,   t   | _i | _d| _d| _|| _d| _d S )Nr    )r   r   recordstotalr   r   r   )r	   r   r
   r
   r   r      s    
zTimer.__init__c                 C   s   t   }|| j }|| _|S r   )r   r   )r	   endresr
   r
   r   elapsed%   s    
zTimer.elapsedc                 C   s*   || j vrd| j |< | j |  |7  < d S )Nr   )r!   )r	   r   amountr
   r
   r   r   +   s    

zTimer.add_time_to_recordr   c                 C   sb   |   }| | j| ||  |  j|| 7  _| jr^|s^td| j  | d|| dd d S )Nr   z
: done in z.3fs)r%   r   r   r"   r   r   r   )r	   r   Z
extra_timer   er
   r
   r   r   1   s
    
zTimer.recordc                 C   s   |    t| |}|S r   )r%   r   )r	   nameZsubcatr
   r
   r   subcategory;   s    
zTimer.subcategoryc                 C   sV   | j dd}dd | j D }|s*|S |d7 }|ddd |D 7 }|d7 }|S )	N.1fr'   c                 S   s(   g | ] \}}|d krd|vr||fqS )g?r   r
   .0r   Z
time_takenr
   r
   r   
<listcomp>D       z!Timer.summary.<locals>.<listcomp>z (z, c                 S   s"   g | ]\}}| d |ddqS )z: r+   r'   r
   r,   r
   r
   r   r.   I   r/   ))r"   r!   itemsjoin)r	   r$   Z	additionsr
   r
   r   summaryA   s    zTimer.summaryc                 C   s   | j | jdS )Nr"   r!   r4   r   r
   r
   r   dumpN   s    z
Timer.dumpc                 C   s   |    d S r   )r   r   r
   r
   r   resetQ   s    zTimer.resetN)F)r   F)r   r   r   r   r%   r   r   r*   r3   r5   r6   r
   r
   r
   r   r      s   


r   F)add_helpz--log-startup
store_truez3print a detailed log of what's happening at startup)actionhelp)r   )r   argparser   r   ArgumentParserparseradd_argumentparse_known_argsargsZlog_startupstartup_timerZstartup_recordr
   r
   r
   r   <module>   s   9