Unicode on the Web: Text Rendering in the Chrome Browser

Unicode on the Web: Text Rendering in the Chrome Browser

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].

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    57 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us