Aaron Schulz has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/175170

Change subject: Added custom frame support to Profiler
......................................................................

Added custom frame support to Profiler

* Made use of it in the DatabaseBase classes
* For the xhprof class, this only works in HHVM for now

Change-Id: I95d7cc128d4a770328fbdd2b546972d3fc2e2e8a
---
M includes/db/Database.php
M includes/profiler/Profiler.php
M includes/profiler/ProfilerStandard.php
M includes/profiler/ProfilerStub.php
M includes/profiler/ProfilerXhprof.php
5 files changed, 51 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/70/175170/1

diff --git a/includes/db/Database.php b/includes/db/Database.php
index e5332d2..a8ecdc4 100644
--- a/includes/db/Database.php
+++ b/includes/db/Database.php
@@ -962,7 +962,8 @@
                $totalProf = '';
                $isMaster = !is_null( $this->getLBInfo( 'master' ) );
 
-               if ( !Profiler::instance()->isStub() ) {
+               $profiler = Profiler::instance();
+               if ( !$profiler->isStub() ) {
                        # generalizeSQL will probably cut down the query to 
reasonable
                        # logging size most of the time. The substr is really 
just a sanity check.
                        if ( $isMaster ) {
@@ -976,8 +977,8 @@
                        $queryProf .= $this->mTrxShortId ? " 
[TRX#{$this->mTrxShortId}]" : "";
 
                        $trx = $this->mTrxLevel ? 'TRX=yes' : 'TRX=no';
-                       wfProfileIn( $totalProf );
-                       wfProfileIn( $queryProf );
+                       $totalProfSection = $profiler->scopedProfileIn( 
$totalProf );
+                       $queryProfSection = $profiler->scopedProfileIn( 
$queryProf );
                }
 
                if ( $this->debug() ) {
diff --git a/includes/profiler/Profiler.php b/includes/profiler/Profiler.php
index 2b3b616..9650ff5 100644
--- a/includes/profiler/Profiler.php
+++ b/includes/profiler/Profiler.php
@@ -140,6 +140,23 @@
        abstract public function profileOut( $functionname );
 
        /**
+        * Mark the start of a custom profiling frame (e.g. DB queries).
+        * The frame ends when the result of this method falls out of scope.
+        *
+        * @param string $section
+        * @return ScopedCallback|null
+        * @since 1.25
+        */
+       abstract public function scopedProfileIn( $section );
+
+       /**
+        * @param ScopedCallback $section
+        */
+       public function scopedProfileOut( ScopedCallback &$section ) {
+               $section = null;
+       }
+
+       /**
         * @return TransactionProfiler
         * @since 1.25
         */
diff --git a/includes/profiler/ProfilerStandard.php 
b/includes/profiler/ProfilerStandard.php
index 15c5cdd..ab5e3ab 100644
--- a/includes/profiler/ProfilerStandard.php
+++ b/includes/profiler/ProfilerStandard.php
@@ -227,6 +227,15 @@
                }
        }
 
+       public function scopedProfileIn( $section ) {
+               $this->profileIn( $section );
+
+               $that = $this;
+               return new ScopedCallback( function() use ( $that, $section ) {
+                       $that->profileOut( $section );
+               } );
+       }
+
        /**
         * Close opened profiling sections
         */
diff --git a/includes/profiler/ProfilerStub.php 
b/includes/profiler/ProfilerStub.php
index 510a0a0..6fc74ef 100644
--- a/includes/profiler/ProfilerStub.php
+++ b/includes/profiler/ProfilerStub.php
@@ -37,6 +37,10 @@
        public function profileOut( $fn ) {
        }
 
+       public function scopedProfileIn( $section ) {
+               return null;
+       }
+
        public function getFunctionStats() {
        }
 
diff --git a/includes/profiler/ProfilerXhprof.php 
b/includes/profiler/ProfilerXhprof.php
index d67806b..cbd081d 100644
--- a/includes/profiler/ProfilerXhprof.php
+++ b/includes/profiler/ProfilerXhprof.php
@@ -122,6 +122,23 @@
        public function profileOut( $functionname ) {
        }
 
+       public function scopedProfileIn( $section ) {
+               static $exists = null;
+               // Only HHVM supports this, not the standard PECL extension
+               if ( $exists === null ) {
+                       $exists = function_exists( 'xhprof_frame_begin' );
+               }
+
+               if ( $exists ) {
+                       xhprof_frame_begin( $section );
+                       return new ScopedCallback( function() use ( $section ) {
+                               xhprof_frame_end( $section );
+                       } );
+               }
+
+               return null;
+       }
+
        /**
         * No-op for xhprof profiling.
         */

-- 
To view, visit https://gerrit.wikimedia.org/r/175170
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I95d7cc128d4a770328fbdd2b546972d3fc2e2e8a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to