From de53d90568038304b3a245bfc737c830e4e30c48 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Sat, 3 Dec 2016 19:31:37 -0800 Subject: [PATCH] profiler: Support tideways for PHP7 profiling xhprof does not support PHP7, and it doesn't seem like upstream will be working on that any time soon. Tideways is a profiler that is basically a drop-in replacement for xhprof with functions renamed. So Xhprof::enable() and Xhprof::disable() will now try to use tideways if that is installed and xhprof is not. Bug: T152186 Change-Id: I0d7d2de56ac638ca2851c662f527049bd620c0e9 --- includes/libs/Xhprof.php | 21 ++++++++++++++++++--- includes/profiler/ProfilerXhprof.php | 5 +++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/includes/libs/Xhprof.php b/includes/libs/Xhprof.php index 9c1ec8eb01..016c9b1574 100644 --- a/includes/libs/Xhprof.php +++ b/includes/libs/Xhprof.php @@ -23,6 +23,10 @@ * . XHProf can be installed as a PECL * package for use with PHP5 (Zend PHP) and is built-in to HHVM 3.3.0. * + * This also supports using the Tideways profiler + * , which additionally + * has support for PHP7. + * * @since 1.28 */ class Xhprof { @@ -43,10 +47,16 @@ class Xhprof { */ public static function enable( $flags = 0, $options = [] ) { if ( self::isEnabled() ) { - throw new Exception( 'Xhprof profiling is already enabled.' ); + throw new Exception( 'Profiling is already enabled.' ); } self::$enabled = true; - xhprof_enable( $flags, $options ); + if ( function_exists( 'xhprof_enable' ) ) { + xhprof_enable( $flags, $options ); + } elseif ( function_exists( 'tideways_enable' ) ) { + tideways_enable( $flags, $options ); + } else { + throw new Exception( "Neither xhprof nor tideways are installed" ); + } } /** @@ -57,7 +67,12 @@ class Xhprof { public static function disable() { if ( self::isEnabled() ) { self::$enabled = false; - return xhprof_disable(); + if ( function_exists( 'xhprof_disable' ) ) { + return xhprof_disable(); + } else { + // tideways + return tideways_disable(); + } } } } diff --git a/includes/profiler/ProfilerXhprof.php b/includes/profiler/ProfilerXhprof.php index 8fc0b778da..1bf4f54583 100644 --- a/includes/profiler/ProfilerXhprof.php +++ b/includes/profiler/ProfilerXhprof.php @@ -43,12 +43,17 @@ * ($wgProfiler['exclude']) containing an array of function names. * Shell-style patterns are also accepted. * + * It is also possible to use the Tideways PHP extension, which is mostly + * a drop-in replacement for Xhprof. Just change the XHPROF_FLAGS_* constants + * to TIDEWAYS_FLAGS_*. + * * @author Bryan Davis * @copyright © 2014 Bryan Davis and Wikimedia Foundation. * @ingroup Profiler * @see Xhprof * @see https://php.net/xhprof * @see https://github.com/facebook/hhvm/blob/master/hphp/doc/profiling.md + * @see https://github.com/tideways/php-profiler-extension */ class ProfilerXhprof extends Profiler { /** -- 2.20.1