Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fonts: unicode glyph measurments #156

Open
Thorin-Oakenpants opened this issue May 6, 2022 · 17 comments
Open

fonts: unicode glyph measurments #156

Thorin-Oakenpants opened this issue May 6, 2022 · 17 comments
Labels

Comments

@Thorin-Oakenpants
Copy link
Contributor

Perf

Why do we measure six styles when we only need five

	let styles = ["none","sans-serif","serif","monospace","cursive","fantasy"]

we already know the default body style, which is always sans-serif, serif or monospace (I think) and there can't be any other styles other than these five above.

@abrahamjuliot .. am I missing something here?


Improve glyphs list

glyphs list

For each unicode version, get one new assigned code point per script since, say 2006. I suspect the glyphs David ended up with were recently assigned - they're certainly spread over scripts and probably unicode versions - but I have not checked

I plan to create a unicode version PoC - similar to https://arkenfox.github.io/TZP/tests/fontscripts.html, but only deal with additions since say 2005 (large and new script block additions I'll only use a small subset - we'll see how we go) and grouped by unicode version (then script)

I'll include recent emoji additions, I just don't want the test to get too massive


emojis

I also plan to create an emoji test PoC by version. I think it's 3.3k code points. I want to do this as a separate FP and data test for Tor Browser

@abrahamjuliot
Copy link
Collaborator

default body style

I'm not sure on the defaults, but there might be more worth testing here, like system-ui and math.

@Thorin-Oakenpants
Copy link
Contributor Author

Hmmm, I need to think more about these styles

@Thorin-Oakenpants
Copy link
Contributor Author

Thorin-Oakenpants commented May 19, 2022

Why do we measure six styles when we only need five

From the paper

Each code point is drawn six times, once with no font specified (default), then once in each of the five generic CSS families (sans-serif, serif, monospace, cursive, fantasy) [14, Section 15.3.1]. Generic font family names are usually used in a CSS rule to express a rough idea of how text should look, when no specific matching named font is found. These generic CSS family names are mapped to concrete fonts at the browser’s discretion, depending in part on user preferences and what fonts are available.

That doesn't explain "none", only that they're not setting a named font. "none"

Edit: also paper is from 2015 and Unicode version was 7.0.0

The program renders in turn 125,776 Unicode code points over the course of a few minutes. The list consists of every code point in every assigned block of Unicode 7.0.0 [25], with the exception that only the first 256 code points are included from the two Supplementary Private Use Area blocks (U+F0000–U+FFFFF and U+100000–U+10FFFF), which would otherwise contain 65,536 code points each

@Thorin-Oakenpants Thorin-Oakenpants changed the title unicode glyph measurments fonts: unicode glyph measurments May 20, 2022
@Thorin-Oakenpants
Copy link
Contributor Author

https://web-platform-tests.org/writing-tests/ahem.html
https://github.com/Hydrock/AhemFont
https://hydrock.github.io/AhemFont/

just an idea for when I get around to textmetrics - besides 1/128ths and combining widths etc we could detect textmetric BS by measuring known results (zoom etc may not make this stable) or using these for the combining (because you never know what fonts and chars will do)

We can create a special font like Ahem and blob it (like the woff2 test)

@Thorin-Oakenpants
Copy link
Contributor Author

some notes

looping char then font-family is faster than font-family then char (about a 25% perf hit AFAICT), anyway, I now collect the detail data and group it by font-family (and for now hash it for easy compare)

This shows me that some font-families don't make a difference: depending on your default proportional font and/or if system-ui is enabled (I removed none (default) but added system-ui), but we can eliminate some of these

at least I think it's default proportional (which can vary based on language) that it's falling back to

	let styles = ["cursive","fantasy","monospace","sans-serif","serif","system-ui"]
	// some styles match: we should detect those and remove redundant
		// we do not need style 'none' as it == default proportional (serif for me using en-US)
		// e.g. if fantasy matches sans-serif (for me using en-US)
		// e.g. if system-ui is not enabled it matches default proportional (serif for me using en-US)

in our character-then-style loop, like font measurements, what takes time is asking for measurements, not settings things. And like font sizes, adding additional methods doesn't really add anything: e.g. asking for textmetrics + clientrect as well as offset is negligible

So what speeds up pref is reducing measurements: either remove styles or reduce chars tested

here's myFF nightly: to show we have redundancy that eats perf

  • none matches serif
  • fantasy matches sans-serif
  • system-ui = unique (for me), but not when system-ui hasn't been implemented/enabled
    example

so we could run a mini test of sorts to eliminate what is redundant - maybe an offsetWidth/Height test?

