Disabled

' . ''; exit( 1 ); } $dbr = wfGetDB( DB_SLAVE ); if ( !$dbr->tableExists( 'profiling' ) ) { echo '

No profiling table exists, so we can\'t show you anything.

' . '

If you want to log profiling data, enable $wgProfiler[\'output\'] = \'db\'' . ' in your StartProfiler.php and run maintenance/update.php to' . ' create the profiling table.' . ''; exit( 1 ); } $expand = []; if ( isset( $_REQUEST['expand'] ) ) { foreach ( explode( ',', $_REQUEST['expand'] ) as $f ) { $expand[$f] = true; } } // @codingStandardsIgnoreStart class profile_point { // @codingStandardsIgnoreEnd public $name; public $count; public $time; public $children; public static $totaltime, $totalmemory, $totalcount; public function __construct( $name, $count, $time, $memory ) { $this->name = $name; $this->count = $count; $this->time = $time; $this->memory = $memory; $this->children = []; } public function add_child( $child ) { $this->children[] = $child; } public function display( $expand, $indent = 0.0 ) { usort( $this->children, 'compare_point' ); $ex = isset( $expand[$this->name()] ); $anchor = str_replace( '"', '', $this->name() ); if ( !$ex ) { if ( count( $this->children ) ) { $url = getEscapedProfileUrl( false, false, $expand + [ $this->name() => true ] ); $extet = " [+]"; } else { $extet = ''; } } else { $e = []; foreach ( $expand as $name => $ep ) { if ( $name != $this->name() ) { $e += [ $name => $ep ]; } } $url = getEscapedProfileUrl( false, false, $e ); $extet = " [–]"; } ?>

name() ) ) . $extet ?>
time() / self::$totaltime * 100 ); ?> memory() / self::$totalmemory * 100 ); ?> count(); ?> callsPerRequest() ), 2 ); ?> timePerCall() ), 2 ); ?> memoryPerCall() / 1024 ), 2 ); ?> time() / self::$totalcount ), 2 ); ?> memory() / self::$totalcount / 1024 ), 2 ); ?> children as $child ) { $child->display( $expand, $indent + 2 ); } } } public function name() { return $this->name; } public function count() { return $this->count; } public function time() { return $this->time; } public function memory() { return $this->memory; } public function timePerCall() { // @codingStandardsIgnoreStart return @( $this->time / $this->count ); // @codingStandardsIgnoreEnd } public function memoryPerCall() { // @codingStandardsIgnoreStart return @( $this->memory / $this->count ); // @codingStandardsIgnoreEnd } public function callsPerRequest() { // @codingStandardsIgnoreStart return @( $this->count / self::$totalcount ); // @codingStandardsIgnoreEnd } public function timePerRequest() { // @codingStandardsIgnoreStart return @( $this->time / self::$totalcount ); // @codingStandardsIgnoreEnd } public function memoryPerRequest() { // @codingStandardsIgnoreStart return @( $this->memory / self::$totalcount ); // @codingStandardsIgnoreEnd } public function fmttime() { return sprintf( '%5.02f', $this->time ); } }; function compare_point( profile_point $a, profile_point $b ) { // @codingStandardsIgnoreStart global $sort; // @codingStandardsIgnoreEnd switch ( $sort ) { case 'name': return strcmp( $a->name(), $b->name() ); case 'time': return $a->time() > $b->time() ? -1 : 1; case 'memory': return $a->memory() > $b->memory() ? -1 : 1; case 'count': return $a->count() > $b->count() ? -1 : 1; case 'time_per_call': return $a->timePerCall() > $b->timePerCall() ? -1 : 1; case 'memory_per_call': return $a->memoryPerCall() > $b->memoryPerCall() ? -1 : 1; case 'calls_per_req': return $a->callsPerRequest() > $b->callsPerRequest() ? -1 : 1; case 'time_per_req': return $a->timePerRequest() > $b->timePerRequest() ? -1 : 1; case 'memory_per_req': return $a->memoryPerRequest() > $b->memoryPerRequest() ? -1 : 1; } } $sorts = [ 'time', 'memory', 'count', 'calls_per_req', 'name', 'time_per_call', 'memory_per_call', 'time_per_req', 'memory_per_req' ]; $sort = 'time'; if ( isset( $_REQUEST['sort'] ) && in_array( $_REQUEST['sort'], $sorts ) ) { $sort = $_REQUEST['sort']; } $res = $dbr->select( 'profiling', '*', [], 'profileinfo.php', [ 'ORDER BY' => 'pf_name ASC' ] ); if ( isset( $_REQUEST['filter'] ) ) { $filter = $_REQUEST['filter']; } else { $filter = ''; } ?>

">

$_filter ? $_filter : $filter, 'sort' => $_sort ? $_sort : $sort, 'expand' => implode( ',', array_keys( $_expand ) ) ] ) ); } $points = []; $queries = []; $sqltotal = 0.0; $last = false; foreach ( $res as $o ) { $next = new profile_point( $o->pf_name, $o->pf_count, $o->pf_time, $o->pf_memory ); if ( $next->name() == '-total' || $next->name() == 'main()' ) { profile_point::$totaltime = $next->time(); profile_point::$totalcount = $next->count(); profile_point::$totalmemory = $next->memory(); } if ( $last !== false ) { if ( preg_match( '/^' . preg_quote( $last->name(), '/' ) . '/', $next->name() ) ) { $last->add_child( $next ); continue; } } $last = $next; if ( preg_match( '/^query: /', $next->name() ) || preg_match( '/^query-m: /', $next->name() ) ) { $sqltotal += $next->time(); $queries[] = $next; } else { $points[] = $next; } } $s = new profile_point( 'SQL Queries', 0, $sqltotal, 0, 0 ); foreach ( $queries as $q ) { $s->add_child( $q ); } $points[] = $s; // @codingStandardsIgnoreStart @usort( $points, 'compare_point' ); // @codingStandardsIgnoreEnd foreach ( $points as $point ) { if ( strlen( $filter ) && !strstr( $point->name(), $filter ) ) { continue; } $point->display( $expand ); } ?>
Name Time (%) Memory (%) Count Calls/req ms/call kb/call ms/req kb/req

Total time:

Total memory: