Skip to content

Commit

Permalink
Bug 1583707 - enable text subpixel positioning on Android and Linux. …
Browse files Browse the repository at this point in the history
…r=jfkthame

Differential Revision: https://phabricator.services.mozilla.com/D47035
  • Loading branch information
lsalzman committed Oct 2, 2019
1 parent 9a43812 commit 44983df
Show file tree
Hide file tree
Showing 34 changed files with 102 additions and 90 deletions.
30 changes: 18 additions & 12 deletions gfx/2d/ScaledFontFontconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ ScaledFontFontconfig::ScaledFontFontconfig(
mFace(std::move(aFace)),
mInstanceData(aInstanceData) {}

bool ScaledFontFontconfig::UseSubpixelPosition() const {
return mInstanceData.mAntialias != AntialiasMode::NONE &&
FT_IS_SCALABLE(mFace->GetFace());
}

#ifdef USE_SKIA
SkTypeface* ScaledFontFontconfig::CreateSkTypeface() {
SkPixelGeometry geo = mInstanceData.mFlags & InstanceData::SUBPIXEL_BGR
Expand All @@ -51,8 +56,7 @@ SkTypeface* ScaledFontFontconfig::CreateSkTypeface() {
}

void ScaledFontFontconfig::SetupSkFontDrawOptions(SkFont& aFont) {
// SkFontHost_cairo does not support subpixel text positioning
aFont.setSubpixel(false);
aFont.setSubpixel(UseSubpixelPosition());

if (mInstanceData.mFlags & InstanceData::AUTOHINT) {
aFont.setForceAutoHinting(true);
Expand Down Expand Up @@ -180,7 +184,7 @@ ScaledFontFontconfig::InstanceData::InstanceData(FcPattern* aPattern)
int filter;
if (mAntialias == AntialiasMode::SUBPIXEL &&
FcPatternGetInteger(aPattern, FC_LCD_FILTER, 0, &filter) ==
FcResultMatch) {
FcResultMatch) {
switch (filter) {
case FC_LCD_NONE:
mLcdFilter = FT_LCD_FILTER_NONE;
Expand Down Expand Up @@ -263,7 +267,9 @@ void ScaledFontFontconfig::InstanceData::SetupFontOptions(
unsigned int* aOutSynthFlags) const {
// For regular (non-printer) fonts, enable hint metrics as well as hinting
// and (possibly subpixel) antialiasing.
cairo_font_options_set_hint_metrics(aFontOptions, mFlags & HINT_METRICS ? CAIRO_HINT_METRICS_ON : CAIRO_HINT_METRICS_OFF);
cairo_font_options_set_hint_metrics(
aFontOptions,
mFlags & HINT_METRICS ? CAIRO_HINT_METRICS_ON : CAIRO_HINT_METRICS_OFF);

cairo_hint_style_t hinting;
switch (mHinting) {
Expand Down Expand Up @@ -291,8 +297,7 @@ void ScaledFontFontconfig::InstanceData::SetupFontOptions(
cairo_font_options_set_antialias(aFontOptions, CAIRO_ANTIALIAS_GRAY);
break;
case AntialiasMode::SUBPIXEL: {
cairo_font_options_set_antialias(aFontOptions,
CAIRO_ANTIALIAS_SUBPIXEL);
cairo_font_options_set_antialias(aFontOptions, CAIRO_ANTIALIAS_SUBPIXEL);
cairo_font_options_set_subpixel_order(
aFontOptions,
mFlags & SUBPIXEL_BGR
Expand All @@ -302,16 +307,16 @@ void ScaledFontFontconfig::InstanceData::SetupFontOptions(
: CAIRO_SUBPIXEL_ORDER_RGB));
cairo_lcd_filter_t lcdFilter = CAIRO_LCD_FILTER_DEFAULT;
switch (mLcdFilter) {
case FT_LCD_FILTER_NONE:
case FT_LCD_FILTER_NONE:
lcdFilter = CAIRO_LCD_FILTER_NONE;
break;
case FT_LCD_FILTER_DEFAULT:
case FT_LCD_FILTER_DEFAULT:
lcdFilter = CAIRO_LCD_FILTER_FIR5;
break;
case FT_LCD_FILTER_LIGHT:
case FT_LCD_FILTER_LIGHT:
lcdFilter = CAIRO_LCD_FILTER_FIR3;
break;
case FT_LCD_FILTER_LEGACY:
case FT_LCD_FILTER_LEGACY:
lcdFilter = CAIRO_LCD_FILTER_INTRA_PIXEL;
break;
}
Expand Down Expand Up @@ -358,9 +363,10 @@ bool ScaledFontFontconfig::GetWRFontInstanceOptions(
std::vector<FontVariation>* aOutVariations) {
wr::FontInstanceOptions options;
options.render_mode = wr::FontRenderMode::Alpha;
// FIXME: Cairo-FT metrics are not compatible with subpixel positioning.
// options.flags = wr::FontInstanceFlags_SUBPIXEL_POSITION;
options.flags = wr::FontInstanceFlags{0};
if (UseSubpixelPosition()) {
options.flags |= wr::FontInstanceFlags_SUBPIXEL_POSITION;
}
options.bg_color = wr::ToColorU(Color());
options.synthetic_italics =
wr::DegreesToSyntheticItalics(GetSyntheticObliqueAngle());
Expand Down
2 changes: 2 additions & 0 deletions gfx/2d/ScaledFontFontconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class ScaledFontFontconfig : public ScaledFontBase {

AntialiasMode GetDefaultAAMode() override;

bool UseSubpixelPosition() const;

bool CanSerialize() override { return true; }

bool GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton) override;
Expand Down
12 changes: 8 additions & 4 deletions gfx/2d/ScaledFontFreeType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,17 @@ ScaledFontFreeType::ScaledFontFreeType(
mFace(std::move(aFace)),
mApplySyntheticBold(aApplySyntheticBold) {}

bool ScaledFontFreeType::UseSubpixelPosition() const {
return FT_IS_SCALABLE(mFace->GetFace());
}

#ifdef USE_SKIA
SkTypeface* ScaledFontFreeType::CreateSkTypeface() {
return SkCreateTypefaceFromCairoFTFont(mFace->GetFace(), mFace.get());
}

void ScaledFontFreeType::SetupSkFontDrawOptions(SkFont& aFont) {
// SkFontHost_cairo does not support subpixel text positioning
aFont.setSubpixel(false);
aFont.setSubpixel(UseSubpixelPosition());

if (mApplySyntheticBold) {
aFont.setEmbolden(true);
Expand Down Expand Up @@ -83,9 +86,10 @@ bool ScaledFontFreeType::GetWRFontInstanceOptions(
std::vector<FontVariation>* aOutVariations) {
wr::FontInstanceOptions options;
options.render_mode = wr::FontRenderMode::Alpha;
// FIXME: Cairo-FT metrics are not compatible with subpixel positioning.
// options.flags = wr::FontInstanceFlags_SUBPIXEL_POSITION;
options.flags = wr::FontInstanceFlags{0};
if (UseSubpixelPosition()) {
options.flags |= wr::FontInstanceFlags_SUBPIXEL_POSITION;
}
options.flags |= wr::FontInstanceFlags_EMBEDDED_BITMAPS;
options.bg_color = wr::ToColorU(Color());
options.synthetic_italics =
Expand Down
2 changes: 2 additions & 0 deletions gfx/2d/ScaledFontFreeType.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class ScaledFontFreeType : public ScaledFontBase {

AntialiasMode GetDefaultAAMode() override { return AntialiasMode::GRAY; }

bool UseSubpixelPosition() const;

bool CanSerialize() override { return true; }

bool GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton) override;
Expand Down
8 changes: 8 additions & 0 deletions gfx/skia/skia/src/ports/SkFontHost_cairo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,14 @@ void SkScalerContext_CairoFT::generateMetrics(SkGlyph* glyph)

FT_BBox bbox;
FT_Outline_Get_CBox(&fFTFace->glyph->outline, &bbox);
if (this->isSubpixel()) {
int dx = SkFixedToFDot6(glyph->getSubXFixed());
int dy = SkFixedToFDot6(glyph->getSubYFixed());
bbox.xMin += dx;
bbox.yMin -= dy;
bbox.xMax += dx;
bbox.yMax -= dy;
}
bbox.xMin &= ~63;
bbox.yMin &= ~63;
bbox.xMax = (bbox.xMax + 63) & ~63;
Expand Down
12 changes: 10 additions & 2 deletions gfx/thebes/gfxFT2FontBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,15 @@ uint32_t gfxFT2FontBase::GetGlyph(uint32_t unicode,
return GetGlyph(unicode);
}

bool gfxFT2FontBase::ShouldRoundXOffset(cairo_t* aCairo) const {
// Force rounding if outputting to a Cairo context. Otherwise, allow subpixel
// positioning (no rounding) if rendering a scalable outline font with
// anti-aliasing. Monochrome rendering or some bitmap fonts can become too
// distorted with subpixel positioning, so force rounding in those cases.
return aCairo != nullptr || !mFTFace || !FT_IS_SCALABLE(mFTFace->GetFace()) ||
(mFTLoadFlags & FT_LOAD_MONOCHROME);
}

FT_Vector gfxFT2FontBase::GetEmboldenStrength(FT_Face aFace) {
FT_Vector strength = {0, 0};
if (!mEmbolden) {
Expand Down Expand Up @@ -524,8 +533,7 @@ bool gfxFT2FontBase::GetFTGlyphExtents(uint16_t aGID, int32_t* aAdvance,
// applying hinting. Otherwise, prefer hinted width from glyph->advance.x.
if (aAdvance) {
FT_Fixed advance;
if (face.get()->glyph->format == FT_GLYPH_FORMAT_OUTLINE &&
(!hintMetrics || FT_HAS_MULTIPLE_MASTERS(face.get()))) {
if (!ShouldRoundXOffset(nullptr) || FT_HAS_MULTIPLE_MASTERS(face.get())) {
advance = face.get()->glyph->linearHoriAdvance;
} else {
advance = face.get()->glyph->advance.x << 10; // convert 26.6 to 16.16
Expand Down
7 changes: 4 additions & 3 deletions gfx/thebes/gfxFT2FontBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@
#include "nsHashKeys.h"

class gfxFT2FontEntryBase : public gfxFontEntry {
public:
explicit gfxFT2FontEntryBase(const nsACString& aName)
: gfxFontEntry(aName) {}
public:
explicit gfxFT2FontEntryBase(const nsACString& aName) : gfxFontEntry(aName) {}

struct CmapCacheSlot {
CmapCacheSlot() : mCharCode(0), mGlyphIndex(0) {}
Expand Down Expand Up @@ -53,6 +52,8 @@ class gfxFT2FontBase : public gfxFont {

FontType GetType() const override { return FONT_TYPE_FT2; }

bool ShouldRoundXOffset(cairo_t* aCairo) const override;

static void SetupVarCoords(FT_MM_Var* aMMVar,
const nsTArray<gfxFontVariation>& aVariations,
FT_Face aFTFace);
Expand Down
12 changes: 6 additions & 6 deletions layout/reftests/bidi/reftest.list
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ fuzzy-if(cocoaWidget,0-1,0-1) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == bidi-001.html bidi-001-ref.html # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == bidi-001-j.html bidi-001-ref.html # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == bidi-001-v.html bidi-001-ref.html # Bug 1392106
== bidi-002.html bidi-002-ref.html
== bidi-003.html bidi-003-ref.html
fuzzy-if(Android,0-1,0-1) == bidi-002.html bidi-002-ref.html
fuzzy-if(Android,0-1,0-1) == bidi-003.html bidi-003-ref.html
fuzzy-if(gtkWidget,0-255,0-17) == bidi-004.html bidi-004-ref.html # inconsistency in the Hebrew font that gets used
fuzzy-if(gtkWidget,0-255,0-17) == bidi-004-j.html bidi-004-ref.html # inconsistency in the Hebrew font that gets used
== bidi-005.html bidi-005-ref.html
Expand Down Expand Up @@ -50,8 +50,8 @@ random-if(cocoaWidget) == with-first-letter-2b.html with-first-letter-2-ref.html
== 83958-1a.html 83958-1-ref.html
== 83958-1b.html 83958-1-ref.html
== 83958-1c.html 83958-1-ref.html
fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,0-111,0-7) == 83958-2a.html 83958-2-ref.html
fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,0-111,0-7) == 83958-2b.html 83958-2-ref.html
fuzzy-if(Android,0-1,0-3) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,0-111,0-7) == 83958-2a.html 83958-2-ref.html
fuzzy-if(Android,0-1,0-3) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,0-111,0-7) == 83958-2b.html 83958-2-ref.html
== 115921-1.html 115921-1-ref.html
== 115921-2.html 115921-2-ref.html
== 151407-1.html 151407-1-ref.html
Expand Down Expand Up @@ -162,11 +162,11 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-1c-ltr.html bra
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-1c-rtl.html brackets-1c-rtl-ref.html # Bug 1392106
fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-ltr.html brackets-2a-ltr-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(Android,0-254,0-557) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2a-rtl.html brackets-2a-rtl-ref.html # Bug 1392106
fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-ltr.html brackets-2b-ltr-ref.html # Bug 1392106
fuzzy-if(Android,0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-ltr.html brackets-2b-ltr-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2b-rtl.html brackets-2b-rtl-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-ltr.html brackets-2c-ltr-ref.html # Bug 1392106
fuzzy-if(Android,0-254,0-231) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-2c-rtl.html brackets-2c-rtl-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-3) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-ltr.html brackets-3a-ltr-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-3) fuzzy-if(Android,0-1,0-8) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-ltr.html brackets-3a-ltr-ref.html # Bug 1392106
fuzzy-if(cocoaWidget,0-1,0-2) fuzzy-if(Android,0-1,0-6) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3a-rtl.html brackets-3a-rtl-ref.html # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3b-ltr.html brackets-3b-ltr-ref.html # Bug 1392106
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == brackets-3b-rtl.html brackets-3b-rtl-ref.html # Bug 1392106
Expand Down
6 changes: 3 additions & 3 deletions layout/reftests/bugs/reftest.list
Original file line number Diff line number Diff line change
Expand Up @@ -1608,7 +1608,7 @@ fuzzy-if(Android,0-8,0-20) fails-if(webrender) == 602200-3.html 602200-3-ref.htm
== 602200-4.html 602200-4-ref.html
== 603423-1.html 603423-1-ref.html
== 604737.html 604737-ref.html
fuzzy-if(geckoview&&webrender,11-11,630-637) fuzzy-if(webrender&&cocoaWidget,0-7,0-610) == 605138-1.html 605138-1-ref.html
fuzzy-if(webrender&&cocoaWidget,0-7,0-610) == 605138-1.html 605138-1-ref.html
== 605157-1.xhtml 605157-1-ref.xhtml
== 607267-1.html 607267-1-ref.html
== 608636-1.html 608636-1-ref.html
Expand Down Expand Up @@ -2101,8 +2101,8 @@ pref(image.downscale-during-decode.enabled,true) == 1553571-1.html 1553571-1-ref
== 1558937-1.html 1558937-1-ref.html
!= 1563484.html 1563484-notref.html
== 1563484.html 1563484-ref.html
fuzzy-if(!webrender||!winWidget,251-255,464-1613) fuzzy-if(geckoview&&webrender,251-253,1392-1397) == 1562733-rotated-nastaliq-1.html 1562733-rotated-nastaliq-1-ref.html
fuzzy-if(winWidget&&webrender,0-31,0-3) fuzzy-if(geckoview&&webrender,0-93,0-26) == 1562733-rotated-nastaliq-2.html 1562733-rotated-nastaliq-2-ref.html
fuzzy-if(!webrender||!winWidget,251-255,464-1613) fuzzy-if(geckoview&&webrender,251-253,1392-1401) == 1562733-rotated-nastaliq-1.html 1562733-rotated-nastaliq-1-ref.html
fuzzy-if(winWidget&&webrender,0-31,0-3) fuzzy-if(geckoview&&webrender,0-93,0-87) == 1562733-rotated-nastaliq-2.html 1562733-rotated-nastaliq-2-ref.html
test-pref(plain_text.wrap_long_lines,false) != 1565129.txt 1565129.txt
fuzzy(0-32,0-8) fuzzy-if(Android&&webrender,0-32,0-1458) == 1576553-1.html 1576553-1-ref.html
== 1579953-2.html 1579953-2-ref.html
2 changes: 1 addition & 1 deletion layout/reftests/css-ruby/reftest.list
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == intrinsic-isize-2.html i
== justification-1.html justification-1-ref.html
== justification-2.html justification-2-ref.html
fuzzy-if(winWidget,0-255,0-792) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == lang-specific-style-1.html lang-specific-style-1-ref.html # bug 1134947, Bug 1392106
== line-breaking-1.html line-breaking-1-ref.html
fuzzy-if(Android,0-96,0-18) == line-breaking-1.html line-breaking-1-ref.html
== line-breaking-2.html line-breaking-2-ref.html
== line-breaking-3.html line-breaking-3-ref.html
fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),0-3,0-2) == line-break-suppression-1.html line-break-suppression-1-ref.html
Expand Down
16 changes: 8 additions & 8 deletions layout/reftests/mathml/reftest.list
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 355548-5.xml 355548-5-re
== 373533-2.xhtml about:blank
== 373533-3.xhtml about:blank
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == 393760-1.xml 393760-1-ref.xml # Bug 1392106
fuzzy-if(skiaContent,0-2,0-500) == 393760-2.xml 393760-2-ref.xml
fuzzy-if(skiaContent,0-2,0-529) == 393760-2.xml 393760-2-ref.xml
== 414123.xhtml 414123-ref.xhtml
== dir-1.html dir-1-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == dir-2.html dir-2-ref.html # Bug 1392106
Expand All @@ -23,7 +23,7 @@ fuzzy-if(cocoaWidget,0-135,0-56) == dir-6a.html dir-6a-ref.html
== css-spacing-1.html css-spacing-1-ref.html
pref(mathml.disabled,true) == disabled-scriptlevel-1.html disabled-scriptlevel-1-ref.html
pref(mathml.disabled,true) == disabled-scriptlevel-1.xhtml disabled-scriptlevel-1-ref.xhtml
random-if(smallScreen&&Android) fuzzy(0-255,0-200) fuzzy-if(geckoview&&webrender,216-216,312-314) fuzzy-if(webrender&&winWidget,114-255,245-361) fuzzy-if(webrender&&OSX,79-153,307-314) == mirror-op-1.html mirror-op-1-ref.html
random-if(smallScreen&&Android) fuzzy(0-255,0-200) fuzzy-if(geckoview&&webrender,201-216,312-316) fuzzy-if(webrender&&winWidget,114-255,245-361) fuzzy-if(webrender&&OSX,79-153,307-314) == mirror-op-1.html mirror-op-1-ref.html
!= mirror-op-2.html mirror-op-2-ref.html
!= mirror-op-3.html mirror-op-3-ref.html
!= mirror-op-4.html mirror-op-4-ref.html
Expand Down Expand Up @@ -351,18 +351,18 @@ pref(mathml.deprecated_alignment_attributes.disabled,false) == mfrac-A-7.html mf
== mfrac-B-1.html mfrac-B-1-ref.html
pref(mathml.mfrac_linethickness_names.disabled,false) == mfrac-B-2.html mfrac-B-2-3-ref.html
pref(mathml.mfrac_linethickness_names.disabled,false) == mfrac-B-3.html mfrac-B-2-3-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-781) == mfrac-B-4.html mfrac-B-4-5-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-781) == mfrac-B-4.html mfrac-B-4-5-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) == mfrac-B-5.html mfrac-B-4-5-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-781) == mfrac-B-6.html mfrac-B-6-7-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-781) == mfrac-B-6.html mfrac-B-6-7-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) == mfrac-B-7.html mfrac-B-6-7-ref.html
fuzzy-if(OSX,0-1,0-100) fuzzy-if(skiaContent,0-1,0-14) == mfrac-C-1.html mfrac-C-1-ref.html
pref(mathml.mfrac_linethickness_names.disabled,false) == mfrac-C-2.html mfrac-C-2-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-776) == mfrac-C-3.html mfrac-C-3-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-271) == mfrac-C-4.html mfrac-C-4-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-776) == mfrac-C-3.html mfrac-C-3-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-271) == mfrac-C-4.html mfrac-C-4-ref.html
fuzzy-if(OSX,0-1,0-100) fuzzy-if(skiaContent,0-1,0-14) == mfrac-D-1.html mfrac-D-1-ref.html
pref(mathml.mfrac_linethickness_names.disabled,false) == mfrac-D-2.html mfrac-D-2-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-776) == mfrac-D-3.html mfrac-D-3-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-198,0-271) == mfrac-D-4.html mfrac-D-4-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-776) == mfrac-D-3.html mfrac-D-3-ref.html
pref(mathml.deprecated_alignment_attributes.disabled,false) fuzzy-if(geckoview&&webrender,0-239,0-271) == mfrac-D-4.html mfrac-D-4-ref.html
== mfrac-E-1.html mfrac-E-1-ref.html
== shadow-dom-1.html shadow-dom-1-ref.html
pref(dom.meta-viewport.enabled,true) pref(font.size.inflation.emPerLine,25) fuzzy-if(webrender&&!gtkWidget,0-255,0-324) == font-inflation-1.html font-inflation-1-ref.html
Expand Down
Loading

0 comments on commit 44983df

Please sign in to comment.