Skip to content

Commit

Permalink
Avoid creating intermediate strings in sanitizeMetrics
Browse files Browse the repository at this point in the history
This patch avoids creating many intermediate strings, when adding dummy width/lsb entries for glyphs where those are missing.
For the relevant PDF files in our test suite, the average number of intermediate strings are well over 1000.
  • Loading branch information
Snuffleupagus committed Aug 20, 2014
1 parent b4fb1e2 commit ae896fc
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions src/core/fonts.js
Original file line number Diff line number Diff line change
Expand Up @@ -3297,16 +3297,12 @@ var Font = (function FontClosure() {
var numMissing = numOfSidebearings -
((metrics.length - numOfMetrics * 4) >> 1);

var i, ii;
if (numMissing > 0) {
font.pos = (font.start ? font.start : 0) + metrics.offset;
var entries = '';
for (i = 0, ii = metrics.length; i < ii; i++) {
entries += String.fromCharCode(font.getByte());
}
for (i = 0; i < numMissing; i++) {
entries += '\x00\x00';
}
// For each missing glyph, we set both the width and lsb to 0 (zero).
// Since we need to add two properties for each glyph, this explains
// the use of |numMissing * 2| when initializing the typed array.
var entries = new Uint8Array(metrics.length + numMissing * 2);
entries.set(metrics.data);
metrics.data = entries;
}
}
Expand Down

0 comments on commit ae896fc

Please sign in to comment.