@Thorin-Oakenpants
Copy link
Contributor Author

actually, I wasn't hashing correctly, they are all different

e.g.fantasy vs sans-serif diffs

Array [ "0x097F", 789.066650390625 ]
Array [ "0x0D02", 1936.5333251953125 ]
Array [ "0x532D", 1988.2833251953125 ]

Array [ "0x097F", 1199.2166748046875 ]
Array [ "0x0D02", 2543.949951171875 ]
Array [ "0x532D", 2000 ]

well, fuck, that's suck for improving perf

@Thorin-Oakenpants
Copy link
Contributor Author

ok, we definitely do not need none. The reason it is different/unique is because we are telling each font to use it's default generic font-family, so we are getting a mixed result. And each font-family may be a different font used

For example, for the char 0x097F, this is DEVANAGARI, and for firefox on windows 7 this is as follows: it is default sans-serif, and when in sans-serif or monospace it uses Mangal font, but in serif it uses Kokila font

So anything in none is already going to be present in sans-serif, serif or monospace, and none is just a mix of those: for example

none vs serif
=============
offset
  0x097F, 1199, 3359 v 0x097F, 873, 2662
  0x302E, 3000, 2639 v 0x302E, 3000, 2660
  0x3095, 2000, 2639 v 0x3095, 2000, 2660
  0x532D, 2000, 2639 v 0x532D, 2000, 2300

I can confirm that the sizes shown in none correspond to those in sans-serif.

What this does perhaps add is entropy on what the default font-family is for some scripts, but I doubt this is worth it (per OS) and likely not changed

Still working out if fantasy is worth it

some diff outputs / char info

chars involved
===
0x097F : DEVANAGARI LETTER BBA
	Mangal (sans-serif/monospace) Kokila (serif)
  default sans-serif
0x302E : HANGUL SINGLE DOT TONE MARK
  Microsoft JhengHei
0x3095 : HIRAGANA LETTER SMALL KA
  Microsoft YaHei
0x532D : CJK Unified Ideographs
  Microsoft YaHei
0x0D02 : MALAYALAM SIGN ANUSVARA
  Kartika
  default serif

none vs serif
=============
offset
  0x097F, 1199, 3359 v 0x097F, 873, 2662
  0x302E, 3000, 2639 v 0x302E, 3000, 2660
  0x3095, 2000, 2639 v 0x3095, 2000, 2660
  0x532D, 2000, 2639 v 0x532D, 2000, 2300
clientrect
  0x097F, 1199.2166748046875, 3359 v 0x097F, 873.0499877929688, 2661.5
  0x302E, 3000, 2639 v 0x302E, 3000, 2660
  0x3095, 2000, 2639 v 0x3095, 2000, 2660
  0x532D, 2000, 2639 v 0x532D, 2000, 2300
width
  0x097F, 1199.2166748046875 v 0x097F, 873.0499877929688
actualBoundingBoxAscent
  0x097F, 1289.0625 v 0x097F, 976.5625
  0x3095, 1153.3203125 v 0x3095, 1196.2890625
  0x532D, 1549.8046875 v 0x532D, 1625
actualBoundingBoxDescent
  0x097F, 271.484375 v 0x097F, 165.0390625
  0x3095, 58.59375 v 0x3095, 28.3203125
  0x532D, 184.5703125 v 0x532D, 156.25
actualBoundingBoxLeft
  0x097F, 1.953125 v 0x097F, 87.890625
  0x302E, -242.1875 v 0x302E, -301.7578125
  0x3095, -419.921875 v 0x3095, -328.125
  0x532D, -183.59375 v 0x532D, -148.4375
actualBoundingBoxRight
  0x097F, 1267.578125 v 0x097F, 941.40625
  0x3095, 1692.3828125 v 0x3095, 1677.734375
  0x532D, 1955.078125 v 0x532D, 1812.5

sans-serif v fantasy
====================
offset
  0x097F, 1199, 3359 v 0x097F, 789, 2600
  0x0D02, 2544, 2853 v 0x0D02, 1937, 2680
  0x532D, 2000, 2639 v 0x532D, 1988, 2680
clientrect
  0x097F, 1199.2166748046875, 3359 v 0x097F, 789.066650390625, 2600
  0x0D02, 2543.949951171875, 2853 v 0x0D02, 1936.5333251953125, 2680
  0x532D, 2000, 2639 v 0x532D, 1988.2833251953125, 2680
width
  0x097F, 1199.2166748046875 v 0x097F, 789.066650390625
  0x0D02, 2543.949951171875 v 0x0D02, 1936.5333251953125
  0x532D, 2000 v 0x532D, 1988.2833251953125
