aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--includes/filebackend/FileBackendGroup.php4
-rw-r--r--includes/libs/filebackend/FileBackend.php15
2 files changed, 10 insertions, 9 deletions
diff --git a/includes/filebackend/FileBackendGroup.php b/includes/filebackend/FileBackendGroup.php
index cbf9bff93fef..a09160827b28 100644
--- a/includes/filebackend/FileBackendGroup.php
+++ b/includes/filebackend/FileBackendGroup.php
@@ -189,7 +189,9 @@ class FileBackendGroup {
'wanCache' => MediaWikiServices::getInstance()->getMainWANObjectCache(),
'srvCache' => ObjectCache::getLocalServerInstance( 'hash' ),
'logger' => LoggerFactory::getInstance( 'FileOperation' ),
- 'profiler' => Profiler::instance()
+ 'profiler' => function ( $section ) {
+ return Profiler::instance()->scopedProfileIn( $section );
+ }
];
$config['lockManager'] =
LockManagerGroup::singleton( $config['wikiId'] )->get( $config['lockManager'] );
diff --git a/includes/libs/filebackend/FileBackend.php b/includes/libs/filebackend/FileBackend.php
index a80b6d0c0651..19373eaef94d 100644
--- a/includes/libs/filebackend/FileBackend.php
+++ b/includes/libs/filebackend/FileBackend.php
@@ -114,7 +114,7 @@ abstract class FileBackend implements LoggerAwareInterface {
protected $fileJournal;
/** @var LoggerInterface */
protected $logger;
- /** @var object|string Class name or object With profileIn/profileOut methods */
+ /** @var callable|null */
protected $profiler;
/** @var callable */
@@ -156,7 +156,8 @@ abstract class FileBackend implements LoggerAwareInterface {
* - obResetFunc : alternative callback to clear the output buffer
* - streamMimeFunc : alternative method to determine the content type from the path
* - logger : Optional PSR logger object.
- * - profiler : Optional class name or object With profileIn/profileOut methods.
+ * - profiler : Optional callback that takes a section name argument and returns
+ * a ScopedCallback instance that ends the profile section in its destructor.
* @throws InvalidArgumentException
*/
public function __construct( array $config ) {
@@ -187,6 +188,9 @@ abstract class FileBackend implements LoggerAwareInterface {
$this->statusWrapper = $config['statusWrapper'] ?? null;
$this->profiler = $config['profiler'] ?? null;
+ if ( !is_callable( $this->profiler ) ) {
+ $this->profiler = null;
+ }
$this->logger = $config['logger'] ?? new \Psr\Log\NullLogger();
$this->statusWrapper = $config['statusWrapper'] ?? null;
$this->tmpDirectory = $config['tmpDirectory'] ?? null;
@@ -1599,12 +1603,7 @@ abstract class FileBackend implements LoggerAwareInterface {
* @return ScopedCallback|null
*/
protected function scopedProfileSection( $section ) {
- if ( $this->profiler ) {
- call_user_func( [ $this->profiler, 'profileIn' ], $section );
- return new ScopedCallback( [ $this->profiler, 'profileOut' ], [ $section ] );
- }
-
- return null;
+ return $this->profiler ? ( $this->profiler )( $section ) : null;
}
protected function resetOutputBuffer() {