Bug 161119 - [Cocoa] Improve performance of glyph advance metrics gathering
Summary: [Cocoa] Improve performance of glyph advance metrics gathering
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Myles C. Maxfield
URL:
Keywords:
: 152293 (view as bug list)
Depends on:
Blocks:
 
Reported: 2016-08-23 17:05 PDT by Myles C. Maxfield
Modified: 2024-02-25 19:19 PST (History)
8 users (show)

See Also:


Attachments
WIP (15.58 KB, patch)
2016-08-23 17:07 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (31.98 KB, patch)
2016-08-23 19:36 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (33.33 KB, patch)
2016-08-23 20:28 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Perf Measurements (244.07 KB, image/png)
2016-08-25 13:41 PDT, Myles C. Maxfield
no flags Details
Perf measurements - excluding glyph counts of > 256 (180.88 KB, image/png)
2016-08-25 13:43 PDT, Myles C. Maxfield
no flags Details
Y-Intercept zoom (38.05 KB, image/png)
2016-08-25 13:54 PDT, Myles C. Maxfield
no flags Details
Get glyphs from characters (347.37 KB, image/png)
2016-08-25 14:02 PDT, Myles C. Maxfield
no flags Details
Y intercept for getting glyphs from characters (93.58 KB, image/png)
2016-08-25 14:06 PDT, Myles C. Maxfield
no flags Details
WIP (41.63 KB, patch)
2016-08-25 17:05 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (41.81 KB, patch)
2016-08-25 17:23 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (40.09 KB, patch)
2016-08-26 02:20 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (39.20 KB, patch)
2016-08-26 10:21 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (39.20 KB, patch)
2016-08-26 11:00 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (39.94 KB, patch)
2016-08-27 14:42 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
WIP (19.17 KB, patch)
2016-09-04 15:02 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Testing CoreText (1.73 KB, patch)
2016-09-07 12:26 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Using CoreText measurements (3.44 KB, patch)
2016-09-07 14:08 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
platformWidthForGlyph (3.76 KB, patch)
2016-09-07 17:14 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
GlyphPage size (9.81 KB, patch)
2016-09-07 19:06 PDT, Myles C. Maxfield
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews103 for mac-yosemite (1.66 MB, application/zip)
2016-09-07 20:07 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews104 for mac-yosemite-wk2 (1.72 MB, application/zip)
2016-09-07 20:09 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews114 for mac-yosemite (2.31 MB, application/zip)
2016-09-07 20:11 PDT, Build Bot
no flags Details
GlyphPage size (9.61 KB, patch)
2016-09-08 11:03 PDT, Myles C. Maxfield
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews112 for mac-yosemite (2.47 MB, application/zip)
2016-09-08 11:57 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews106 for mac-yosemite-wk2 (2.26 MB, application/zip)
2016-09-08 12:04 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews102 for mac-yosemite (1.66 MB, application/zip)
2016-09-08 12:09 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews123 for ios-simulator-elcapitan-wk2 (16.59 MB, application/zip)
2016-09-08 12:15 PDT, Build Bot
no flags Details
GlyphPage size (9.89 KB, patch)
2016-09-08 14:01 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (14.28 KB, patch)
2016-09-08 14:54 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (15.95 KB, patch)
2016-09-08 15:43 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch (18.98 KB, patch)
2016-09-08 17:21 PDT, Myles C. Maxfield
simon.fraser: review+
Details | Formatted Diff | Diff
Patch for committing (19.08 KB, patch)
2016-09-08 17:39 PDT, Myles C. Maxfield
commit-queue: commit-queue-
Details | Formatted Diff | Diff
Patch for committing (19.12 KB, patch)
2016-09-09 01:00 PDT, Myles C. Maxfield
no flags Details | Formatted Diff | Diff
Patch for committing (19.53 KB, patch)
2016-09-09 01:02 PDT, Myles C. Maxfield
no flags 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 2016-08-23 17:05:11 PDT
[Cocoa] Improve performance of glyph advance metrics gathering
Comment 1 Myles C. Maxfield 2016-08-23 17:07:16 PDT
Created attachment 286808 [details]
WIP
Comment 2 Myles C. Maxfield 2016-08-23 19:36:09 PDT
Created attachment 286823 [details]
WIP
Comment 3 Myles C. Maxfield 2016-08-23 20:28:01 PDT
Created attachment 286828 [details]
WIP
Comment 4 WebKit Commit Bot 2016-08-24 10:33:56 PDT
Attachment 286828 [details] did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the 'No new tests' and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 5 Myles C. Maxfield 2016-08-24 20:37:11 PDT
This patch makes PLT worse by 0.46%.
Comment 6 Myles C. Maxfield 2016-08-25 13:41:03 PDT
Created attachment 287002 [details]
Perf Measurements