actualBoundingBoxAscent
  0x097F, 1289.0625 v 0x097F, 976.5625
  0x0D02, 1194.3359375 v 0x0D02, 1177.734375
  0x532D, 1549.8046875 v 0x532D, 1583.984375
actualBoundingBoxDescent
  0x097F, 271.484375 v 0x097F, 200.1953125
  0x0D02, 20.5078125 v 0x0D02, 17.578125
  0x532D, 184.5703125 v 0x532D, 51.7578125
actualBoundingBoxLeft
  0x097F, 1.953125 v 0x097F, 5.859375
  0x0D02, -87.890625 v 0x0D02, -171.875
  0x532D, -183.59375 v 0x532D, -169.921875
actualBoundingBoxRight
  0x097F, 1267.578125 v 0x097F, 857.421875
  0x0D02, 2425.7875 v 0x0D02, 1846.684375
  0x532D, 1955.078125 v 0x532D, 1881.8359375

@Thorin-Oakenpants
Copy link
Contributor Author

By grouping by char then size, I am able to see if any styles are unique, and except for fantasy, they all offer a lot of unique sizes

I wonder what makes 0x097F, 0x0D02, 0x532D change size in fantasy and 0x532D in textmetrics fantasy. This matches my earlier output of fantasy vs serif, but at least this new code shows what is unique. Is fantasy worth it? I wonders...

Note: OT: I don't believe the chars used for textmetrics (excluding width) are all that great, but it adds minimal perf since we're looping thru and doing offset and clientrect anyway. If we ran a separate test with a different list of fntCodes, we'd be repeating all that perf

unique per char

unique none (and none added to styles to check)
  nothing found - as I said earlier, this is a mix of serif, sans-serif and monospace

unique fantasy
offset
  0x097F, 0x0D02, 0x532D
clientrect
  0x097F, 0x0D02, 0x532D
width
  0x532D
actualBoundingBoxAscent
  0x532D
actualBoundingBoxDescent
  0x532D
actualBoundingBoxLeft
  0x532D
actualBoundingBoxRight
  0x532D

unique monospace
offset
  0x007F, 0x0218, 0x058F, 0x05C6, 0x0700, 0x08E4, 0x09B3, 0x115A, 0x17DD, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BD, 0x2C7B, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
clientrect
  0x007F, 0x0218, 0x058F, 0x05C6, 0x0700, 0x08E4, 0x09B3, 0x115A, 0x17DD, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BD, 0x2C7B, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
width
  0x007F, 0x0218, 0x058F, 0x05C6, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20B0, 0x20BD, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
actualBoundingBoxAscent
  0x007F, 0x0218, 0x058F, 0x05C6, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20BD, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
actualBoundingBoxDescent
  0x0218, 0x20B0
actualBoundingBoxLeft
  0x0218, 0x05C6, 0x20B0
actualBoundingBoxRight
  0x007F, 0x0218, 0x058F, 0x05C6, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20B0, 0x20BD, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF

unique cursive
offset
  0x007F, 0x0218, 0x058F, 0x05C6, 0x0700, 0x08E4, 0x097F, 0x09B3, 0x0B82, 0x0D02, 0x10A0, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2581, 0x2619, 0x2B06, 0x2C7B, 0x302E, 0x3095, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFBEE, 0xFFF9, 0xFFFD, 0xFFFF
clientrect
  0x007F, 0x0218, 0x058F, 0x05C6, 0x0700, 0x08E4, 0x097F, 0x09B3, 0x0B82, 0x0D02, 0x10A0, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2581, 0x2619, 0x2B06, 0x2C7B, 0x302E, 0x3095, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFBEE, 0xFFF9, 0xFFFD, 0xFFFF
width
  0x007F, 0x0218, 0x058F, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20BD, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
actualBoundingBoxAscent
  0x007F, 0x0218, 0x058F, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20BD, 0x2C7B, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
actualBoundingBoxDescent
  0x007F, 0x0218, 0x058F, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20BD, 0x2C7B, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF
actualBoundingBoxLeft
  0x0218, 0x532D
actualBoundingBoxRight
  0x007F, 0x0218, 0x058F, 0x08E4, 0x09B3, 0x1C50, 0x1CDA, 0x20BD, 0x2C7B, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFF

@Thorin-Oakenpants
Copy link
Contributor Author

Thorin-Oakenpants commented Sep 6, 2022

fantasy unique on chrome

offset
  0x007F, 0x0218, 0x058F, 0x05C6, 0x061C, 0x0700, 0x08E4, 0x09B3, 0x0D02, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFD, 0xFFFF
