Bug 168487 - REGRESSION(r212513): LastResort is platform-dependent, so its semantics should not be required to perform font loading correctly.
Summary: REGRESSION(r212513): LastResort is platform-dependent, so its semantics shoul...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Text (show other bugs)
Version: Other
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Myles C. Maxfield
URL:
Keywords: InRadar
Depends on: 172140
Blocks:
  Show dependency treegraph
 
Reported: 2017-02-16 17:21 PST by Myles C. Maxfield
Modified: 2017-05-16 13:26 PDT (History)
8 users (show)

See Also:


Attachments
WIP (10.31 KB, patch)
2017-05-10 14:09 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (19.52 KB, patch)
2017-05-11 15:41 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (21.31 KB, patch)
2017-05-11 16:00 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (22.62 KB, patch)
2017-05-11 16:15 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews122 for ios-simulator-wk2 (854.24 KB, application/zip)
2017-05-11 18:20 PDT, Build Bot
no flags Details
WIP (40.18 KB, patch)
2017-05-12 02:10 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (41.72 KB, patch)
2017-05-12 11:10 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (66.09 KB, patch)
2017-05-12 13:56 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (66.82 KB, patch)
2017-05-12 15:00 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (67.03 KB, patch)
2017-05-12 17:49 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (67.57 KB, patch)
2017-05-12 18:05 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (71.26 KB, patch)
2017-05-12 18:16 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (71.93 KB, patch)
2017-05-12 18:21 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (71.93 KB, patch)
2017-05-12 18:31 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews102 for mac-elcapitan (1.04 MB, application/zip)
2017-05-12 19:39 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews114 for mac-elcapitan (1.84 MB, application/zip)
2017-05-12 20:06 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews123 for ios-simulator-wk2 (15.62 MB, application/zip)
2017-05-12 20:14 PDT, Build Bot
no flags Details
WIP (73.18 KB, patch)
2017-05-12 23:20 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews126 for ios-simulator-wk2 (23.41 MB, application/zip)
2017-05-13 01:06 PDT, Build Bot
no flags Details
Patch (73.87 KB, patch)
2017-05-13 11:12 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews123 for ios-simulator-wk2 (6.97 MB, application/zip)
2017-05-13 12:51 PDT, Build Bot
no flags Details
Patch (81.50 KB, patch)
2017-05-14 00:06 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews117 for mac-elcapitan (1.93 MB, application/zip)
2017-05-14 01:14 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews100 for mac-elcapitan (1.02 MB, application/zip)
2017-05-14 01:18 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews107 for mac-elcapitan-wk2 (956.19 KB, application/zip)
2017-05-14 01:22 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews123 for ios-simulator-wk2 (1.13 MB, application/zip)
2017-05-14 01:44 PDT, Build Bot
no flags Details
Patch (81.63 KB, patch)
2017-05-14 11:22 PDT, Myles C. Maxfield
koivisto: review+
Details | Formatted Diff | Diff
Patch for committing (65.78 KB, patch)
2017-05-16 11:55 PDT, Myles C. Maxfield
commit-queue: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Myles C. Maxfield 2017-02-16 17:21:26 PST
LastResort is platform-dependent, so its semantics should not be required to perform font loading correctly.
Comment 1 Myles C. Maxfield 2017-02-16 17:27:45 PST
See https://bugs.webkit.org/show_bug.cgi?id=168114
Comment 2 Michael Catanzaro 2017-03-06 13:44:59 PST
In other words: it'd be really great if we didn't display text using system fonts and then later switch it over to using web fonts. The visual transition there is jarring. It works properly on macOS because of the invisible LastResort font available there.

Or something like that.
Comment 3 Myles C. Maxfield 2017-05-08 17:18:12 PDT
<rdar://problem/31180111>
Comment 4 Myles C. Maxfield 2017-05-10 14:09:10 PDT
Created attachment 309631 [details]
WIP
Comment 5 Myles C. Maxfield 2017-05-11 15:41:46 PDT
Created attachment 309802 [details]
WIP
Comment 6 Myles C. Maxfield 2017-05-11 16:00:39 PDT
Created attachment 309805 [details]
WIP
Comment 7 Myles C. Maxfield 2017-05-11 16:15:44 PDT
Created attachment 309810 [details]
Patch
Comment 8 Michael Catanzaro 2017-05-11 16:36:20 PDT
I can't test this right now, but thank you!
Comment 9 Build Bot 2017-05-11 18:20:48 PDT
Comment on attachment 309810 [details]
Patch

Attachment 309810 [details] did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/3722011

