U
    g83                     @  sb  d dl mZ ddlmZmZ d dlmZ d dlZd dlZddl	m
Z
 G dd deZeG d	d
 d
ZG dd dejZG dd dejZG dd dejZG dd dejZddddZddddZdddddZd6ddd d!d"d#Zd7d$d$d%d$d&d'd(d$d)dd*
d+d,Zed-eG d.d/ d/Zed0eG d1d2 d2Zed3eG d4d5 d5ZdS )8    )annotations   )event_classT_JSON_DICT)	dataclassN)ioc                      sB   e Zd ZdZddddZedd dddZ fd	d
Z  ZS )MemoryDumpConfigz[
    Configuration for memory dump. Used only when "memory-infra" category is enabled.
    dictreturnc                 C  s   | S N selfr   r   S/tmp/pip-unpacked-wheel-3ysq0mf8/selenium/webdriver/common/devtools/v130/tracing.pyto_json   s    zMemoryDumpConfig.to_jsonjsonr   c                 C  s   | |S r   r   clsr   r   r   r   	from_json   s    zMemoryDumpConfig.from_jsonc                   s   d t  S )NzMemoryDumpConfig({}))formatsuper__repr__r   	__class__r   r   r      s    zMemoryDumpConfig.__repr__)	__name__
__module____qualname____doc__r   classmethodr   r   __classcell__r   r   r   r   r      s
   r   c                   @  s   e Zd ZU dZded< dZded< dZded< dZded< dZded	< dZ	d
ed< dZ
d
ed< dZd
ed< dZded< dd Zedd ZdS )TraceConfigNtyping.Optional[str]record_modetyping.Optional[float]trace_buffer_size_in_kbtyping.Optional[bool]enable_samplingenable_systraceenable_argument_filterz!typing.Optional[typing.List[str]]included_categoriesexcluded_categoriessynthetic_delaysz!typing.Optional[MemoryDumpConfig]memory_dump_configc                 C  s   t  }| jd k	r| j|d< | jd k	r.| j|d< | jd k	rB| j|d< | jd k	rV| j|d< | jd k	rj| j|d< | jd k	rdd | jD |d< | jd k	rd	d | jD |d
< | jd k	rdd | jD |d< | j	d k	r| j	
 |d< |S )N
recordModetraceBufferSizeInKbenableSamplingenableSystraceenableArgumentFilterc                 S  s   g | ]}|qS r   r   .0ir   r   r   
<listcomp>I   s     z'TraceConfig.to_json.<locals>.<listcomp>includedCategoriesc                 S  s   g | ]}|qS r   r   r4   r   r   r   r7   K   s     excludedCategoriesc                 S  s   g | ]}|qS r   r   r4   r   r   r   r7   M   s     syntheticDelaysmemoryDumpConfig)r	   r$   r&   r(   r)   r*   r+   r,   r-   r.   r   )r   r   r   r   r   r   <   s(    













zTraceConfig.to_jsonc                 C  s   | d|krt |d nd d|kr,t|d nd d|krBt|d nd d|krXt|d nd d|krnt|d nd d|krdd |d D nd d	|krd
d |d	 D nd d|krdd |d D nd d|krt|d nd d	S )Nr/   r0   r1   r2   r3   r8   c                 S  s   g | ]}t |qS r   strr4   r   r   r   r7   Z   s     z)TraceConfig.from_json.<locals>.<listcomp>r9   c                 S  s   g | ]}t |qS r   r<   r4   r   r   r   r7   [   s     r:   c                 S  s   g | ]}t |qS r   r<   r4   r   r   r   r7   \   s     r;   )	r$   r&   r(   r)   r*   r+   r,   r-   r.   )r=   floatboolr   r   r   r   r   r   r   R   s    zTraceConfig.from_json)r   r   r   r$   __annotations__r&   r(   r)   r*   r+   r,   r-   r.   r   r    r   r   r   r   r   r"      s   
r"   c                   @  s,   e Zd ZdZdZdZdd Zedd ZdS )	StreamFormatz
    Data format of a trace. Can be either the legacy JSON format or the
    protocol buffer format. Note that the JSON format will be deprecated soon.
    r   protoc                 C  s   | j S r   valuer   r   r   r   r   i   s    zStreamFormat.to_jsonc                 C  s   | |S r   r   r   r   r   r   r   l   s    zStreamFormat.from_jsonN)	r   r   r   r   ZJSONPROTOr   r    r   r   r   r   r   rA   a   s   rA   c                   @  s,   e Zd ZdZdZdZdd Zedd ZdS )	StreamCompressionzB
    Compression type to use for traces returned via streams.
    nonegzipc                 C  s   | j S r   rC   r   r   r   r   r   x   s    zStreamCompression.to_jsonc                 C  s   | |S r   r   r   r   r   r   r   {   s    zStreamCompression.from_jsonN)	r   r   r   r   NONEZGZIPr   r    r   r   r   r   r   rF   q   s   rF   c                   @  s0   e Zd ZdZdZdZdZdd Zedd Z	d	S )