clientrect
  0x007F, 0x0218, 0x058F, 0x05C6, 0x061C, 0x0700, 0x08E4, 0x09B3, 0x0D02, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2C7B, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFFF9, 0xFFFD, 0xFFFF
width
  0x0218
actualBoundingBoxAscent
  0x0218
actualBoundingBoxDescent
  0x0218
actualBoundingBoxLeft
  0x0218
fontBoundingBoxAscent
  0x007F, 0x0218, 0x058F, 0x05C6, 0x061C, 0x0700, 0x08E4, 0x097F, 0x09B3, 0x0B82, 0x0D02, 0x10A0, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2581, 0x2619, 0x2B06, 0x2C7B, 0x302E, 0x3095, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFBEE, 0xFFF9, 0xFFFD, 0xFFFF
fontBoundingBoxDescent
  0x007F, 0x0218, 0x058F, 0x05C6, 0x061C, 0x0700, 0x08E4, 0x097F, 0x09B3, 0x0B82, 0x0D02, 0x10A0, 0x115A, 0x17DD, 0x1950, 0x1C50, 0x1CDA, 0x1D790, 0x1E9E, 0x20B0, 0x20B8, 0x20B9, 0x20BA, 0x20BD, 0x20E3, 0x21E4, 0x23AE, 0x2425, 0x2581, 0x2619, 0x2B06, 0x2C7B, 0x302E, 0x3095, 0x532D, 0xA73D, 0xA830, 0xF003, 0xF810, 0xFBEE, 0xFFF9, 0xFFFD, 0xFFFF

@Thorin-Oakenpants
Copy link
Contributor Author

note: 13 of the 43 chars are tofu on my windows FF (no RFP), and 21 with RFP (font vis level 1)

0x058F ֏
0x08E4 ࣤ
0x09B3 ঳
0x1C50 ᱐ 
0x1CDA ᳚
0x20BD ₽
0x2C7B ⱻ 
0xA73D ꜽ 
0xA830 ꠰ 
0xF003  
0xF810  
0xFFF9  
0xFFFF

So two things

  • my tests are not 100%, but enough to decide that none doesn't matter and fantasy may be a waste of time.
  • IDK if this will speed anything up, but we could identify tofu first to reduce the char list: the trouble is, that eats perf, and needs to be done on each run

@Thorin-Oakenpants
Copy link
Contributor Author

Thorin-Oakenpants commented Sep 7, 2022

more notes: enabled dom.textMetrics.baselines.enabled, dom.textMetrics.emHeight.enabled, dom.textMetrics.fontBoundingBox.enabled

FF

  • alphabeticBaseline - every style + char = -0
  • emHeightAscent/Descent + fontBoundingBoxAscent/Descent + hangingBaseline + ideographicBaseline
    • every char = the same, but different per style (except fantasy = sans-serif)

Edit: this seems to be the same for chrome, except fantasy is not the same as sans-serif

@Thorin-Oakenpants
Copy link
Contributor Author

i tweaked the local test: so what does each style bring in terms of new unique sizes PER CHAR, per measure method

e.g. in clientrect/offset 42 out of 43 chars have a measurement that the other styles do not match. In monospace this is 25, in serif it is 25, etc

data

what is interesting here is that sans-serif seems to do very little - except for that one char (and 13 are tofu so it may be more), it adds nothing, as the measurements are already recorded elsewhere

@Thorin-Oakenpants
Copy link
Contributor Author

and if we add none, it cancels out sans-serif
and if we swap sans-serif for none, it just matches what sans-serif would be

moredata

@Thorin-Oakenpants
Copy link
Contributor Author

Ahh, right, the penny drops: because fantasy + sans-serif share a lot, so we need one of them. Fantasy + no sans-serif added 29 unique measurements, sans-serif + no fantasy added 25 - IDK what that means. When both used, they both still had some unique measurements : fantasy 3 and sans-serif 1

so they seem to cancel each other out and we only need one, but which one, and it may change based on fonts used (and char support e.g. my 13 tofus), and if the font has a serif vs non-serif (such as Tor Browser added a heap of noto + noto sans fonts)

I'm intrigued as to why fantasy only affects a couple of chars

evenmoredata

@Thorin-Oakenpants
Copy link
Contributor Author

#156 (comment)

