Unicode on the Web: Text Rendering in the Chrome Browser
Total Page:16
File Type:pdf, Size:1020Kb
Unicode on the Web: Text Rendering in the Chrome Browser Dominik Röttsches [email protected] Behdad Esfahbod [email protected] Source: SIL Source: http://www.h-57.com/the-force-of-typography/ Challenges ● Millions of Users - what if we break stuff? ● ~17.84 Million page loads per minute - how can we keep those going fast? ● Chrome shipping on 5 platforms: Android, Windows, ChromeOS, Linux, Mac - how can we ensure it works everywhere? ● Speed, Simplicity, Security, Stability ● The Web: Mixed scripts and languages, mixed directionality of text, text and Emoji, demand for fast web fonts Source: https://chrome.googleblog.com/2016/04/chrome-50-releases-and-counting.html Scope ● Recap: What is text shaping? ● Evolution of Chrome’s text stack ● Benefits and notable features of Chrome’s current text stack Text Shaping Text Shaping e ̆ ̧ a ̥ ᵉ ĕ ̧ ḁ ᵉ ȩ ̆ ḁ ᵉ ḝ ḁ ᵉ GlyphBuffer Text Shaping gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping Times Source Sans Lobster gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping 32 16 6 gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping TTB LTR RTL BTT gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping ● Small Caps ● Ligatures ● Swashes, Ornamentals ● Number Forms ● … more gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping ● Latin ● Arabic ● Hiragana ● Cyrillic ● Traditional & Simplified Chinese ● “Common” ● … more gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping Language Script English, German, Finnish… Latin Azerbaijani Cyrillic, Latin, Arabic Chinese Traditional, Simplified gb = f ( font, size, direction, features, script, language, text, context ) Text Shaping LoremHello WorldIpsum length = f ( font, size, direction, features, script, language, text, context ) Text Shaping length = f ( font, size, direction, features, script, language, text, context ) Text Shaping پ ت و length = f ( font, size, direction, features, script, language, text, context ) Text Shaping requires Segmentation gb = f ( font, size, direction, features, script, language, text, context ) Evolution of Chrome’s Text Stack Initial Architecture, before November 2013 Simple vs. Complex Text Path Simple Path Complex Path Typewriter-style glyph selection Shaping, Contextual glyph selection Horizontal advances only 2D glyph placement No typographic features Full typographic feature support Fails on scripts that require contextual Comprehensive script and language shaping support Simple vs. Complex Text Path Simple Complex Code Path Confusion Bugs Nov 2013 Using HarfBuzz on Windows Bugs: Shaping Differences, CoreText vs. HarfBuzz Sept 14 Switching to HarfBuzz on Mac M40 Issue: Regression test failures ● Line spacing issues ● Issues with degraded vertical text Dec 2014 Vertical Text through HarfBuzz Layout of a TextRun - No Word Cache Layout of a TextRun - With Word Cache July 2015 Accelerating Complex Path: Word Cache Fallback Mixup for Combining Marks U+0065 LATIN SMALL LETTER E U+0327 COMBINING CEDILLA U+0306 COMBINING BREVE Font Fallback Recap: Segmentation gb = f ( font, size, direction, features, script, language, text, context ) Before: Font Pre-Segmentation and Basic Script Resolution New Step 1: Run Segmentation Stage New Step 2: Shaper Driven Font Segmentation Oct 2015: Shaper Driven Font Segmentation Fallback Mixup for Combining Marks U+0065 LATIN SMALL LETTER E U+0327 COMBINING CEDILLA U+0306 COMBINING BREVE Grapheme Cluster Based Fallback & Font Selection U+0065 LATIN SMALL LETTER E U+0327 COMBINING CEDILLA U+0306 COMBINING BREVE Nov 2015 First attempt at switching to Complex M49 Memory Issues on Android “7.40% (+676.0 KiB) regression in ChromiumPerf/android-nexus5/memory.top_10_mobile/” ● Identified life cycle issues with the active font handles ● Removed redundant caching July 2016 Switching to Complex Text on Android M54 Oct 2016 Removing the Simple Path Recap: Challenges and features that address them ● Bugs through platform differences ● Bugs through code path differences ● Reduce platform specific code by harmonizing on one shaper ● Add vertical text support to this code path ● Improve performance by adding a word cache ● Modular, staged approach to text segmentation ● Improve quality through shaper driven font segmentation ● Enable complex text by default on all platforms ● Remove the simple text code path Reaping the Benefits True OpenType small caps: font-variant-caps Future Plans Continue to improve language support and typography in Chrome text-decoration-skip: ink Variation Fonts Recap ● High performance unified text shaping ● Chrome now treats all supported scripts/languages and OpenType typographic features as first class citizens Thanks! [email protected] [email protected].