MemoryDumpLevelOfDetailz
    Details exposed when memory request explicitly declared.
    Keep consistent with memory_dump_request_args.h and
    memory_instrumentation.mojom
    Z
backgroundlightZdetailedc                 C  s   | j S r   rC   r   r   r   r   r      s    zMemoryDumpLevelOfDetail.to_jsonc                 C  s   | |S r   r   r   r   r   r   r      s    z!MemoryDumpLevelOfDetail.from_jsonN)
r   r   r   r   Z
BACKGROUNDZLIGHTZDETAILEDr   r    r   r   r   r   r   rJ      s   rJ   c                   @  s0   e Zd ZdZdZdZdZdd Zedd Z	d	S )
TracingBackenda  
    Backend type to use for tracing. ``chrome`` uses the Chrome-integrated
    tracing service and is supported on all platforms. ``system`` is only
    supported on Chrome OS and uses the Perfetto system tracing service.
    ``auto`` chooses ``system`` when the perfettoConfig provided to Tracing.start
    specifies at least one non-Chrome data source; otherwise uses ``chrome``.
    autoZchromesystemc                 C  s   | j S r   rC   r   r   r   r   r      s    zTracingBackend.to_jsonc                 C  s   | |S r   r   r   r   r   r   r      s    zTracingBackend.from_jsonN)
r   r   r   r   ZAUTOZCHROMEZSYSTEMr   r    r   r   r   r   r   rL      s   rL   z0typing.Generator[T_JSON_DICT, T_JSON_DICT, None]r
   c                  c  s   ddi} | V }dS )z'
    Stop trace events collection.
    methodzTracing.endNr   cmd_dictr   r   r   r   end   s     rR   z<typing.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[str]]c                  c  s    ddi} | V }dd |d D S )zy
    Gets supported tracing categories.

    **EXPERIMENTAL**

    :returns: A list of supported tracing categories.
    rO   zTracing.getCategoriesc                 S  s   g | ]}t |qS r   r<   r4   r   r   r   r7      s     z"get_categories.<locals>.<listcomp>
categoriesr   rP   r   r   r   get_categories   s
    	 rT   r=   )sync_idr   c                 c  s"   t  }| |d< d|d}|V }dS )z~
    Record a clock sync marker in the trace.

    **EXPERIMENTAL**

    :param sync_id: The ID of this clock sync marker
    ZsyncIdzTracing.recordClockSyncMarkerrO   paramsNr	   )rU   rW   rQ   r   r   r   r   record_clock_sync_marker   s    