New failing tests:
http/tests/webfont/fallback-font-while-loading.html
Comment 10 Build Bot 2017-05-11 18:20:49 PDT
Created attachment 309840 [details]
Archive of layout-test-results from ews122 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews122  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6
Comment 11 Myles C. Maxfield 2017-05-12 02:10:33 PDT
Created attachment 309884 [details]
WIP
Comment 12 Myles C. Maxfield 2017-05-12 11:10:21 PDT
Created attachment 309919 [details]
WIP
Comment 13 Myles C. Maxfield 2017-05-12 13:56:35 PDT
Created attachment 309939 [details]
WIP
Comment 14 Myles C. Maxfield 2017-05-12 15:00:54 PDT
Created attachment 309950 [details]
WIP
Comment 15 Myles C. Maxfield 2017-05-12 17:49:00 PDT
Created attachment 309978 [details]
Patch
Comment 16 Myles C. Maxfield 2017-05-12 18:05:31 PDT
Created attachment 309984 [details]
Patch
Comment 17 Myles C. Maxfield 2017-05-12 18:16:09 PDT
Created attachment 309985 [details]
Patch
Comment 18 Myles C. Maxfield 2017-05-12 18:21:32 PDT
Created attachment 309988 [details]
Patch
Comment 19 Myles C. Maxfield 2017-05-12 18:31:25 PDT
Created attachment 309991 [details]
Patch
Comment 20 Build Bot 2017-05-12 19:39:02 PDT
Comment on attachment 309991 [details]
Patch

Attachment 309991 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.webkit.org/results/3729904

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 21 Build Bot 2017-05-12 19:39:04 PDT
Created attachment 309998 [details]
Archive of layout-test-results from ews102 for mac-elcapitan

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews102  Port: mac-elcapitan  Platform: Mac OS X 10.11.6
Comment 22 Build Bot 2017-05-12 20:06:47 PDT
Comment on attachment 309991 [details]
Patch

Attachment 309991 [details] did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/3729961

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 23 Build Bot 2017-05-12 20:06:48 PDT
Created attachment 310003 [details]
Archive of layout-test-results from ews114 for mac-elcapitan

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews114  Port: mac-elcapitan  Platform: Mac OS X 10.11.6
Comment 24 Build Bot 2017-05-12 20:14:20 PDT
Comment on attachment 309991 [details]
Patch

Attachment 309991 [details] did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/3729939

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
fast/text/web-font-load-invisible-during-loading.html
Comment 25 Build Bot 2017-05-12 20:14:22 PDT
Created attachment 310004 [details]
Archive of layout-test-results from ews123 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews123  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6
Comment 26 Myles C. Maxfield 2017-05-12 23:20:52 PDT
Created attachment 310014 [details]
WIP
Comment 27 Build Bot 2017-05-13 01:06:27 PDT
Comment on attachment 310014 [details]
WIP

Attachment 310014 [details] did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/3731248

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
fast/text/web-font-load-invisible-during-loading.html
Comment 28 Build Bot 2017-05-13 01:06:29 PDT
Created attachment 310015 [details]
Archive of layout-test-results from ews126 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews126  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6
Comment 29 Myles C. Maxfield 2017-05-13 11:12:07 PDT
Created attachment 310020 [details]
Patch
Comment 30 Build Bot 2017-05-13 12:51:33 PDT
Comment on attachment 310020 [details]
Patch

Attachment 310020 [details] did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/3733969

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
fast/text/web-font-load-invisible-during-loading.html
Comment 31 Build Bot 2017-05-13 12:51:34 PDT
Created attachment 310026 [details]
Archive of layout-test-results from ews123 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews123  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6
Comment 32 Myles C. Maxfield 2017-05-14 00:06:09 PDT
Created attachment 310073 [details]
Patch
Comment 33 Build Bot 2017-05-14 01:14:29 PDT
Comment on attachment 310073 [details]
Patch

Attachment 310073 [details] did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/3737260

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 34 Build Bot 2017-05-14 01:14:31 PDT
Created attachment 310076 [details]
Archive of layout-test-results from ews117 for mac-elcapitan

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews117  Port: mac-elcapitan  Platform: Mac OS X 10.11.6
Comment 35 Build Bot 2017-05-14 01:18:14 PDT
Comment on attachment 310073 [details]
Patch

Attachment 310073 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.webkit.org/results/3737291

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 36 Build Bot 2017-05-14 01:18:16 PDT
Created attachment 310077 [details]
Archive of layout-test-results from ews100 for mac-elcapitan

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-elcapitan  Platform: Mac OS X 10.11.6
Comment 37 Build Bot 2017-05-14 01:22:51 PDT
Comment on attachment 310073 [details]
Patch

Attachment 310073 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.webkit.org/results/3737302

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 38 Build Bot 2017-05-14 01:22:53 PDT
Created attachment 310078 [details]
Archive of layout-test-results from ews107 for mac-elcapitan-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews107  Port: mac-elcapitan-wk2  Platform: Mac OS X 10.11.6
Comment 39 Build Bot 2017-05-14 01:44:39 PDT
Comment on attachment 310073 [details]
Patch

Attachment 310073 [details] did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/3737312

New failing tests:
fast/text/web-font-load-fallback-during-loading.html
Comment 40 Build Bot 2017-05-14 01:44:40 PDT
Created attachment 310080 [details]
Archive of layout-test-results from ews123 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews123  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6
Comment 41 Myles C. Maxfield 2017-05-14 11:22:52 PDT
Created attachment 310094 [details]
Patch
Comment 42 Antti Koivisto 2017-05-16 00:51:22 PDT
Comment on attachment 310094 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=310094&action=review

> Source/WebCore/css/CSSFontFace.cpp:532
> +            m_timeoutTimer.startOneShot(3_s);

Please use an informatively named constants for numeric values like this. It can be inline, just above the using line.

> Source/WebCore/platform/graphics/Font.h:90
> +    enum class ShouldDisplay {
> +        Visible,
> +        Invisible
> +    };

"Display" and "Visible" seems like two different words for the same thing. How about calling this enum "Visibility"?

> Source/WebCore/platform/graphics/Font.h:94
> +    enum class OrientationFallback {
> +        Fallback,
> +        NoFallback
> +    };

"Fallback" seems redundant in the value. Just Yes/No maybe like Interstitial has?

> Source/WebCore/platform/graphics/Font.h:189
> +    Interstitial isInterstitial() const { return m_interstitial ? Interstitial::Yes : Interstitial::No; }

is* functions should return bools. Either rename this to interstitial() or make it return a bool. Currently the call sites read awkwardly.

> Source/WebCore/platform/graphics/Font.h:190
> +    ShouldDisplay shouldDisplay() const { return m_shouldDisplay ? ShouldDisplay::Visible : ShouldDisplay::Invisible; }

As should should* functions. "Visibility visibility() const" would work.

> Source/WebCore/platform/graphics/Font.h:318
>      unsigned m_treatAsFixedPitch : 1;
> -    unsigned m_isCustomFont : 1; // Whether or not we are custom font loaded via @font-face
> -    unsigned m_isLoading : 1; // Whether or not this custom font is still in the act of loading.
> +    unsigned m_origin : 1; // Whether or not we are custom font loaded via @font-face
> +    unsigned m_interstitial : 1; // Whether or not this custom font is the last resort placeholder for a loading font
> +    unsigned m_shouldDisplay : 1; // @font-face's internal timer can cause us to show fonts even when a font is being downloaded.
>  
> -    unsigned m_isTextOrientationFallback : 1;
> +    unsigned m_orientationFallback : 1;
>      unsigned m_isBrokenIdeographFallback : 1;
>      unsigned m_hasVerticalGlyphs : 1;

There are not enough Fonts for it to be worth to optimize this with bitfields (and size of associated actual font data is many orders of magnitude greater). It would be better to just use properly typed enum values.

> Source/WebCore/platform/graphics/FontCascade.cpp:1402
> +    // Don't draw anything while we are using custom fonts that are in the process of loading,
> +    // except if the 'force' argument is set to true (in which case it will use a fallback
> +    // font).
> +    return font.isInterstitial() == Font::Interstitial::No || font.shouldDisplay() == Font::ShouldDisplay::Visible || customFontNotReadyAction == FontCascade::CustomFontNotReadyAction::UseFallbackIfFontNotReady;

I'm not sure I understand how the comment and the code matches. The comment mentions 'force' argument and loading. The code has nothing called 'force' and nothing obviously about loading. It also tests three conditions while the text implies two.

> Source/WebCore/platform/graphics/FontRanges.h:40
> +enum class ForbidDownloadingExternalResource {
> +    Forbid,
> +    Allow
> +};

ExternalResourceDownloadPolicy? You even already name the variable 'policy' in many place.
Comment 43 Myles C. Maxfield 2017-05-16 11:44:18 PDT
Comment on attachment 310094 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=310094&action=review

>> Source/WebCore/platform/graphics/Font.h:318
>>      unsigned m_hasVerticalGlyphs : 1;
> 
> There are not enough Fonts for it to be worth to optimize this with bitfields (and size of associated actual font data is many orders of magnitude greater). It would be better to just use properly typed enum values.

I'll keep the Yes/No types as bitfields since their accessors are isXXXX() and will return bools. But I'll make Origin and Visibility use their real types internally.
Comment 44 Myles C. Maxfield 2017-05-16 11:55:22 PDT
Created attachment 310289 [details]
Patch for committing
Comment 45 WebKit Commit Bot 2017-05-16 13:07:36 PDT
Comment on attachment 310289 [details]
Patch for committing

Rejecting attachment 310289 [details] from commit-queue.

Failed to run "['/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch', '--status-host=webkit-queues.webkit.org', '--bot-id=webkit-cq-03', 'validate-changelog', '--check-oops', '--non-interactive', 310289, '--port=mac']" exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/3752297
Comment 46 Myles C. Maxfield 2017-05-16 13:26:45 PDT
Committed r216944: <http://trac.webkit.org/changeset/216944>