From: Aaron Schulz Date: Tue, 9 Dec 2014 07:44:00 +0000 (-0800) Subject: Made SectionProfiler cache the ScopedCallback closure to lower overhead X-Git-Tag: 1.31.0-rc.0~13024^2 X-Git-Url: http://git.cyclocoop.org/%22.htmlspecialchars%28%24url_syndic%29.%22?a=commitdiff_plain;h=2698d9803df209cb36059c6fed4ac5b9bf1a0051;p=lhc%2Fweb%2Fwiklou.git Made SectionProfiler cache the ScopedCallback closure to lower overhead Change-Id: Ia6f2ef4bb82dad13d49e74c730530295d5719009 --- diff --git a/includes/libs/ScopedCallback.php b/includes/libs/ScopedCallback.php index 631b6519fe..629c26907c 100644 --- a/includes/libs/ScopedCallback.php +++ b/includes/libs/ScopedCallback.php @@ -28,16 +28,20 @@ class ScopedCallback { /** @var callable */ protected $callback; + /** @var array */ + protected $params; /** * @param callable $callback + * @param array $params Callback arguments (since 1.25) * @throws Exception */ - public function __construct( $callback ) { + public function __construct( $callback, array $params = array() ) { if ( !is_callable( $callback ) ) { throw new InvalidArgumentException( "Provided callback is not valid." ); } $this->callback = $callback; + $this->params = $params; } /** @@ -67,7 +71,7 @@ class ScopedCallback { */ function __destruct() { if ( $this->callback !== null ) { - call_user_func( $this->callback ); + call_user_func_array( $this->callback, $this->params ); } } } diff --git a/includes/profiler/SectionProfiler.php b/includes/profiler/SectionProfiler.php index 275e986e07..2c36b68c15 100644 --- a/includes/profiler/SectionProfiler.php +++ b/includes/profiler/SectionProfiler.php @@ -46,6 +46,8 @@ class SectionProfiler { protected $collateOnly = true; /** @var array Cache of a standard broken collation entry */ protected $errorEntry; + /** @var callable Cache of a profile out callback */ + protected $profileOutCallback; /** * @param array $params @@ -53,6 +55,9 @@ class SectionProfiler { public function __construct( array $params = array() ) { $this->errorEntry = $this->getErrorEntry(); $this->collateOnly = empty( $params['trace'] ); + $this->profileOutCallback = function ( $profiler, $section ) { + $profiler->profileOutInternal( $section ); + }; } /** @@ -63,9 +68,7 @@ class SectionProfiler { $this->profileInInternal( $section ); $that = $this; - return new ScopedCallback( function () use ( $that, $section ) { - $that->profileOutInternal( $section ); - } ); + return new ScopedCallback( $this->profileOutCallback, array( $that, $section ) ); } /**