code: function() {
          if (!this.locked) {
              var height = this.root.height;
              var width = this.root.width;
              this.canvas.clearRect(0, 0, width, height);
              if (this.hitDetection) {
                  this.hitContext.clearRect(0, 0, width, height);
              }
              var labelMap = [];
              var feature, geometry, style;
              var worldBounds = (this.map.baseLayer && this.map.baseLayer.wrapDateLine) && this.map.getMaxExtent();
              for (var id in this.features) {
                  if (!this.features.hasOwnProperty(id)) { continue; }
                  feature = this.features[id][0];
                  geometry = feature.geometry;
                  this.calculateFeatureDx(geometry.getBounds(), worldBounds);
                  style = this.features[id][1];
                  this.drawGeometry(geometry, style, feature.id);
                  if(style.label) {
                      labelMap.push([feature, style]);
                  }
              }
              var item;
              for (var i=0, len=labelMap.length; i<len; ++i) {
                  item = labelMap[i];
                  this.drawText(item[0].geometry.getCentroid(), item[1]);
              }
          }    
      }
docs: Method: redraw
  The real 'meat' of the function: any time things have changed,
  redraw() can be called to loop over all the data and (you guessed
  it) redraw it.  Unlike Elements-based Renderers, we can't interact
  with things once they're drawn, to remove them, for example, so
  instead we have to just clear everything and draw from scratch.