a
    >xd                     @   sH   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd de	Z
dS )	zTracing module.    )Path)Any)
CDPSession)
merge_dictc                   @   sT   e Zd ZdZeddddZdeeddddZe	d	d
dZ
e	e	e	dddZdS )Tracingaq  Tracing class.

    You can use :meth:`start` and :meth:`stop` to create a trace file which can
    be opened in Chrome DevTools or
    `timeline viewer <https://chromedevtools.github.io/timeline-viewer/>`_.

    .. code::

        await page.tracing.start({'path': 'trace.json'})
        await page.goto('https://www.google.com')
        await page.tracing.stop()
    N)clientreturnc                 C   s   || _ d| _d| _d S )NF )_client
_recording_path)selfr    r   I/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyppeteer/tracing.py__init__   s    zTracing.__init__)optionskwargsr   c                    sh   t ||}g d}|d|}d|v r0|d |dd| _d| _| jdd	d
|dI dH  dS )ao  Start tracing.

        Only one trace can be active at a time per browser.

        This method accepts the following options:

        * ``path`` (str): A path to write the trace file to.
        * ``screenshots`` (bool): Capture screenshots in the trace.
        * ``categories`` (List[str]): Specify custom categories to use instead
          of default.
        )z-*zdevtools.timelinez
v8.executez%disabled-by-default-devtools.timelinez+disabled-by-default-devtools.timeline.frametoplevelzblink.consolezblink.user_timingZlatencyInfoz+disabled-by-default-devtools.timeline.stackz#disabled-by-default-v8.cpu_profilerz)disabled-by-default-v8.cpu_profiler.hires
categoriesZscreenshotsz'disabled-by-default-devtools.screenshotpathr	   TTracing.startZReturnAsStream,)ZtransferModer   N)r   getappendr   r   r
   sendjoin)r   r   r   ZdefaultCategoriesZcategoriesArrayr   r   r   start    s    
	
r   )r   c                    sF   j j  j d fdd j dI dH  d_ I dH S )z>Stop tracing.

        :return: trace data as string.
        zTracing.tracingCompletec                    s,   j j| dj fddS )Nstreamc                    s     |  S )N)
set_resultresult)fut)contentPromiser   r   <lambda>M       z0Tracing.stop.<locals>.<lambda>.<locals>.<lambda>)r
   _loopcreate_task_readStreamr   r   add_done_callback)eventr!   r   r   r   r"   J   s   
zTracing.stop.<locals>.<lambda>zTracing.endNF)r
   r$   create_futureoncer   r   )r   r   r)   r   stopB   s    zTracing.stop)handler   r   c           	         s   d}g }|sD| j dd|iI d H }|dd}||dd q| j dd|iI d H  d|}|rt|}|d}|| W d    n1 s0    Y  |S )	NFzIO.readr-   eofdatar	   zIO.closew)r
   r   r   r   r   r   openwrite)	r   r-   r   r.   Zbufsresponser   filefr   r   r   r&   T   s    
(zTracing._readStream)N)__name__
__module____qualname____doc__r   r   dictr   r   strr,   r&   r   r   r   r   r      s
   "r   N)r9   pathlibr   typingr   Zpyppeteer.connectionr   Zpyppeteer.utilr   objectr   r   r   r   r   <module>   s
   