code: function calcCharAdvance(char, fontSize, font, unitsPerEm) {
    return isOpenTypeJsReliable(fontSize, font, unitsPerEm) ?
      calcCharAdvanceOpenType(char, fontSize, font, unitsPerEm) :
      calcTextAdvanceCanvas(char, fontSize, font)
  }
docs: Calculate the advance in pixels for a given char. In some browsers/platforms/font sizes, the fonts are not
  rendered according to the specs in the font (see
  http://stackoverflow.com/questions/30922573/firefox-rendering-of-opentype-font-does-not-match-the-font-specification).
  Therefore, ensure the font spec matches the actual rendered width (via the canvas `measureText` method), and use
  the font spec if it matches, otherwise fall back to the (slower) measuredText option.
  
  NOTE there may still be one difference between the browser's rendering and canvas-based calculations here: the
  browser renders entire strings within elements, whereas this calculation renders one character to the canvas at
  a time and adds up the widths. These two approaches seem to be equivalent except for IE in compatibility mode.
  
  TODO refactor mixin to deal with chunks of styled text rather than chars for IE in compatibility mode