Server IP : 103.119.228.120 / Your IP : 18.119.213.36 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib64/tcl8.5/tclx8.4/ |
Upload File : |
# # profrep -- # # Generate Tcl profiling reports. #------------------------------------------------------------------------------ # Copyright 1992-1999 Karl Lehenbauer and Mark Diekhans. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, provided # that the above copyright notice appear in all copies. Karl Lehenbauer and # Mark Diekhans make no representations about the suitability of this # software for any purpose. It is provided "as is" without express or # implied warranty. #------------------------------------------------------------------------------ # $Id: profrep.tcl,v 1.1 2001/10/24 23:31:48 hobbs Exp $ #------------------------------------------------------------------------------ # #@package: TclX-profrep profrep namespace eval TclXProfRep { # # Convert the profile array from entries that have only the time spent in # the proc to the time spend in the proc and all it calls. # proc sum {inDataVar outDataVar} { upvar 1 $inDataVar inData $outDataVar outData foreach inStack [array names inData] { for {set idx 0} {![lempty [set part [lrange $inStack $idx end]]]} \ {incr idx} { if ![info exists outData($part)] { set outData($part) {0 0 0} } lassign $outData($part) count real cpu if {$idx == 0} { incr count [lindex $inData($inStack) 0] } incr real [lindex $inData($inStack) 1] incr cpu [lindex $inData($inStack) 2] set outData($part) [list $count $real $cpu] } } } # # Do sort comparison. May only be called by sort, as it address its # local variables. # proc sortcmp {key1 key2} { upvar profData profData keyIndex keyIndex set val1 [lindex $profData($key1) $keyIndex] set val2 [lindex $profData($key2) $keyIndex] if {$val1 < $val2} { return -1 } if {$val1 > $val2} { return 1 } return 0 } # # Generate a list, sorted in descending order by the specified key, contain # the indices into the summarized data. # proc sort {profDataVar sortKey} { upvar $profDataVar profData case $sortKey { {calls} {set keyIndex 0} {real} {set keyIndex 1} {cpu} {set keyIndex 2} default { error "Expected a sort type of: `calls', `cpu' or ` real'" } } return [lsort -integer -decreasing -command sortcmp \ [array names profData]] } # # Print the sorted report # proc print {profDataVar sortedProcList outFile userTitle} { upvar $profDataVar profData set maxNameLen 0 foreach procStack [array names profData] { foreach procName $procStack { set maxNameLen [max $maxNameLen [clength $procName]] } } if {$outFile == ""} { set outFH stdout } else { set outFH [open $outFile w] } # Output a header. set stackTitle "Procedure Call Stack" set maxNameLen [max [expr $maxNameLen+6] [expr [clength $stackTitle]+4]] set hdr [format "%-${maxNameLen}s %10s %10s %10s" $stackTitle \ "Calls" "Real Time" "CPU Time"] if {$userTitle != ""} { puts $outFH [replicate - [clength $hdr]] puts $outFH $userTitle } puts $outFH [replicate - [clength $hdr]] puts $outFH $hdr puts $outFH [replicate - [clength $hdr]] # Output the data in sorted order. Trim leading ::. foreach procStack $sortedProcList { set data $profData($procStack) set cmd [lvarpop procStack] regsub {^::} $cmd {} cmd puts $outFH [format "%-${maxNameLen}s %10d %10d %10d" \ $cmd [lindex $data 0] [lindex $data 1] \ [lindex $data 2]] foreach procName $procStack { if {$procName == "<global>"} break regsub {^::} $procName {} procName puts $outFH " $procName" } } if {$outFile != ""} { close $outFH } } } ;# TclXProfRep #------------------------------------------------------------------------------ # Generate a report from data collect from the profile command. # o profDataVar (I) - The name of the array containing the data from profile. # o sortKey (I) - Value to sort by. One of "calls", "cpu" or "real". # o outFile (I) - Name of file to write the report to. If omitted, stdout # is assumed. # o userTitle (I) - Title line to add to output. proc profrep {profDataVar sortKey {outFile {}} {userTitle {}}} { upvar $profDataVar profData TclXProfRep::sum profData sumProfData set sortedProcList [TclXProfRep::sort sumProfData $sortKey] TclXProfRep::print sumProfData $sortedProcList $outFile $userTitle }