@@ -84,11 +84,11 @@ _.extend(RendererPool.prototype, {
84
84
return renderer ;
85
85
} ,
86
86
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 ( ) ;
90
90
this . numCreated -- ;
91
- renderer = this . _createRenderer ( config ) ;
91
+ var renderer = this . _createRenderer ( config ) ;
92
92
renderer . poolId = id ;
93
93
return renderer ;
94
94
} ,
@@ -99,45 +99,48 @@ _.extend(RendererPool.prototype, {
99
99
console . debug ( 'RendererPool.acquiring...' ) ;
100
100
101
101
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 ) ;
110
114
}
111
115
112
116
} else if ( this . numCreated < MAX_RENDERERS ) {
113
117
118
+ // We have not yet reached max capacity, create a new renderer:
114
119
renderer = this . _createRenderer ( config ) ;
115
120
116
121
} else {
117
122
118
123
// 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 ;
121
126
if ( recreate ) {
122
- claimedRenderer = this . claimedPool . shift ( ) ;
127
+ claimedToken = this . claimedPool . shift ( ) ;
123
128
}
124
- renderer = claimedRenderer . renderer ;
129
+ renderer = claimedToken . renderer ;
125
130
try {
126
- claimedRenderer . onReclaim ( ) ;
131
+ claimedToken . onReclaim ( ) ;
127
132
} catch ( e ) {
128
133
// Ensure we do not lose the renderer:
129
- this . freePool . push ( renderer ) ;
134
+ this . freePool . push ( null , renderer ) ;
130
135
throw e ;
131
136
}
132
137
// Recreate renderer if no appropriate config:
133
138
if ( recreate ) {
134
- renderer = this . _replaceRenderer ( renderer , config ) ;
139
+ renderer = this . _replaceRenderer ( claimedToken , config ) ;
135
140
}
136
141
137
142
}
138
143
139
- // Ensure aliasing state matches, or remake
140
-
141
144
console . debug ( 'RendererPool.acquire(id=' + renderer . poolId + ')' ) ;
142
145
this . claimedPool . push ( config , makeRendererClaimToken ( renderer , onReclaim ) ) ;
143
146
renderer . clear ( ) ;
0 commit comments