3 \V@sddlZddlZddlZddlZddlmZdddgZGdddZdd dZdd dZ Gd ddZ d d Z e dkr|e dS)N) OptionParserrunrunctxProfilec@s,eZdZddZddZddZddZd S) _UtilscCs ||_dS)N)profiler)selfrr /usr/lib64/python3.6/profile.py__init__1sz_Utils.__init__cCsF|j}z(y|j|Wntk r,YnXWd|j|||XdS)N)rr SystemExit_show)r statementfilenamesortprofr r r r4s  z _Utils.runcCsJ|j}z,y|j|||Wntk r0YnXWd|j|||XdS)N)rrr r )rrglobalslocalsrrrr r r r=s  z _Utils.runctxcCs"|dk r|j|n |j|dS)N) dump_stats print_stats)rrrrr r r r Fs z _Utils._showN)__name__ __module__ __qualname__r rrr r r r r r+s  rcCsttj|||S)N)rrr)rrrr r r rRs cCsttj|||||S)N)rrr)rrrrrr r r r_sc@seZdZdZd3ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ e e e e e e dZ ddZGdddZGdddZddZddZd5d!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd6d/d0Zd1d2ZdS)7rrNc Csi|_d|_d|_d|_|dkr&|j}||_|sHtj|_|_|j |_ nl||_|j}y t |}Wn"t k r||_|j |_ Yn0X|dkr|j |_ n|j|_ |tfdd}||_|j|_|jddS)NcSs ||S)Nr )timersumr r r get_time_timersz(Profile.__init__..get_time_timerr)timingscurcmd c_func_namebiastimeZ process_timerget_timetrace_dispatch_i dispatcherlen TypeErrortrace_dispatchtrace_dispatch_lrt simulate_call)rrr#r,Zlengthrr r r r s0    zProfile.__init__cCs|j}|}|d|d|j|j}|dkr8|j|_|j||||rd|}|d|d|_n|}|d|d||_dS)Nrrc_call)rr,r#rr"dispatch)rframeeventargrr,rr r r r*szProfile.trace_dispatchcCsT|j}||j|j}|dkr(|j|_|j||||rD||_n |||_dS)Nr.)rr,r#rr"r/)rr0r1r2rr,r r r r&s zProfile.trace_dispatch_icCs`|j}|d|j|j}|dkr,|j|_|j||||rL|d|_n|d||_dS)NgN@r.)rr,r#rr"r/)rr0r1r2rr,r r r trace_dispatch_macszProfile.trace_dispatch_maccCsT|j}||j|j}|dkr(|j|_|j||||rD||_n |||_dS)Nr.)r%r,r#rr"r/)rr0r1r2r%r,r r r r+s zProfile.trace_dispatch_lc CsD|j\}}}}}}||k r*|r*|j||S|||||||f|_dS)Nr)r trace_dispatch_return) rr0r,rptritretrfnrframercurr r r trace_dispatch_exceptions   z Profile.trace_dispatch_exceptioncCs|jr@|j|jdk r@|j\}}}}}}t|tjs@|j|d|j} | j| j| j f} |dd| ||jf|_|j } | | kr| | \} } }}}| | d|||f| | <nddddif| | <dS)Nrrr) r f_back isinstancer fake_framer5f_code co_filenameco_firstlinenoco_namer)rr0r,r6r7r8r9r:r;Zfcodefnrccnsttctcallersr r r trace_dispatch_calls  zProfile.trace_dispatch_callc Csndd|jf}|dd|||jf|_|j}||krX||\}}}}} ||d||| f||<nddddif||<dS)Nrrr)r"r r) rr0r,rErrFrGrHrIrJr r r trace_dispatch_c_calls zProfile.trace_dispatch_c_callcCs||jdk r |j|jdd|j\}}}}}}||}||}|\} } } } } }| | || || | |f|_|j}||\}}}}}|s||}|d}| |kr|| d|| <nd|| <||d||||f||<dS)Nrrrr=r=)r r5r)rr0r,r6r7r8r9r;Z frame_totalZpptZpitZpetZpfnpframeZpcurrrFrGrHrIrJr r r r5#s"zProfile.trace_dispatch_return)callZ exceptionreturnr.Z c_exceptionZc_returncCs"|jdrdS||_|j|dS)Nr)r r!r-)rr!r r r set_cmdYs zProfile.set_cmdc@seZdZddZddZdS)zProfile.fake_codecCs||_||_||_d|_dS)Nr)rBco_linerDrC)rrlinenamer r r r _szProfile.fake_code.__init__cCst|j|j|jfS)N)reprrBrRrD)rr r r __repr__eszProfile.fake_code.__repr__N)rrrr rVr r r r fake_code^srWc@seZdZddZdS)zProfile.fake_framecCs||_||_dS)N)rAr>)rcodeZpriorr r r r iszProfile.fake_frame.__init__N)rrrr r r r r r@hsr@cCsF|jdd|}|jr |jd}nd}|j||}|jd||ddS)NZprofilerrrNr=)rWr r@r/)rrTrXrMr0r r r r-ms   zProfile.simulate_callcCsN|j}||j}x*|jdr<|jd||jd|d}qW|||_dS)NrrOrrrPr=)r%r,r r/)rr%r,r r r simulate_cmd_completeys   zProfile.simulate_cmd_completercCs$ddl}|j|jj|jdS)Nr)pstatsZStatsZ strip_dirsZ sort_statsr)rrrZr r r rszProfile.print_statsc Cs0t|d}|jtj|j|WdQRXdS)Nwb)open create_statsmarshaldumpstats)rfilefr r r rs zProfile.dump_statscCs|j|jdS)N)rYsnapshot_stats)rr r r r]szProfile.create_statsc Csfi|_xZ|jjD]L\}\}}}}}|j}d}x|jD] }||7}q:W|||||f|j|<qWdS)Nr)r`ritemscopyvalues) rfuncrFrGrHrIrJZncZcallcntr r r rcs zProfile.snapshot_statscCsddl}|j}|j|||S)Nr)__main____dict__r)rr!rhdictr r r rsz Profile.runc Cs8|j|tj|jzt|||WdtjdX|S)N)rQsys setprofiler'exec)rr!rrr r r rs    zProfile.runctxc Os6|jt|tj|jz |||StjdXdS)N)rQrUrkrlr')rrgargskwr r r runcalls   zProfile.runcallc Cs8|jtk rtd|j}d|_z |j||S||_XdS)Nz&Subclasses must override .calibrate().r) __class__rr)r#_calibrate_inner)rmverboseZ saved_biasr r r calibrates  zProfile.calibratecCs$|j}dd}|fdd}|||}|||}||}|rLtd|t} |}| jdtt|}||} |rtd| d} d} x>| jjD]0\\} }}\}}}}}|dkr| |7} | |7} qW|rtd | td | | |d krtd| | |d| }|r td||S)NcSsxt|D]}d}q WdS)Nr)range)nixr r r f1sz$Profile._calibrate_inner..f1cSsxt|D] }|dq WdS)Nd)rv)rsrzrxr r r rbsz#Profile._calibrate_inner..fz elapsed time without profiling =zf(m)zelapsed time with profiling =grbrzz!'CPU seconds' profiler reported =ztotal # calls =rz internal error: total calls = %dg@z+mean stopwatch overhead per profile event =)rbrz) r%printrrrrrrd ValueError)rrsrtr%rzrbZt0Zt1Zelapsed_noprofilepZelapsed_profileZ total_callsZ reported_timerrSfuncnamerFrGrHrIrJZmeanr r r rrsB   "     zProfile._calibrate_inner)NNrP)rP)r)rrrr#r r*r&r4r+r<rKrLr5r/rQrWr@r-rYrrr]rcrrrprurrr r r r rhs<' ' '      1 c Csd}t|d}d|_|jdddddd|jd d d d ddtjd ds\|jtjd|j\}}|tjdd<t|dkr|d}tj j dt j j |t |d}t|j|d}WdQRX|dddd}t||d|j|jn|j|S)Nz?profile.py [-o output_file_path] [-s sort] scriptfile [arg] ...)usageFz-oz --outfileoutfilezSave stats to )desthelpdefaultz-sz--sortrz?Sort order when printing to stdout, based on pstats.Stats classrrrrbrmrh)__file__r __package__ __cached__rP)rZallow_interspersed_argsZ add_optionrkargvZ print_usageexit parse_argsr(pathinsertosdirnamer\compilereadrrr)rparserZoptionsrnZprognamefprXZglobsr r r main*s2        rrhrP)NrPrP)NrP) rkrr$r^Zoptparser__all__rrrrrrr r r r s  ' E"