X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/profiler/ProfilerSectionOnly.php diff --git a/includes/profiler/ProfilerSectionOnly.php b/includes/profiler/ProfilerSectionOnly.php new file mode 100644 index 00000000..41260a83 --- /dev/null +++ b/includes/profiler/ProfilerSectionOnly.php @@ -0,0 +1,103 @@ +sprofiler = new SectionProfiler(); + } + + public function scopedProfileIn( $section ) { + return $this->sprofiler->scopedProfileIn( $section ); + } + + public function close() { + } + + public function getFunctionStats() { + return $this->sprofiler->getFunctionStats(); + } + + public function getOutput() { + return $this->getFunctionReport(); + } + + /** + * Get a report of profiled functions sorted by inclusive wall clock time + * in descending order. + * + * Each line of the report includes this data: + * - Function name + * - Number of times function was called + * - Total wall clock time spent in function in microseconds + * - Minimum wall clock time spent in function in microseconds + * - Average wall clock time spent in function in microseconds + * - Maximum wall clock time spent in function in microseconds + * - Percentage of total wall clock time spent in function + * - Total delta of memory usage from start to end of function in bytes + * + * @return string + */ + protected function getFunctionReport() { + $data = $this->getFunctionStats(); + usort( $data, function ( $a, $b ) { + if ( $a['real'] === $b['real'] ) { + return 0; + } + return ( $a['real'] > $b['real'] ) ? -1 : 1; // descending + } ); + + $width = 140; + $nameWidth = $width - 65; + $format = "%-{$nameWidth}s %6d %9d %9d %9d %9d %7.3f%% %9d"; + $out = []; + $out[] = sprintf( "%-{$nameWidth}s %6s %9s %9s %9s %9s %7s %9s", + 'Name', 'Calls', 'Total', 'Min', 'Each', 'Max', '%', 'Mem' + ); + foreach ( $data as $stats ) { + $out[] = sprintf( $format, + $stats['name'], + $stats['calls'], + $stats['real'] * 1000, + $stats['min_real'] * 1000, + $stats['real'] / $stats['calls'] * 1000, + $stats['max_real'] * 1000, + $stats['%real'], + $stats['memory'] + ); + } + return implode( "\n", $out ); + } +}