Current CG and CT APIs for measuring width allow you to specify multiple glyphs at once. I measured the runtime of measuring increasingly large numbers of glyphs, and you can see that the relationship is linear with a y-intercept of 0.

This means that calling the function twice with half the number of glyphs has the same runtime cost as running the function once with the full set of glyphs. Therefore, batching the glyphs up into fewer calls has no runtime gain.
Comment 7 Myles C. Maxfield 2016-08-25 13:43:44 PDT
Created attachment 287003 [details]
Perf measurements - excluding glyph counts of > 256

If you exclude the data points that we will obviously never use (because they're too big) you can see the y-intercept isn't actually 0.
Comment 8 Myles C. Maxfield 2016-08-25 13:54:33 PDT
Created attachment 287008 [details]
Y-Intercept zoom

You can see that the y intercept is about 8 times bigger than the slope, which means we want at most 8 unused measurements per call. Any more unused measurements, and it would be cheaper just to make a new call. (However, this logic assumes that all the 8 unused measurements can be gathered in a single call.)

This data seems to indicate that we would still benefit from aggregation, but only if the group size is on the order of 8 glyphs.
Comment 9 Myles C. Maxfield 2016-08-25 14:02:15 PDT
Created attachment 287012 [details]
Get glyphs from characters

For fun, here is the similar graph for getting glyphs from characters.
Comment 10 Myles C. Maxfield 2016-08-25 14:06:24 PDT
Created attachment 287013 [details]
Y intercept for getting glyphs from characters

For getting glyphs from characters, the Y-intercept is about 5 times as big as the slope
Comment 11 Myles C. Maxfield 2016-08-25 14:10:51 PDT
This line of investigation needs to consider:
1) The hit rate of the current cache.
2) The number of glyphs / advances which are gathered but never used
Comment 12 Myles C. Maxfield 2016-08-25 15:03:23 PDT
Only 6.55% of the character -> glyph mappings we populate our GlyphPages with are ever actually read.

