U
    Pe                     @   s  d Z ddlmZ d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
m	Z	mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ eseZe	Z ej!dkre
Z G dd deZ"G dd dZ#G dd dZ$G dd dZ%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G d d! d!Z*e+d"kr$g Z,d#a-e.  dOd$d%Z/dZ0e1e2 3 Z4e45  d&d' e4D Z4e/d( e/d) e/d*e  e/d) e/d( e/d+ e/d, e/d-ej!  e/d.ej6  e/d/ej7  e/d0ej8  e/d1ej9  e/d2ej:;ej<  e/d3eej:=ej<  e/d( e/d4 e/d, dd5l>m?Z?m@Z@mAZAmBZB e/d6e?e@  e/d7e?eA  e/d8e?eB  e/d( e/d9 e/d: e4D ],ZCejDD ]ZEeFeE qeG  e/d;e4HeCd< eIe4eCj f d= zejJKd> eC ZLW nN eMk
r~ ZN z.e/d?eOeN  ddlPZPePQ  W Y qW 5 dZN[NX Y nX e  ZRz.ejJKd> eLS  e  eR ZTe/d@eT  W n> eMk
r ZN ze/d?eOeN  W Y qW 5 dZN[NX Y nX e0eT7 Z0qe/d( e/dAe0  e/d( eU  zeVdBZWW n  eXk
rP   eYd Y nX eWZ [ dCkre\dD zddl]Z]W n( e^k
r   e\dE eYd< Y nX d#dFdGdH_e,iidIZ`e]jadJebe`dKZce\  e\  e\dLdecjdM  e\  e\  ne\dN dS )Pa/  
Benchmark
=========

This script performs and displays the results of a set of benchmarks. These
provide a set of metrics mainly aimed at gauging the OpenGL performance of your
system.

It also provides more specs regarding your graphics card setup together with
more comprehensive system information.
    )print_function1N)clocktimectime)randint)Label)Button)Widget)RenderContext)MotionEvent)Cache)Clock)PY2win32c                   @   s   e Zd ZdS )FakeMotionEventN)__name__
__module____qualname__ r   r   8/tmp/pip-unpacked-wheel-xzebddm3/kivy/tools/benchmark.pyr   *   s   r   c                   @   s   e Zd ZdZdd ZdS )bench_widget_creationzWidget: creation (10000 Widget)c                 C   s"   g }t dD ]}|t  qd S N'  )rangeappendr
   selfoxr   r   r   run1   s    zbench_widget_creation.runNr   r   r   __doc__r    r   r   r   r   r   .   s   r   c                   @   s   e Zd ZdZdd ZdS )bench_widget_creation_with_rootz(Widget: creation (10000 Widget + 1 root)c                 C   s$   t  }tdD ]}|t   qd S r   )r
   r   
add_widgetr   r   r   r   r    :   s    z#bench_widget_creation_with_root.runNr!   r   r   r   r   r#   7   s   r#   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_widget_drawz-Widget: empty drawing (10000 Widget + 1 root)c                 C   sB   t  | _t  | _}tdD ]}|t  q| j| jj d S r   )r   ctxr
   rootr   r$   addZcanvas)r   r'   r   r   r   r   __init__C   s
    zbench_widget_draw.__init__c                 C   s   | j   d S )N)r&   Zdraw)r   r   r   r   r    J   s    zbench_widget_draw.runNr   r   r   r"   r)   r    r   r   r   r   r%   @   s   r%   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_widget_dispatchz9Widget: event dispatch (1000 on_update in 10*1000 Widget)c                 C   sH   t  }tdD ].}t  }tdD ]}|t   q || q|| _d S )N
   i  )r
   r   r$   r'   )r   r'   r   parentyr   r   r   r)   Q   s    zbench_widget_dispatch.__init__c                 C   s:   t ddg }| jd| | jd| | jd| d S )NZfake   Zon_touch_downZon_touch_moveZon_touch_up)r   r'   dispatch)r   touchr   r   r   r    Z   s    zbench_widget_dispatch.runNr*   r   r   r   r   r+   N   s   	r+   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_label_creationz%Core: label creation (10000 * 10 a-z)c                 C   s>   g }t dD ]&}dd t dD }|d| q|| _d S )Nr   c                 S   s"   g | ]}t ttd tdqS azchrr   ord.0r   r   r   r   
<listcomp>g   s     z1bench_label_creation.__init__.<locals>.<listcomp>r,    r   r   joinlabelsr   r?   r   labelr   r   r   r)   d   s
    zbench_label_creation.__init__c                 C   s$   g }| j D ]}|t|d q
