a
    Ad1                     @   s`   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 e	
 Zdd ZdddZdd	d
ZdS )    wrapsN)sharedprogresserrorsdevices	fifo_lockc                    s    fdd}|S )Nc                     s6   t   | i |}W d    n1 s(0    Y  |S )N)
queue_lock)argskwargsresfunc :/var/www/html/stable-diffusion-webui/modules/call_queue.pyf   s    ,zwrap_queued_call.<locals>.fr   )r   r   r   r   r   wrap_queued_call
   s    r   c                    s"   t   fdd}t||ddS )Nc               
      s   | rDt | d tkrD| d drD| d drD| d }t| nd }th tjj	|d t
| z( | i |}t|| W t| nt| 0 tj  W d    n1 s0    Y  |S )Nr   ztask())job)typestr
startswithendswithr   Zadd_task_to_queuer	   r   statebegin
start_taskZrecord_resultsZfinish_taskend)r
   r   id_taskr   r   r   r   r      s    0
(zwrap_gradio_gpu_call.<locals>.fT)extra_outputs	add_stats)r   wrap_gradio_call)r   r   r   r   r   r   wrap_gradio_gpu_call   s    r!   Fc                    s    t |d fdd
}|S )N)extra_outputs_arrayc              
      s  t jjdkot jj o }|r(t j  t }zt|i |}W n t	y } zd}d}d| d| d | }	t
|	|kr|	d| dt
|	 d7 }	tj| d	|	 d
d dt j_dt j_| d u rd dg} t|j d| }
| dt|
 dg }W Y d }~n
d }~0 0 t  dt j_dt j_dt j_ sFt|S t | }t|d }|d }|dd}|dkr| d| }|r\dd t j  D }|d }|d }|d }|d }|t|d d }d}d}d}d | d!|d" d#d$}d | d%|d" d#d$}d | d&|d" dd|d" d'd(|dd)	}d*| d+| d+| d,}nd}|d-  d.| d/| d7  < t|S )0Nr   i   zError completing requestzArguments:  z (Argument list truncated at /z characters)
T)exc_info z: z<div class='error'>z</div>F<   z.1fz sec.z min. c                 S   s   i | ]\}}||d   qS )i  r   ).0kvr   r   r   
<dictcomp>^       z/wrap_gradio_call.<locals>.f.<locals>.<dictcomp>active_peakreserved_peaksystem_peaktotal   d   zRActive: peak amount of video memory used during generation (excluding cached data)zEReserved: total amout of video memory allocated by the Torch library z[System: peak amout of video memory allocated by all running programs, out of total capacityz<abbr title='z&'>A</abbr>: <span class='measurement'>i   z.2fz
 GB</span>z&'>R</abbr>: <span class='measurement'>z('>Sys</abbr>: <span class='measurement'>gz GB</span> (z%)z<p class='vram'>z, <wbr>z</p>zT<div class='performance'><p class='time'>Time taken: <wbr><span class='measurement'>z</span></p>)r   optsmemmon_poll_ratemem_mondisabledmonitortimeperf_counterlist	Exceptionlenr   reportr   r   	job_countr   __name__htmlescaper   torch_gcskippedinterruptedtupleintstopitemsmax)r"   r
   r   Z
run_memmontr   eZmax_debug_str_lenmessagearg_strerror_messageelapsedZ	elapsed_m	elapsed_sZelapsed_textZ	mem_statsr.   r/   Zsys_peakZ	sys_totalZsys_pctZtoltip_aZtoltip_rZ
toltip_sysZtext_aZtext_rZtext_sysZ	vram_htmlr   r   r   r   r   1   s`    
.
,zwrap_gradio_call.<locals>.fr   )r   r   r   r   r   rT   r   r    0   s    Dr    )N)NF)	functoolsr   rC   r;   modulesr   r   r   r   r   ZFIFOLockr	   r   r!   r    r   r   r   r   <module>   s   

