| author | Oana Pop Rus <opoprus@mozilla.com> |
| Mon, 16 Dec 2019 22:52:07 +0200 | |
| changeset 507270 | 79957874d3a7a40919dfdef4f17d50238f4aa88e |
| parent 507269 | a2b49a6d061b6c6c31a7316330db23e1047764cb |
| child 507271 | 8cb11ce383f44067a06048883950f248cad80f85 |
| push id | 36924 |
| push user | ccoroiu@mozilla.com |
| push date | Tue, 17 Dec 2019 04:13:53 +0000 |
| treeherder | mozilla-central@7bebdc108aa3 [default view] [failures only] |
| perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
| bugs | 1600470 |
| milestone | 73.0a1 |
| backs out | bf28a7e8a8a462ad596746232ab743dd892aa7b3 |
| first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
| last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/2d/Factory.cpp +++ b/gfx/2d/Factory.cpp @@ -60,18 +60,16 @@ #include "Logging.h" #include "mozilla/CheckedInt.h" #ifdef MOZ_ENABLE_FREETYPE # include "ft2build.h" # include FT_FREETYPE_H -# include FT_OUTLINE_H -# include FT_SYNTHESIS_H #endif #include "MainThreadUtils.h" #include "mozilla/Preferences.h" #include "mozilla/StaticPrefs_gfx.h" #if defined(MOZ_LOGGING) GFX2D_API mozilla::LogModule* GetGFX2DLog() { static mozilla::LazyLogModule sLog("gfx2d"); @@ -192,50 +190,16 @@ FT_Error mozilla_LoadFTGlyph(FT_Face aFa void mozilla_LockFTLibrary(FT_Library aFTLibrary) { mozilla::gfx::Factory::LockFTLibrary(aFTLibrary); } void mozilla_UnlockFTLibrary(FT_Library aFTLibrary) { mozilla::gfx::Factory::UnlockFTLibrary(aFTLibrary); } - -// Custom version of FT_GlyphSlot_Embolden to be less aggressive with outline -// fonts than the default implementation in FreeType. -void mozilla_GlyphSlot_Embolden_Less(FT_GlyphSlot slot) { - if (!slot) { - return; - } - if (slot->format != FT_GLYPH_FORMAT_OUTLINE) { - // For non-outline glyphs, just fall back to FreeType's function. - FT_GlyphSlot_Embolden(slot); - return; - } - - FT_Face face = slot->face; - - // FT_GlyphSlot_Embolden uses a divisor of 24 here; we'll be only half as - // bold. - FT_Pos strength = - FT_MulFix(face->units_per_EM, face->size->metrics.y_scale) / 48; - FT_Outline_Embolden(&slot->outline, strength); - - // Adjust metrics to suit the fattened glyph. - if (slot->advance.x) { - slot->advance.x += strength; - } - if (slot->advance.y) { - slot->advance.y += strength; - } - slot->metrics.width += strength; - slot->metrics.height += strength; - slot->metrics.horiAdvance += strength; - slot->metrics.vertAdvance += strength; - slot->metrics.horiBearingY += strength; -} } #endif namespace mozilla { namespace gfx { #ifdef MOZ_ENABLE_FREETYPE FT_Library Factory::mFTLibrary = nullptr;
--- a/gfx/skia/generate_mozbuild.py +++ b/gfx/skia/generate_mozbuild.py @@ -67,20 +67,16 @@ elif CONFIG['CPU_ARCH'] == 'aarch64' and DEFINES['SKIA_IMPLEMENTATION'] = 1 if CONFIG['MOZ_ENABLE_SKIA_PDF_SFNTLY']: DEFINES['SK_PDF_USE_SFNTLY'] = 1 if CONFIG['MOZ_TREE_FREETYPE']: DEFINES['SK_CAN_USE_DLOPEN'] = 0 -# Reduce strength of synthetic-emboldening used in the freetype backend -# (see bug 1600470). -DEFINES['SK_OUTLINE_EMBOLDEN_DIVISOR'] = 48 - # Suppress warnings in third-party code. CXXFLAGS += [ '-Wno-deprecated-declarations', '-Wno-overloaded-virtual', '-Wno-shadow', '-Wno-sign-compare', '-Wno-unreachable-code', '-Wno-unused-function',
--- a/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp +++ b/gfx/skia/skia/src/ports/SkFontHost_cairo.cpp @@ -53,37 +53,39 @@ typedef enum FT_LcdFilter_ #endif #ifndef SK_FONTHOST_CAIRO_STANDALONE #define SK_FONTHOST_CAIRO_STANDALONE 1 #endif static bool gFontHintingEnabled = true; static FT_Error (*gSetLcdFilter)(FT_Library, FT_LcdFilter) = nullptr; +static void (*gGlyphSlotEmbolden)(FT_GlyphSlot) = nullptr; extern "C" { void mozilla_LockFTLibrary(FT_Library aLibrary); void mozilla_UnlockFTLibrary(FT_Library aLibrary); void mozilla_AddRefSharedFTFace(void* aContext); void mozilla_ReleaseSharedFTFace(void* aContext, void* aOwner); void mozilla_ForgetSharedFTFaceLockOwner(void* aContext, void* aOwner); int mozilla_LockSharedFTFace(void* aContext, void* aOwner); void mozilla_UnlockSharedFTFace(void* aContext); FT_Error mozilla_LoadFTGlyph(FT_Face aFace, uint32_t aGlyphIndex, int32_t aFlags); - void mozilla_GlyphSlot_Embolden_Less(FT_GlyphSlot slot); } void SkInitCairoFT(bool fontHintingEnabled) { gFontHintingEnabled = fontHintingEnabled; #if SK_CAN_USE_DLOPEN gSetLcdFilter = (FT_Error (*)(FT_Library, FT_LcdFilter))dlsym(RTLD_DEFAULT, "FT_Library_SetLcdFilter"); + gGlyphSlotEmbolden = (void (*)(FT_GlyphSlot))dlsym(RTLD_DEFAULT, "FT_GlyphSlot_Embolden"); #else gSetLcdFilter = &FT_Library_SetLcdFilter; + gGlyphSlotEmbolden = &FT_GlyphSlot_Embolden; #endif // FT_Library_SetLcdFilter may be provided but have no effect if FreeType // is built without FT_CONFIG_OPTION_SUBPIXEL_RENDERING. if (gSetLcdFilter && gSetLcdFilter(nullptr, FT_LCD_FILTER_NONE) == FT_Err_Unimplemented_Feature) { gSetLcdFilter = nullptr; } } @@ -479,19 +481,19 @@ unsigned SkScalerContext_CairoFT::genera bool SkScalerContext_CairoFT::generateAdvance(SkGlyph* glyph) { generateMetrics(glyph); return !glyph->isEmpty(); } void SkScalerContext_CairoFT::prepareGlyph(FT_GlyphSlot glyph) { - if (fRec.fFlags & SkScalerContext::kEmbolden_Flag) { - // Not FT_GlyphSlot_Embolden because we want a less extreme effect. - mozilla_GlyphSlot_Embolden_Less(glyph); + if (fRec.fFlags & SkScalerContext::kEmbolden_Flag && + gGlyphSlotEmbolden) { + gGlyphSlotEmbolden(glyph); } } void SkScalerContext_CairoFT::generateMetrics(SkGlyph* glyph) { glyph->fMaskFormat = fRec.fMaskFormat; glyph->zeroMetrics();
--- a/gfx/thebes/gfxFT2FontBase.cpp +++ b/gfx/thebes/gfxFT2FontBase.cpp @@ -495,26 +495,16 @@ bool gfxFT2FontBase::ShouldRoundXOffset( gfx_text_subpixel_position_force_enabled_AtStartup())); } FT_Vector gfxFT2FontBase::GetEmboldenStrength(FT_Face aFace) { FT_Vector strength = {0, 0}; if (!mEmbolden) { return strength; } - - // If it's an outline glyph, we'll be using GlyphSlot_Embolden_Less, - // so we need to match its strength here. - if (aFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE) { - strength.x = - FT_MulFix(aFace->units_per_EM, aFace->size->metrics.y_scale) / 48; - strength.y = strength.x; - return strength; - } - // This is the embolden "strength" used by FT_GlyphSlot_Embolden. strength.x = FT_MulFix(aFace->units_per_EM, aFace->size->metrics.y_scale) / 24; strength.y = strength.x; if (aFace->glyph->format == FT_GLYPH_FORMAT_BITMAP) { strength.x &= -64; if (!strength.x) { strength.x = 64;
--- a/gfx/wr/webrender/src/platform/unix/font.rs +++ b/gfx/wr/webrender/src/platform/unix/font.rs @@ -101,17 +101,17 @@ macro_rules! ft_dyn_fn { ($($proto:tt)+) => { extern "C" { fn $($proto)+; } } } ft_dyn_fn!(FT_Get_MM_Var(face: FT_Face, desc: *mut *mut FT_MM_Var) -> FT_Error); ft_dyn_fn!(FT_Done_MM_Var(library: FT_Library, desc: *mut FT_MM_Var) -> FT_Error); ft_dyn_fn!(FT_Set_Var_Design_Coordinates(face: FT_Face, num_vals: FT_UInt, vals: *mut FT_Fixed) -> FT_Error); extern "C" { - fn mozilla_GlyphSlot_Embolden_Less(slot: FT_GlyphSlot); + fn FT_GlyphSlot_Embolden(slot: FT_GlyphSlot); } enum FontFile { Pathname(CString), Data(Arc<Vec<u8>>), } struct FontFace { @@ -490,17 +490,17 @@ impl FontContext { ); return None; } let slot = unsafe { (*face).glyph }; assert!(slot != ptr::null_mut()); if font.flags.contains(FontInstanceFlags::SYNTHETIC_BOLD) { - unsafe { mozilla_GlyphSlot_Embolden_Less(slot) }; + unsafe { FT_GlyphSlot_Embolden(slot) }; } let format = unsafe { (*slot).format }; match format { FT_Glyph_Format::FT_GLYPH_FORMAT_BITMAP => { let y_size = unsafe { (*(*(*slot).face).size).metrics.y_ppem }; Some((slot, req_size as f32 / y_size as f32)) }
--- a/layout/reftests/css-break/reftest.list +++ b/layout/reftests/css-break/reftest.list @@ -1,11 +1,11 @@ == box-decoration-break-1.html box-decoration-break-1-ref.html fuzzy(0-1,0-20) fuzzy-if(skiaContent,0-1,0-700) == box-decoration-break-with-inset-box-shadow-1.html box-decoration-break-with-inset-box-shadow-1-ref.html -skip-if(verify) fuzzy(0-45,0-460) fuzzy-if(skiaContent,0-57,0-439) fuzzy-if(Android,0-70,0-1330) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-with-outset-box-shadow-1.html box-decoration-break-with-outset-box-shadow-1-ref.html # Bug 1386543, bug 1392106 +skip-if(verify) fuzzy(0-45,0-460) fuzzy-if(skiaContent,0-57,0-439) fuzzy-if(Android,0-57,0-1330) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-with-outset-box-shadow-1.html box-decoration-break-with-outset-box-shadow-1-ref.html # Bug 1386543, bug 1392106 random-if(!gtkWidget||webrender) == box-decoration-break-border-image.html box-decoration-break-border-image-ref.html == box-decoration-break-block-border-padding.html box-decoration-break-block-border-padding-ref.html == box-decoration-break-block-margin.html box-decoration-break-block-margin-ref.html fuzzy-if(!Android,0-1,0-62) fuzzy-if(Android,0-8,0-6627) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-first-letter.html box-decoration-break-first-letter-ref.html #Bug 1313773 # Bug 1392106 == box-decoration-break-with-bidi.html box-decoration-break-with-bidi-ref.html random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-bug-1235152.html box-decoration-break-bug-1235152-ref.html # Bug 1392106 random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == box-decoration-break-bug-1249913.html box-decoration-break-bug-1249913-ref.html # Bug 1392106 == vertical-wm-001.html vertical-wm-001-ref.html
--- a/layout/reftests/text/synthetic-bold-metrics-01-notref.html +++ b/layout/reftests/text/synthetic-bold-metrics-01-notref.html @@ -3,17 +3,17 @@ <head> <style type="text/css"> @font-face { font-family: dejavu; src: url(../fonts/dejavu-sans/DejaVuSans.ttf); } p { - font: 32px dejavu; /* family with only a single weight */ + font-family: dejavu; /* family with only a single weight */ } .test { color: white; /* hide the text, we're only comparing metrics */ } </style> </head> <body>
--- a/layout/reftests/text/synthetic-bold-metrics-01.html +++ b/layout/reftests/text/synthetic-bold-metrics-01.html @@ -3,17 +3,17 @@ <head> <style type="text/css"> @font-face { font-family: dejavu; src: url(../fonts/dejavu-sans/DejaVuSans.ttf); } p { - font: 32px dejavu; /* family with only a single weight */ + font-family: dejavu; /* family with only a single weight */ } .test { color: white; /* hide the text, we're only comparing metrics */ font-weight: bold; /* synthetic bold will be used */ } </style> </head>