Remove the Glyph.matchesForCache method (PR 13494 follow-up)

This method, and its class, was originally added in PR 4453 to reduce memory usage when parsing text. Then PR 13494 extended the `Glyph`-representation slightly to also include the `charCode`, which made the `matchesForCache` method *effectively* redundant since most properties on a `Glyph`-instance indirectly depends on that one. The only exception is potentially `isSpace` in multi-byte strings.

Also, something that I noticed when testing this code: The `matchesForCache` method never worked correctly for `Glyph`s containing `accent`-data, since Objects are passed by reference in JavaScript. For affected fonts, of which there's only a handful of examples in our test-suite, we'd fail to find an already existing `Glyph` because of this.
This commit is contained in:
Jonas Jenwald 2022-10-18 13:43:42 +02:00
parent 782d098baf
commit 3e391aaed9

View File

@ -218,30 +218,6 @@ class Glyph {
this.isZeroWidthDiacritic = category.isZeroWidthDiacritic;
this.isInvisibleFormatMark = category.isInvisibleFormatMark;
}
matchesForCache(
originalCharCode,
fontChar,
unicode,
accent,
width,
vmetric,
operatorListId,
isSpace,
isInFont
) {
return (
this.originalCharCode === originalCharCode &&
this.fontChar === fontChar &&
this.unicode === unicode &&
this.accent === accent &&
this.width === width &&
this.vmetric === vmetric &&
this.operatorListId === operatorListId &&
this.isSpace === isSpace &&
this.isInFont === isInFont
);
}
}
function int16(b0, b1) {
@ -3314,20 +3290,9 @@ class Font {
}
let glyph = this._glyphCache[charcode];
if (
!glyph ||
!glyph.matchesForCache(
charcode,
fontChar,
unicode,
accent,
width,
vmetric,
operatorListId,
isSpace,
isInFont
)
) {
// All `Glyph`-properties, except `isSpace` in multi-byte strings,
// depend indirectly on the `charcode`.
if (!glyph || glyph.isSpace !== isSpace) {
glyph = new Glyph(
charcode,
fontChar,