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