https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Unicode_chart U+FFFF is a noncharacter: (code points that are guaranteed never to be assigned as encoded

@Thorin-Oakenpants
Copy link
Contributor Author

FYI: I thought height might not add much entropy.. but

for example: go to https://browserleaks.com/fonts - run twice due to lazy font fallback loading

heres FF nightly (sorted by sans-serif width)

  • I initially thought it only affected the 0s wondered if U+061C height was worth it
  • but as you can see the 0s + 864s + 1600s differ, but the 1445s are the same
    • so yeah, height matters
    • ps: removing the height measurement doesn't improve perf anyway
glyph	sans-serif	serif		monospace	cursive

U+061C	0,0		0,0		0,0		0,0
U+20E3	0,2129		0,2129		0,1729		0,2229
U+05C6	564,1840	488,1840	780,1586	564,2229	
U+20BA	641,1953	641,1953	521,1587	641,2229
U+FFFF	706,1840	641,1840	715,1522	749,2229 <- tofu
U+20B0	834,1840	800,1840	715,1522	834,2229
U+0700	846,1977	846,1962	687,1604	846,2265
U+1950	864,2035	864,2035	702,1653	864,2314  <-- 864 group
U+23AE	864,2129	864,2129	702,1729	864,2229  <-- 864 group
U+2B06	874,2129	874,2129	710,1729	874,2229
U+20B9	890,1840	890,1840	723,1522	890,2229
U+097F	959,2688	698,2130	780,2184	631,2368
U+0B82	960,2144	1684,2195	1368,1784	960,2229
U+20B8	977,1840	977,1840	794,1522	977,2229
U+17DD	995,1841	995,1855	808,1524	995,2229
U+10A0	1059,2144	1059,2144	861,1742	1059,2229
U+0218	1067,1840	890,1840	715,1522	1109,2229
U+1D790	1120,1840	1120,1840	910,1522	1120,2229
U+1E9E	1124,1840	1141,1840	913,1522	1124,2229
U+FBEE	1184,2144	1184,2144	962,1742	1184,2229
U+2425	1277,2129	1277,2129	1037,1729	1277,2229
U+21E4	1445,2129	1445,2129	1174,1729	1445,2229  <-- 1445 group
U+2619	1445,2129	1445,2129	1174,1729	1445,2229  <-- 1445 group
U+2581	1501,2129	1501,2129	1219,1729	1501,2229
U+115A	1600,1840	1600,1840	1300,1522	1600,2229  <-- 1600 group
U+532D	1600,2112	1600,1840	1300,1522	1600,2229  <-- 1600 group
U+3095	1600,2112	1600,2128	1300,1729	1600,2229  <-- 1600 group
U+FFFD	1600,2144	1600,2144	1300,1742	1600,2229  <-- 1600 group
U+0D02	2035,2282	2035,2282	1654,1854	1549,2229
U+302E	2400,2112	2400,2128	1950,1729	2400,2229

other tofus
U+007F	706,1840	641,1840	715,1522	749,2229
U+058F	706,1840	641,1840	715,1522	749,2229
U+08E4	706,1840	641,1840	715,1522	749,2229
U+09B3	706,1840	641,1840	715,1522	749,2229
U+1C50	706,1840	641,1840	715,1522	749,2229
U+1CDA	706,1840	641,1840	715,1522	749,2229
U+20BD	706,1840	641,1840	715,1522	749,2229
U+2C7B	706,1840	641,1840	715,1522	749,2229
U+A73D	706,1840	641,1840	715,1522	749,2229
U+A830	706,1840	641,1840	715,1522	749,2229
U+F003	706,1840	641,1840	715,1522	749,2229
U+F810	706,1840	641,1840	715,1522	749,2229
U+FFF9	706,1840	641,1840	715,1522	749,2229

@Thorin-Oakenpants
Copy link
Contributor Author

Thorin-Oakenpants commented Sep 9, 2022

PS: fangsong doesn't add anything add much (I tested with a typo, fangsang)

actualBoundingBoxAscent: Array(3) [ "0x2581", "0x532D", "0xFFFF" ]
​​actualBoundingBoxDescent: Array(3) [ "0x2581", "0x532D", "0xFFFF" ]
​​actualBoundingBoxLeft: Array [ "0x2581" ]
​​actualBoundingBoxRight: Array(3) [ "0x2581", "0x532D", "0xFFFF" ]
​​clientrect: Array [ "0x2581", "0xFFFF" ]
​​offset: Array [ "0x2581", "0xFFFF" ]
​​width: Array [ "0x2581", "0xFFFF" ]

so a little like fantasy: a couple more data points per method (eating a lot of perf) and entropy added in this test is unknown. We can also grab some fangsong entropy in https://arkenfox.github.io/TZP/tests/lineheight.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

No branches or pull requests

2 participants