Bug 1988244 - Guard the space-features bit vectors with the feature-info mutex. a=RyanVM DONTBUILD
Original Revision: https://phabricator.services.mozilla.com/D266136 Differential Revision: https://phabricator.services.mozilla.com/D267025
This commit is contained in:
committed by
rvandermeulen@mozilla.com
parent
f51bb96e4e
commit
7d396ff5b4
@@ -1427,6 +1427,7 @@ void gfxFont::CheckForFeaturesInvolvingSpace() const {
|
||||
flags = flags | gfxFontEntry::SpaceFeatures::HasFeatures;
|
||||
uint32_t index = static_cast<uint32_t>(s) >> 5;
|
||||
uint32_t bit = static_cast<uint32_t>(s) & 0x1f;
|
||||
MutexAutoLock lock(mFontEntry->mFeatureInfoLock);
|
||||
if (isDefaultFeature) {
|
||||
mFontEntry->mDefaultSubSpaceFeatures[index] |= (1 << bit);
|
||||
} else {
|
||||
@@ -1440,9 +1441,12 @@ void gfxFont::CheckForFeaturesInvolvingSpace() const {
|
||||
// spaces in default features of default script?
|
||||
// ==> can't use word cache, skip GPOS analysis
|
||||
bool canUseWordCache = true;
|
||||
{
|
||||
MutexAutoLock lock(mFontEntry->mFeatureInfoLock);
|
||||
if (HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, Script::COMMON)) {
|
||||
canUseWordCache = false;
|
||||
}
|
||||
}
|
||||
|
||||
// GPOS lookups - distinguish kerning from non-kerning features
|
||||
if (canUseWordCache && hb_ot_layout_has_positioning(face)) {
|
||||
@@ -1460,6 +1464,7 @@ void gfxFont::CheckForFeaturesInvolvingSpace() const {
|
||||
}
|
||||
|
||||
if (MOZ_UNLIKELY(log)) {
|
||||
MutexAutoLock lock(mFontEntry->mFeatureInfoLock);
|
||||
TimeDuration elapsed = TimeStamp::Now() - start;
|
||||
LOG_FONTINIT((
|
||||
"(fontinit-spacelookups) font: %s - "
|
||||
@@ -1494,6 +1499,7 @@ bool gfxFont::HasSubstitutionRulesWithSpaceLookups(Script aRunScript) const {
|
||||
}
|
||||
|
||||
// default features have space lookups ==> true
|
||||
MutexAutoLock lock(mFontEntry->mFeatureInfoLock);
|
||||
if (HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, Script::COMMON) ||
|
||||
HasSubstitution(mFontEntry->mDefaultSubSpaceFeatures, aRunScript)) {
|
||||
return true;
|
||||
|
||||
@@ -606,9 +606,10 @@ class gfxFontEntry {
|
||||
|
||||
// bitvector of substitution space features per script, one each
|
||||
// for default and non-default features
|
||||
uint32_t mDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / 32];
|
||||
uint32_t
|
||||
mNonDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) / 32];
|
||||
uint32_t mDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) /
|
||||
32] MOZ_GUARDED_BY(mFeatureInfoLock);
|
||||
uint32_t mNonDefaultSubSpaceFeatures[(int(Script::NUM_SCRIPT_CODES) + 31) /
|
||||
32] MOZ_GUARDED_BY(mFeatureInfoLock);
|
||||
|
||||
mozilla::Atomic<uint32_t> mUVSOffset;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user