d S N)text)r?   r   r   r   r   r   r   r    k   s    
zbench_label_creation.runNr*   r   r   r   r   r2   a   s   r2   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_button_creationz&Core: button creation (10000 * 10 a-z)c                 C   s>   g }t dD ]&}tdd t d}|d| q|| _d S )Nr   c                 S   s   t ttdtdS Nr4   r5   r6   r   r   r   r   <lambda>w       z0bench_button_creation.__init__.<locals>.<lambda>r,   r<   xrangemapr   r>   r?   r   r?   r   buttonr   r   r   r)   t   s    zbench_button_creation.__init__c                 C   s$   g }| j D ]}|t|d q
d S rB   )r?   r   r	   r   r   r   r   r    |   s    
zbench_button_creation.runNr*   r   r   r   r   rD   q   s   rD   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_label_creation_with_tickz6Core: label creation (10000 * 10 a-z), with Clock.tickc                 C   s>   g }t dD ]&}dd t dD }|d| q|| _d S )Nr   c                 S   s"   g | ]}t ttd tdqS r3   r6   r9   r   r   r   r;      s     z;bench_label_creation_with_tick.__init__.<locals>.<listcomp>r,   r<   r=   r@   r   r   r   r)      s
    z'bench_label_creation_with_tick.__init__c                 C   s,   g }| j D ]}|t|d q
t  d S rB   )r?   r   r   r   tickr   r   r   r   r       s    
z"bench_label_creation_with_tick.runNr*   r   r   r   r   rN      s   rN   c                   @   s    e Zd ZdZdd Zdd ZdS )bench_button_creation_with_tickz7Core: button creation (10000 * 10 a-z), with Clock.tickc                 C   s>   g }t dD ]&}tdd t d}|d| q|| _d S )Nr   c                 S   s   t ttdtdS rE   r6   rF   r   r   r   rG      rH   z:bench_button_creation_with_tick.__init__.<locals>.<lambda>r,   r<   rI   rL   r   r   r   r)      s    z(bench_button_creation_with_tick.__init__c                 C   s,   g }| j D ]}|t|d q
t  d S rB   )r?   r   r	   r   rO   r   r   r   r   r       s    
z#bench_button_creation_with_tick.runNr*   r   r   r   r   rP      s   rP   __main__Tc                 C   sT   t sdtd | f td< n
t|  |r6t|  da nt| dd da tj  d S )Nz%s %sT )endF)report_newlinereportr   printsysstdoutflush)snewliner   r   r   log   s    
r]   c                 C   s    g | ]}| d rt | qS )Zbench_)
startswithglobalsr9   r   r   r   r;      s     
 r;   r<   zF======================================================================zKivy Benchmark v%szSystem informationz-------------------zOS platform     : %szPython EXE      : %szPython Version  : %szPython API      : %szKivy Version    : %szInstall path    : %szInstall date    : %szOpenGL information)glGetString	GL_VENDORGL_RENDERER
GL_VERSIONzGL Vendor: %szGL Renderer: %szGL Version: %sZ	Benchmarkz	---------z%2d/%-2d %-60sr/   F.z	failed %sz%.6fzResult: %.6fz9Do you want to send benchmark to gist.github.com (Y/n) : )r<   r.   z*Please wait while sending the benchmark...z1`requests` module not found, no benchmark posted.zbenchmark.txtcontent
)publicfileszhttps://api.github.com/gists)datazREPORT posted at {0}Zhtml_urlzNo benchmark posted.)T)er"   
__future__r   Zbenchmark_versionosrX   jsonZkivygcr   r   r   randomr   Zkivy.uix.labelr   Zkivy.uix.buttonr	   Zkivy.uix.widgetr
   Zkivy.graphicsr   Zkivy.input.motioneventr   Z
kivy.cacher   Z
kivy.clockr   Zkivy.compatr   r   rJ   Zclockfnplatformr   r   r#   r%   r+   r2   rD   rN   rP   r   rV   rU   Zstart_clockr]   Zclock_totallistr_   keysZbenchssort
executableversionapi_version__version__pathdirname__file__getctimeZkivy.core.glr`   ra   rb   rc   r   Z_categoriescatremoveZcollectindexlenstderrwritetest	Exceptionestr	traceback	print_excZclock_startr    Z	clock_endZ
stop_clockinputZreplyEOFErrorexitlowerstriprW   requestsImportErrorr>   payloadpostdumpsrformatr   r   r   r   <module>   s   
		



 

 