This seems to indicate the glyph page size is way too big.
Comment 13 Myles C. Maxfield 2016-08-25 15:09:20 PDT
(In reply to comment #12)
> Only 6.55% of the character -> glyph mappings we populate our GlyphPages
> with are ever actually read.
> 
> This seems to indicate the glyph page size is way too big.

Decreasing the glyph page size to 16 boosts this up to 25%.

Decreasing the glyph page size to 8 boosts this up to 36%.

(And, of course, decreasing the glyph page size to 1 boosts this up to 100%.)
Comment 14 Myles C. Maxfield 2016-08-25 15:16:33 PDT
(In reply to comment #13)
> (In reply to comment #12)
> > Only 6.55% of the character -> glyph mappings we populate our GlyphPages
> > with are ever actually read.
> > 
> > This seems to indicate the glyph page size is way too big.
> 
> Decreasing the glyph page size to 16 boosts this up to 25%.
> 
> Decreasing the glyph page size to 8 boosts this up to 36%.
> 
> (And, of course, decreasing the glyph page size to 1 boosts this up to 100%.)

Similarly,

With the current glyph page size, we populate 715 pages.

Decreasing the glyph page size to 16 makes us create 2879 pages.

Decreasing the glyph page size to 8 makes us create 4181 pages.
Comment 15 Myles C. Maxfield 2016-08-25 15:26:24 PDT
Decreasing the glyph page size from 256 to 16 causes:

2164 more glyph pages to be created (and therefore 2164 more calls to map characters to glyphs)

but, we then avoid creating 136976 unread mappings.

Given that one call is roughly the cost of creating an additional 5 mappings, this should definitely be a win.

This is actually a memory win too, because we'll be creating fewer glyph pages to remember.
Comment 16 Myles C. Maxfield 2016-08-25 17:05:26 PDT
Created attachment 287047 [details]
WIP
Comment 17 Myles C. Maxfield 2016-08-25 17:23:48 PDT
Created attachment 287050 [details]
WIP
Comment 18 Myles C. Maxfield 2016-08-26 02:20:11 PDT
Created attachment 287086 [details]
WIP
Comment 19 Myles C. Maxfield 2016-08-26 10:21:46 PDT
Created attachment 287117 [details]
WIP
Comment 20 Myles C. Maxfield 2016-08-26 11:00:35 PDT
Created attachment 287122 [details]
WIP
Comment 21 Myles C. Maxfield 2016-08-27 13:58:47 PDT
This latest patch causes PLT to improve.
Comment 22 Myles C. Maxfield 2016-08-27 14:42:44 PDT
Created attachment 287214 [details]
WIP
Comment 23 Myles C. Maxfield 2016-08-28 00:00:04 PDT
+css3/font-variant-all.html		reference images diff (0.47%)	image	pass	history
+fast/css/font-face-multiple-faces.html	expected actual diff pretty diff	images diff (3.28%)	text image+text	pass	history
+fast/css/font-face-synthetic-bold-italic.html	expected actual diff pretty diff	images diff (1.36%)	text image+text	pass	history
+fast/css/font-face-weight-matching.html	expected actual diff pretty diff	images diff (1.11%)	text image+text	pass	history
+fast/text/arabic-zwj-and-zwnj.html		reference images diff (0.04%)	image	pass	history
+fast/text/atsui-multiple-renderers.html	expected actual diff pretty diff	images diff (2.82%)	text image+text	pass	history
+fast/text/complex-initial-advance.html		reference images diff (0.05%)	image	pass	history
+fast/text/complex-synthetic-bold-space-width.html	expected actual diff pretty diff	images diff (0.2%)	text image+text	pass	history
+fast/text/drawBidiText.html	expected actual diff pretty diff	images diff (1.77%)	text image+text	pass	history
+fast/text/emoji-num-glyphs.html			timeout fail	fail	history
+fast/text/font-size-zero.html	expected actual diff pretty diff		text	pass	history
+fast/text/font-weights-zh.html	expected actual diff pretty diff	images diff (0.14%)	text image+text	pass	history
+fast/text/format-control.html	expected actual diff pretty diff	images diff (1.42%)	text image+text	pass	history
+fast/text/hyphenate-avoid-orphaned-word.html	expected actual diff pretty diff	images	text missing		history
+fast/text/hyphenate-character.html	expected actual diff pretty diff	images diff (5.8%)	text image+text	pass	history
+fast/text/hyphenate-first-word.html	expected actual diff pretty diff	images diff (0.29%)	text image+text	pass	history
+fast/text/hyphenate-limit-lines.html	expected actual diff pretty diff	images diff (4.04%)	text image+text	pass	history
+fast/text/hyphenate-locale.html	expected actual diff pretty diff	images diff (0.86%)	text image+text	pass	history
+fast/text/hyphens.html	expected actual diff pretty diff	images diff (5.41%)	text image+text	pass	history
+fast/text/line-initial-and-final-swashes.html	expected actual diff pretty diff	images diff (3.22%)	text image+text	pass	history
+fast/text/multiple-feature-properties.html		reference images diff (0.09%)	image	pass	history
+fast/text/narrow-non-breaking-space.html		reference images diff (0.01%)	image	pass	history
+fast/text/wide-zero-width-space.html	expected actual diff pretty diff	images diff (1.09%)	text image+text	pass	history
+fast/text/zero-font-size.html	expected actual diff pretty diff	images diff (0.82%)	text image+text	pass	history
+fast/text/zero-sized-fonts.html	expected actual diff pretty diff		text	pass	history
+fast/writing-mode/broken-ideographic-font.html	expected actual diff pretty diff	images diff (0.5%)	text image+text	pass	history
+fast/writing-mode/japanese-rl-text-with-broken-font.html	expected actual diff pretty diff	images diff (5.95%)	text image+text	pass	history
+fonts/cursive.html	expected actual diff pretty diff	images diff (0.73%)	text image+text	pass	history
+fonts/fantasy.html	expected actual diff pretty diff	images diff (0.79%)	text image+text	pass	history
+fonts/monospace.html	expected actual diff pretty diff	images diff (7.21%)	text image+text	pass	history
+imported/blink/fast/text/international/text-shaping-arabic.html		reference images diff (0.01%)	image	pass	history
+imported/w3c/web-platform-tests/html/dom/elements/global-attributes/dir_auto-textarea-mixed.html		reference images diff (0.19%)	image	pass	history
+imported/w3c/web-platform-tests/html/dom/elements/global-attributes/dir_auto-textarea-script-mixed.html		reference images diff (0.19%)	image	pass	history
+mathml/opentype/munderover-layout-resize.html		reference images diff (0.29%)	image	pass	history
+platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html	expected actual diff pretty diff	images diff (4.66%)	text image+text	pass	history
+svg/W3C-SVG-1.1-SE/filters-image-03-f.svg	expected actual diff pretty diff	images diff (0.43%)	text image+text	pass	history
+svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg	expected actual diff pretty diff	images diff (0.26%)	text image+text	pass	history
+svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg	expected actual diff pretty diff	images diff (0.24%)	text image+text	pass	history
+svg/W3C-SVG-1.1-SE/struct-use-14-f.svg	expected actual diff pretty diff	images diff (0.26%)	text image+text	pass	history
+svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg	expected actual diff pretty diff	images diff (1.42%)	text image+text	pass	history
+svg/W3C-SVG-1.1/fonts-glyph-02-t.svg	expected actual diff pretty diff	images diff (2.94%)	text image+text	pass	history
+svg/W3C-SVG-1.1/interact-cursor-01-f.svg	expected actual diff pretty diff	images diff (1.89%)	text image+text	pass	history
+svg/custom/glyph-selection-arabic-forms.svg	expected actual diff pretty diff	images diff (0.2%)	text image+text	pass	history
+svg/custom/svg-fonts-fallback.xhtml	expected actual diff pretty diff	images diff (0.6%)	text image+text	pass	history
+svg/text/font-size-below-point-five.svg	expected actual diff pretty diff	images diff (0.37%)	text image+text	pass	history
Comment 24 Myles C. Maxfield 2016-09-04 15:02:45 PDT
Created attachment 287922 [details]
WIP
Comment 25 Myles C. Maxfield 2016-09-07 12:26:33 PDT
Created attachment 288169 [details]
Testing CoreText
Comment 26 Myles C. Maxfield 2016-09-07 14:08:22 PDT
Created attachment 288183 [details]
Using CoreText measurements
Comment 27 Myles C. Maxfield 2016-09-07 17:14:36 PDT
Created attachment 288210 [details]
platformWidthForGlyph
Comment 28 Myles C. Maxfield 2016-09-07 19:06:19 PDT
Created attachment 288223 [details]
GlyphPage size
Comment 29 WebKit Commit Bot 2016-09-07 19:08:17 PDT
Attachment 288223 [details] did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the 'No new tests' and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 30 Build Bot 2016-09-07 20:07:38 PDT
Comment on attachment 288223 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
fast/text/multiple-feature-properties.html
fast/text/arabic-zwj-and-zwnj.html
svg/custom/svg-fonts-fallback.xhtml
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
mathml/presentation/non-bmp-operators-stretching.html
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 31 Build Bot 2016-09-07 20:07:43 PDT
Created attachment 288228 [details]
Archive of layout-test-results from ews103 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-yosemite  Platform: Mac OS X 10.10.5
Comment 32 Build Bot 2016-09-07 20:09:05 PDT
Comment on attachment 288223 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
fast/text/multiple-feature-properties.html
fast/text/arabic-zwj-and-zwnj.html
svg/custom/svg-fonts-fallback.xhtml
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
mathml/presentation/non-bmp-operators-stretching.html
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 33 Build Bot 2016-09-07 20:09:09 PDT
Created attachment 288230 [details]
Archive of layout-test-results from ews104 for mac-yosemite-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews104  Port: mac-yosemite-wk2  Platform: Mac OS X 10.10.5
Comment 34 Build Bot 2016-09-07 20:11:30 PDT
Comment on attachment 288223 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
fast/text/multiple-feature-properties.html
fast/text/arabic-zwj-and-zwnj.html
svg/custom/svg-fonts-fallback.xhtml
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
mathml/presentation/non-bmp-operators-stretching.html
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 35 Build Bot 2016-09-07 20:11:34 PDT
Created attachment 288231 [details]
Archive of layout-test-results from ews114 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews114  Port: mac-yosemite  Platform: Mac OS X 10.10.5
Comment 36 Myles C. Maxfield 2016-09-08 11:03:46 PDT
Created attachment 288282 [details]
GlyphPage size
Comment 37 WebKit Commit Bot 2016-09-08 11:06:43 PDT
Attachment 288282 [details] did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the 'No new tests' and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 38 Build Bot 2016-09-08 11:57:40 PDT
Comment on attachment 288282 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
mathml/presentation/non-bmp-operators-stretching.html
svg/custom/svg-fonts-fallback.xhtml
fast/text/arabic-zwj-and-zwnj.html
fast/text/multiple-feature-properties.html
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 39 Build Bot 2016-09-08 11:57:46 PDT
Created attachment 288293 [details]
Archive of layout-test-results from ews112 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews112  Port: mac-yosemite  Platform: Mac OS X 10.10.5
Comment 40 Build Bot 2016-09-08 12:04:18 PDT
Comment on attachment 288282 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
fast/text/multiple-feature-properties.html
fast/text/arabic-zwj-and-zwnj.html
svg/custom/svg-fonts-fallback.xhtml
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
mathml/presentation/non-bmp-operators-stretching.html
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 41 Build Bot 2016-09-08 12:04:23 PDT
Created attachment 288295 [details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106  Port: mac-yosemite-wk2  Platform: Mac OS X 10.10.5
Comment 42 Build Bot 2016-09-08 12:09:31 PDT
Comment on attachment 288282 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
imported/blink/fast/text/international/text-shaping-arabic.html
fast/text/multiple-feature-properties.html
fast/text/arabic-zwj-and-zwnj.html
svg/custom/svg-fonts-fallback.xhtml
css3/font-variant-all.html
fast/text/complex-initial-advance.html
svg/custom/glyph-selection-arabic-forms.svg
mathml/presentation/non-bmp-operators-stretching.html
platform/mac/fast/text/international/Geeza-Pro-vertical-metrics-adjustment.html
Comment 43 Build Bot 2016-09-08 12:09:35 PDT
Created attachment 288297 [details]
Archive of layout-test-results from ews102 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews102  Port: mac-yosemite  Platform: Mac OS X 10.10.5
Comment 44 Build Bot 2016-09-08 12:15:13 PDT
Comment on attachment 288282 [details]
GlyphPage size

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

New failing tests:
svg/W3C-SVG-1.1/fonts-glyph-02-t.svg
fast/text/arabic-zwj-and-zwnj.html
fast/text/international/arabic-tatweel-join.html
svg/custom/glyph-selection-arabic-forms.svg
fast/text/complex-initial-advance.html
mathml/presentation/non-bmp-operators-stretching.html
Comment 45 Build Bot 2016-09-08 12:15:19 PDT
Created attachment 288299 [details]
Archive of layout-test-results from ews123 for ios-simulator-elcapitan-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews123  Port: ios-simulator-elcapitan-wk2  Platform: Mac OS X 10.11.5
Comment 46 Myles C. Maxfield 2016-09-08 14:01:58 PDT
Created attachment 288319 [details]
GlyphPage size
Comment 47 WebKit Commit Bot 2016-09-08 14:04:43 PDT
Attachment 288319 [details] did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the 'No new tests' and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 48 Myles C. Maxfield 2016-09-08 14:54:00 PDT
Created attachment 288330 [details]
Patch
Comment 49 Simon Fraser (smfr) 2016-09-08 14:58:03 PDT
Comment on attachment 288330 [details]
Patch

0' / GlyphPage::size everywhere. That should be wrapped in pageIndexForGlyph() or something.
Comment 50 Myles C. Maxfield 2016-09-08 15:43:52 PDT
Created attachment 288343 [details]
Patch
Comment 51 Simon Fraser (smfr) 2016-09-08 15:52:43 PDT
Comment on attachment 288343 [details]
Patch

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

> Source/WebCore/platform/graphics/Font.cpp:155
> +    if (pageNumber >= 0x60 && pageNumber < 0x70 && font.shouldNotBeUsedForArabic())

Isn't his making assumptions about page size? Shouldn't you use pageNumberForCharacter() here?

Also would prefer pageIndexForCharacter everywhere.

> Source/WebCore/platform/graphics/Font.cpp:186
> +        } else if (pageNumber == 1) {
> +            // Control characters must not render at all.
> +            for (unsigned i = 0; i < 0x10; ++i)
> +                buffer[i] = zeroWidthSpace;
> +        } else if (start == (0x7F & ~(GlyphPage::size - 1))) {
> +            buffer[0x7F - start] = zeroWidthSpace;
> +        } else if (pageNumber >= 8 && pageNumber < 10) {
> +            for (unsigned i = 0; i < GlyphPage::size; ++i)
> +                buffer[i] = zeroWidthSpace;
> +        } else if (pageNumber == 10) {
> +            buffer[softHyphen - start] = zeroWidthSpace;

I think you could write all this code in terms of glyphIndex % pageSize. Or hide that in a function that would allow you to support a larger first page in future.

> Source/WebCore/platform/graphics/FontCascadeFonts.cpp:431
> +    const unsigned pageNumber = GlyphPage::pageNumberForCharacter(c);

pageIndex

> Source/WebCore/platform/graphics/GlyphMetricsMap.h:57
> +        static const size_t size = 16;

Should you static assert the this is the same as GlyphPage::size?

> Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:639
> +    CGFontRenderingStyle style = kCGFontRenderingStyleAntialiasing | kCGFontRenderingStyleSubpixelPositioning | kCGFontRenderingStyleSubpixelQuantization | kCGFontAntialiasingStyleUnfiltered;
> +
> +#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000)
> +    if (platformData().size()) {
> +        CTFontOrientation orientation = horizontal || m_isBrokenIdeographFallback ? kCTFontOrientationHorizontal : kCTFontOrientationVertical;
> +        // FIXME: Remove this special-casing when <rdar://problem/28197291> is fixed.
> +        if (CTFontIsAppleColorEmoji(m_platformData.ctFont()))
> +            CTFontGetAdvancesForGlyphs(m_platformData.ctFont(), orientation, &glyph, &advance, 1);
> +        else
> +            CTFontGetUnsummedAdvancesForGlyphsAndStyle(m_platformData.ctFont(), orientation, style, &glyph, &advance, 1);
> +    }
> +
> +#else

This seems unrelated.
Comment 52 Myles C. Maxfield 2016-09-08 17:09:27 PDT
Comment on attachment 288343 [details]
Patch

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

>> Source/WebCore/platform/graphics/GlyphMetricsMap.h:57
>> +        static const size_t size = 16;
> 
> Should you static assert the this is the same as GlyphPage::size?

It doesn't have to be the same. Reducing this size is a memory win (because most of the entries in GlyphMetricsPages are unread).

>> Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:639
>> +#else
> 
> This seems unrelated.

This is part of the performance improvements.
Comment 53 Myles C. Maxfield 2016-09-08 17:21:54 PDT
Created attachment 288365 [details]
Patch
Comment 54 Simon Fraser (smfr) 2016-09-08 17:32:15 PDT
Comment on attachment 288365 [details]
Patch

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

> Source/WebCore/platform/graphics/GlyphPage.h:81
> +    static bool pageNumberIsUsedForArabic(unsigned pageNumber) { return pageNumber >= 0x60 && pageNumber < 0x70; }

Still have assumptions about page size here.
Comment 55 Myles C. Maxfield 2016-09-08 17:39:07 PDT
Created attachment 288368 [details]
Patch for committing
Comment 56 WebKit Commit Bot 2016-09-08 17:48:03 PDT
Comment on attachment 288368 [details]
Patch for committing

Rejecting attachment 288368 [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-01', 'validate-changelog', '--check-oops', '--non-interactive', 288368, '--port=mac']" exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/2037790
Comment 57 Myles C. Maxfield 2016-09-09 01:00:54 PDT
Created attachment 288392 [details]
Patch for committing
Comment 58 Myles C. Maxfield 2016-09-09 01:02:09 PDT
Created attachment 288393 [details]
Patch for committing
Comment 59 WebKit Commit Bot 2016-09-09 01:35:45 PDT
Comment on attachment 288393 [details]
Patch for committing

Clearing flags on attachment: 288393

Committed r205703: <http://trac.webkit.org/changeset/205703>
Comment 60 Tim Nguyen (:ntim) 2024-02-25 19:19:37 PST
*** Bug 152293 has been marked as a duplicate of this bug. ***