@@ -84,11 +84,11 @@ _.extend(RendererPool.prototype, {
8484 return renderer ;
8585 } ,
8686
87- _replaceRenderer : function ( renderer , config ) {
88- var id = renderer . poolId ;
89- renderer . dispose ( ) ;
87+ _replaceRenderer : function ( oldToken , config ) {
88+ var id = oldToken . poolId ;
89+ oldToken . dispose ( ) ;
9090 this . numCreated -- ;
91- renderer = this . _createRenderer ( config ) ;
91+ var renderer = this . _createRenderer ( config ) ;
9292 renderer . poolId = id ;
9393 return renderer ;
9494 } ,
@@ -99,45 +99,48 @@ _.extend(RendererPool.prototype, {
9999 console . debug ( 'RendererPool.acquiring...' ) ;
100100
101101 if ( this . freePool . length ( ) > 0 ) {
102-
103- renderer = this . freePool . pop ( config ) ;
104- if ( renderer ) {
105- renderer = renderer . renderer ;
106- }
107- if ( ! renderer ) {
108- var oldRenderer = this . freePool . shift ( ) ;
109- renderer = this . _replaceRenderer ( oldRenderer , config ) ;
102+ // We have one or more free renderers
103+ // (previously used renderers that have been released)
104+
105+ var freeToken = this . freePool . pop ( config ) ;
106+ if ( freeToken ) {
107+ // We have a free renderer with the correct config
108+ renderer = freeToken . renderer ;
109+ } else {
110+ // We need to replace one of the free renderers to get
111+ // the right config:
112+ freeToken = this . freePool . shift ( ) ;
113+ renderer = this . _replaceRenderer ( freeToken , config ) ;
110114 }
111115
112116 } else if ( this . numCreated < MAX_RENDERERS ) {
113117
118+ // We have not yet reached max capacity, create a new renderer:
114119 renderer = this . _createRenderer ( config ) ;
115120
116121 } else {
117122
118123 // reclaim token
119- var claimedRenderer = this . claimedPool . pop ( config ) ;
120- var recreate = claimedRenderer === null ;
124+ var claimedToken = this . claimedPool . pop ( config ) ;
125+ var recreate = claimedToken === null ;
121126 if ( recreate ) {
122- claimedRenderer = this . claimedPool . shift ( ) ;
127+ claimedToken = this . claimedPool . shift ( ) ;
123128 }
124- renderer = claimedRenderer . renderer ;
129+ renderer = claimedToken . renderer ;
125130 try {
126- claimedRenderer . onReclaim ( ) ;
131+ claimedToken . onReclaim ( ) ;
127132 } catch ( e ) {
128133 // Ensure we do not lose the renderer:
129- this . freePool . push ( renderer ) ;
134+ this . freePool . push ( null , renderer ) ;
130135 throw e ;
131136 }
132137 // Recreate renderer if no appropriate config:
133138 if ( recreate ) {
134- renderer = this . _replaceRenderer ( renderer , config ) ;
139+ renderer = this . _replaceRenderer ( claimedToken , config ) ;
135140 }
136141
137142 }
138143
139- // Ensure aliasing state matches, or remake
140-
141144 console . debug ( 'RendererPool.acquire(id=' + renderer . poolId + ')' ) ;
142145 this . claimedPool . push ( config , makeRendererClaimToken ( renderer , onReclaim ) ) ;
143146 renderer . clear ( ) ;
0 commit comments