jenkins-bot has submitted this change and it was merged.

Change subject: Trace time spent in SyncTTM & AsyncTTM machinery
......................................................................


Trace time spent in SyncTTM & AsyncTTM machinery

* Time spent in Sync TTM machinery is more or less completely
  captured.

* Time spent in Aysnc TTM machinery is only partially captured
  because there are lot of callbacks that makes it difficult to
  track down. Right now, time spent in transformTokens (and any
  associated code) is accounted for.

Change-Id: Ifa2757feaf8b028f56ed67fa95871123fe11da46
---
M lib/wt2html/TokenTransformManager.js
1 file changed, 31 insertions(+), 4 deletions(-)

Approvals:
  Arlolra: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/wt2html/TokenTransformManager.js 
b/lib/wt2html/TokenTransformManager.js
index 3671885..c1e476d 100644
--- a/lib/wt2html/TokenTransformManager.js
+++ b/lib/wt2html/TokenTransformManager.js
@@ -117,10 +117,13 @@
 // from holding onto more state than necessary.
 TokenTransformManager.prototype.timeTracer = function(transform, traceName) {
        var env = this.env;
+       var self = this;
        return function() {
                var s = new Date();
                var ret = transform.apply(null, arguments);
-               env.bumpTimeUse(traceName, (new Date()) - s);
+               var t = new Date() - s;
+               env.bumpTimeUse(traceName, t);
+               self.lastTokenTime = t;
                return ret;
        };
 };
@@ -150,7 +153,8 @@
  */
 TokenTransformManager.prototype.addTransform = function(transformation, 
debugName, rank, type, name) {
        var traceFlags = this.env.conf.parsoid.traceFlags;
-       if (traceFlags && (traceFlags.indexOf("time") !== -1)) {
+       var traceTime = traceFlags && (traceFlags.indexOf("time") !== -1);
+       if (traceTime) {
                transformation = this.timeTracer(transformation, debugName);
        }
        var t = {
@@ -542,11 +546,16 @@
  *   The tail TokenAccumulator, or else null
  */
 AsyncTokenTransformManager.prototype.transformTokens = function(tokens, 
parentCB) {
-
        // Trivial case
        if (tokens.length === 0) {
                return { tokens: tokens, asyncAccum: null }; // jscs:ignore 
jsDoc
        }
+
+       // Time tracing related state
+       var startTime = new Date();
+       var traceFlags = this.env.conf.parsoid.traceFlags;
+       var traceTime = traceFlags && traceFlags.indexOf('time') !== -1;
+       var tokenTimes = 0;
 
        // New accumulator chain
        var accumChain = new AccumChain(this, parentCB);
@@ -615,6 +624,9 @@
                                // with tokens or with an async signal.  In 
either case,
                                // state tokens will be populated.
                                transformer.transform(token, this.frame, 
accumChain.maybeAsyncCB);
+                               if (traceTime) {
+                                       tokenTimes += this.lastTokenTime;
+                               }
 
                                res = accumChain.state.res;
                                resTokens = res.tokens;
@@ -718,6 +730,10 @@
                firstAccum
        );
 
+       if (traceTime) {
+               this.env.bumpTimeUse("AsyncTTM (Partial)", (new Date() - 
startTime - tokenTimes));
+       }
+
        // Return finished tokens directly to caller, and indicate if further
        // async actions are outstanding. The caller needs to point a sibling to
        // the returned accumulator, or call .siblingDone() to mark the end of a
@@ -739,7 +755,6 @@
  * @private
  */
 AsyncTokenTransformManager.prototype.maybeSyncReturn = function(s, cbs, ret) {
-
        // Null ret.tokens is okay since ret could just be an async signal
        ret = verifyTokensIntegrity(this.env, ret, true);
 
@@ -885,6 +900,12 @@
 
        var localAccum = [];
 
+       // Time tracing related state
+       var startTime = new Date();
+       var tokenTimes = 0;
+       var traceFlags = this.env.conf.parsoid.traceFlags;
+       var traceTime = traceFlags && traceFlags.indexOf('time') !== -1;
+
        // Stack of token arrays to process
        // Initialize to the token array that was passed in
        var workStack = [];
@@ -920,6 +941,9 @@
                        transformer = ts[j];
                        // Transform the token.
                        res = transformer.transform(token, this, 
this.prevToken);
+                       if (traceTime) {
+                               tokenTimes += this.lastTokenTime;
+                       }
                        j++;
                }
 
@@ -951,6 +975,9 @@
                }
        }
 
+       if (traceTime) {
+               this.env.bumpTimeUse("SyncTTM", (new Date() - startTime - 
tokenTimes));
+       }
        localAccum.rank = this.phaseEndRank;
        this.env.dp('SyncTokenTransformManager.onChunk: emitting ', localAccum);
        this.emit('chunk', localAccum);

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifa2757feaf8b028f56ed67fa95871123fe11da46
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: Arlolra <abrea...@wikimedia.org>
Gerrit-Reviewer: Cscott <canan...@wikimedia.org>
Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to