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

Change subject: Created an AccumChain obj to use in AsyncTTM transformTokens 
loop.
......................................................................


Created an AccumChain obj to use in AsyncTTM transformTokens loop.

* Used to be a var with a bunch of properties and functions
  that was treated like a singleton, but constructed each
  time through the transformTokens loop.

* Not sure if this is better/faster.  To be tested.

* No change in parser tests results.

Change-Id: I07ea407bea9850f0818169eb622d21ec6ceb60fa
---
M js/lib/mediawiki.TokenTransformManager.js
1 file changed, 68 insertions(+), 63 deletions(-)

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



diff --git a/js/lib/mediawiki.TokenTransformManager.js 
b/js/lib/mediawiki.TokenTransformManager.js
index 1003e2c..b1f5bca 100644
--- a/js/lib/mediawiki.TokenTransformManager.js
+++ b/js/lib/mediawiki.TokenTransformManager.js
@@ -443,6 +443,72 @@
 // all instances of the Async TTM.
 AsyncTokenTransformManager.prototype._counter = 0;
 
+function AccumChain(ttm, parentCB) {
+       this.ttm = ttm;
+       this.firstAccum = null;
+       this.accum = null;
+       this.next = null;
+       this.maybeAsyncCB = null;
+       this.numNodes = 0;
+       this.debugId = 0;
+
+       // Shared accum-chain state accessible to synchronous transforms in 
maybeSyncReturn
+       this.state = {
+               // Indicates we are still in the transformTokens loop
+               transforming: true,
+               // debug id for this expansion
+               c: 'c-' + AsyncTokenTransformManager.prototype._counter++
+       };
+
+       this.init(parentCB);
+}
+
+AccumChain.prototype = {
+       makeNextAccum: function(cb) {
+               var cbs = { };
+               var maybeAsyncCB = this.ttm.maybeSyncReturn.bind( this.ttm, 
this.state, cbs );
+
+               // The new accumulator is never used unless we hit async mode.
+               // Even though maybeAsyncCB references newAccum via 
cbs.parentCB,
+               // that code path is exercised only when async mode is entered,
+               // so we are all good on that front.
+               var newAccum = new TokenAccumulator( this.ttm, cb );
+               // 'newAccum' will receive tokens from a child pipeline/cb
+               cbs.parentCB = newAccum.receiveToksFromChild.bind(newAccum);
+               cbs.self = maybeAsyncCB;
+
+               return { accum: newAccum, cb: maybeAsyncCB };
+       },
+       init: function(parentCB) {
+               // Local accum for synchronously returned fully processed tokens
+               // Make localAccum compatible with receiveToksFromSibling
+               var localAccum = [];
+               localAccum.receiveToksFromSibling = function() { return 
parentCB; };
+
+               this.firstAccum = localAccum;
+               this.accum = localAccum;
+               var nextAccumAndCB = this.makeNextAccum( parentCB );
+               this.next = nextAccumAndCB.accum;
+               this.maybeAsyncCB = nextAccumAndCB.cb;
+               this.numNodes = 1;
+       },
+       initRes: function() {
+               this.state.res = {};
+       },
+       addNode: function() {
+               // console.warn("--> ATT-" + this.ttm.uid + " new link in 
chain");
+               this.accum = this.next;
+               // 'accum' will receive toks from the 'next' node that will be 
created
+               var nextAccumAndCB = this.makeNextAccum( 
this.accum.receiveToksFromSibling.bind(this.accum) );
+               this.next = nextAccumAndCB.accum;
+               this.maybeAsyncCB = nextAccumAndCB.cb;
+               this.numNodes++;
+       },
+       push: function(tok) {
+               this.accum.push(tok);
+       }
+};
+
 /**
  * Run asynchronous transformations. This is the big workhorse where
  * templates, images, links and other async expansions (see the transform
@@ -464,69 +530,8 @@
 
        //console.warn('AsyncTokenTransformManager.transformTokens: ' + 
JSON.stringify(tokens) );
 
-       var accumChain = {
-               ttm: null,
-               firstAccum: null,
-               accum: null,
-               next: null,
-               maybeAsyncCB: null,
-               numNodes: 0,
-               debugId: 0,
-               // Shared accum-chain state accessible to synchronous 
transforms in maybeSyncReturn
-               state: {
-                       // Indicates we are still in the transformTokens loop
-                       transforming: true,
-                       // debug id for this expansion
-                       c: 'c-' + 
AsyncTokenTransformManager.prototype._counter++
-               },
-               makeNextAccum: function(cb) {
-                       var cbs = { };
-                       var maybeAsyncCB = this.ttm.maybeSyncReturn.bind( 
this.ttm, this.state, cbs );
-
-                       // The new accumulator is never used unless we hit 
async mode.
-                       // Even though maybeAsyncCB references newAccum via 
cbs.parentCB,
-                       // that code path is exercised only when async mode is 
entered,
-                       // so we are all good on that front.
-                       var newAccum = new TokenAccumulator( this.ttm, cb );
-                       // 'newAccum' will receive tokens from a child 
pipeline/cb
-                       cbs.parentCB = 
newAccum.receiveToksFromChild.bind(newAccum);
-                       cbs.self = maybeAsyncCB;
-
-                       return { accum: newAccum, cb: maybeAsyncCB };
-               },
-               init: function(ttm) {
-                       // Local accum for synchronously returned fully 
processed tokens
-                       // Make localAccum compatible with 
receiveToksFromSibling
-                       var localAccum = [];
-                       localAccum.receiveToksFromSibling = function() { return 
parentCB; };
-
-                       this.ttm = ttm;
-                       this.firstAccum = localAccum;
-                       this.accum = localAccum;
-                       var nextAccumAndCB = this.makeNextAccum( parentCB );
-                       this.next = nextAccumAndCB.accum;
-                       this.maybeAsyncCB = nextAccumAndCB.cb;
-                       this.numNodes = 1;
-               },
-               initRes: function() {
-                       this.state.res = {};
-               },
-               addNode: function() {
-                       // console.warn("--> ATT-" + this.ttm.uid + " new link 
in chain");
-                       this.accum = this.next;
-                       // 'accum' will receive toks from the 'next' node that 
will be created
-                       var nextAccumAndCB = this.makeNextAccum( 
this.accum.receiveToksFromSibling.bind(this.accum) );
-                       this.next = nextAccumAndCB.accum;
-                       this.maybeAsyncCB = nextAccumAndCB.cb;
-                       this.numNodes++;
-               },
-               push: function(tok) {
-                       this.accum.push(tok);
-               }
-       };
-
-       // Init
-       accumChain.init(this);
+       // New accumulator chain
+       var accumChain = new AccumChain(this, parentCB);
 
        // Stack of token arrays to process
        // Initialize to the token array that was passed in

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I07ea407bea9850f0818169eb622d21ec6ceb60fa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: GWicke <gwi...@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