rY   r'   z(typing.Optional[MemoryDumpLevelOfDetail]zCtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[str, bool]])deterministiclevel_of_detailr   c                 c  sR   t  }| dk	r| |d< |dk	r*| |d< d|d}|V }t|d t|d fS )a  
    Request a global memory dump.

    **EXPERIMENTAL**

    :param deterministic: *(Optional)* Enables more deterministic results by forcing garbage collection
    :param level_of_detail: *(Optional)* Specifies level of details in memory dump. Defaults to "detailed".
    :returns: A tuple with the following items:

        0. **dumpGuid** - GUID of the resulting global memory dump.
        1. **success** - True iff the global memory dump succeeded.
    NrZ   ZlevelOfDetailzTracing.requestMemoryDumprV   ZdumpGuidsuccess)r	   r   r=   r?   )rZ   r[   rW   rQ   r   r   r   r   request_memory_dump   s    

r]   r#   r%   typing.Optional[StreamFormat]"typing.Optional[StreamCompression]ztyping.Optional[TraceConfig]ztyping.Optional[TracingBackend])
rS   optionsbuffer_usage_reporting_intervaltransfer_modestream_formatstream_compressiontrace_configperfetto_configtracing_backendr   c	                 c  s   t  }	| dk	r| |	d< |dk	r&||	d< |dk	r6||	d< |dk	rF||	d< |dk	rZ| |	d< |dk	rn| |	d< |dk	r| |	d< |dk	r||	d	< |dk	r| |	d
< d|	d}
|
V }dS )a  
    Start trace events collection.

    :param categories: **(EXPERIMENTAL)** *(Optional)* Category/tag filter
    :param options: **(EXPERIMENTAL)** *(Optional)* Tracing options
    :param buffer_usage_reporting_interval: **(EXPERIMENTAL)** *(Optional)* If set, the agent will issue bufferUsage events at this interval, specified in milliseconds
    :param transfer_mode: *(Optional)* Whether to report trace events as series of dataCollected events or to save trace to a stream (defaults to ```ReportEvents````).
    :param stream_format: *(Optional)* Trace data format to use. This only applies when using ````ReturnAsStream```` transfer mode (defaults to ````json````).
    :param stream_compression: **(EXPERIMENTAL)** *(Optional)* Compression format to use. This only applies when using ````ReturnAsStream```` transfer mode (defaults to ````none````)
    :param trace_config: *(Optional)*
    :param perfetto_config: **(EXPERIMENTAL)** *(Optional)* Base64-encoded serialized perfetto.protos.TraceConfig protobuf message When specified, the parameters ````categories````, ````options````, ````traceConfig```` are ignored.
    :param tracing_backend: **(EXPERIMENTAL)** *(Optional)* Backend type (defaults to ````auto```)
    NrS   r`   ZbufferUsageReportingIntervalZtransferModeZstreamFormatstreamCompressionZtraceConfigZperfettoConfigZtracingBackendzTracing.startrV   )r	   r   )rS   r`   ra   rb   rc   rd   re   rf   rg   rW   rQ   r   r   r   r   start   s.    ri   zTracing.bufferUsagec                   @  s>   e Zd ZU dZded< ded< ded< edd ddd	Zd
S )BufferUsagez
    **EXPERIMENTAL**


    r%   percent_fullevent_countrD   r   r   c                 C  sJ   | d|krt |d nd d|kr,t |d nd d|krBt |d nd dS )NZpercentFullZ
eventCountrD   )rk   rl   rD   )r>   r   r   r   r   r   5  s
    zBufferUsage.from_jsonNr   r   r   r   r@   r    r   r   r   r   r   rj   $  s   
rj   zTracing.dataCollectedc                   @  s.   e Zd ZU dZded< edd dddZdS )	DataCollectedz
    **EXPERIMENTAL**

    Contains a bucket of collected trace events. When tracing is stopped collected events will be
    sent as a sequence of dataCollected events followed by tracingComplete event.
    ztyping.List[dict]rD   r   r   c                 C  s   | dd |d D dS )Nc                 S  s   g | ]}t |qS r   rX   r4   r   r   r   r7   L  s     z+DataCollected.from_json.<locals>.<listcomp>rD   rC   r   r   r   r   r   r   I  s    zDataCollected.from_jsonNrm   r   r   r   r   rn   >  s   
rn   zTracing.tracingCompletec                   @  sF   e Zd ZU dZded< ded< ded< ded	< ed
d dddZdS )TracingCompletez
    Signals that tracing is stopped and there is no trace buffers pending flush, all data were
    delivered via dataCollected events.
    r?   data_loss_occurredz typing.Optional[io.StreamHandle]streamr^   trace_formatr_   rd   r   r   c                 C  s\   | t |d d|kr$tj|d nd d|kr<t|d nd d|krTt|d nd dS )NZdataLossOccurredrq   ZtraceFormatrh   )rp   rq   rr   rd   )r?   r   ZStreamHandler   rA   rF   r   r   r   r   r   a  s    
zTracingComplete.from_jsonNrm   r   r   r   r   ro   P  s   
ro   )NN)	NNNNNNNNN)
__future__r   utilr   r   Zdataclassesr   enumtyping r   r	   r   r"   EnumrA   rF   rJ   rL   rR   rT   rY   r]   ri   rj   rn   ro   r   r   r   r   <module>   sJ   B
  !         "2