NEW297088
[Skia] Implement Font::applyTransforms with HarfBuzz
https://bugs.webkit.org/show_bug.cgi?id=297088
Summary [Skia] Implement Font::applyTransforms with HarfBuzz
Fujii Hironori
Reported 2025-08-07 16:53:32 PDT
Implement Font::applyTransforms with HarfBuzz See also: Bug 206208 – [Cocoa] Delete the complex text codepath 😮 Bug 228363 – [Win][Uniscribe] Implement Font::applyTransforms
Attachments
Patch to perftest.py (1.16 KB, patch)
2025-08-12 07:03 PDT, Fujii Hironori
no flags
PerformanceTests results (92.09 KB, application/zip)
2025-08-12 07:04 PDT, Fujii Hironori
no flags
PerformanceTestsResults.html (239.57 KB, text/html)
2025-08-13 04:26 PDT, Fujii Hironori
no flags
PerformanceTestsResults.html (239.56 KB, text/html)
2025-08-13 04:39 PDT, Fujii Hironori
no flags
perf test result (311.49 KB, text/html)
2025-08-18 01:15 PDT, Fujii Hironori
no flags
Patch to use complex text code path as simple text code path (4.40 KB, patch)
2025-08-19 01:50 PDT, Fujii Hironori
no flags
perf test result (311.68 KB, text/html)
2025-08-19 01:51 PDT, Fujii Hironori
no flags
perf test result of complex-only v. HarfBuzzShaper (310.91 KB, text/html)
2025-08-21 21:38 PDT, Fujii Hironori
no flags
Fujii Hironori
Comment 1 2025-08-07 17:01:00 PDT
Fujii Hironori
Comment 2 2025-08-07 17:06:24 PDT
See also: Bug 167557 – [FreeType] Enable ligatures and kerning in the fast font layout path
Fujii Hironori
Comment 3 2025-08-12 07:03:20 PDT
Created attachment 476368 [details] Patch to perftest.py
Fujii Hironori
Comment 4 2025-08-12 07:04:49 PDT
Created attachment 476369 [details] PerformanceTests results I compared the performance of 3 builds: complex : complex text code path (the current implementation) simple : simple text code path without applyTransforms (the old implementation) patched : simple text code path with applyTransforms (my WIP patch) > ./Tools/Scripts/run-perf-tests --platform=gtk --release --no-build --repeat=1 --description=$1 --output-json-path=$2/perf.json --no-show-results Layout
Fujii Hironori
Comment 5 2025-08-13 04:26:00 PDT
Created attachment 476386 [details] PerformanceTestsResults.html
Fujii Hironori
Comment 6 2025-08-13 04:39:00 PDT
Created attachment 476387 [details] PerformanceTestsResults.html
Radar WebKit Bug Importer
Comment 7 2025-08-14 16:54:13 PDT
Fujii Hironori
Comment 8 2025-08-17 18:51:10 PDT
Test cases using small-caps are failing with the WIP patch. fast/text/atsui-multiple-renderers.html [ Failure ] fast/text/atsui-small-caps-punctuation-size.html [ Failure ] capitalizing is done in WidthIterator::advanceInternal here. https://github.com/WebKit/WebKit/blob/11a2031c8c6112a0eabcec1e6530b543827903cc/Source/WebCore/platform/graphics/WidthIterator.cpp#L420 However, capitalizedCharacter isn't passed to Font::applyTransforms. To support small-caps, WidthIterator has to be modified.
Fujii Hironori
Comment 9 2025-08-18 01:15:45 PDT
Created attachment 476442 [details] perf test result I restored HarfBuzzShaper, and compare the performance. https://github.com/fujii/WebKit/tree/eng/restore-HarfBuzzShaper
Fujii Hironori
Comment 10 2025-08-19 01:50:54 PDT
Created attachment 476447 [details] Patch to use complex text code path as simple text code path The performace difference between the complex and simple text code paths doesn't come from the code paths. But, it comes from WebCore. So, I don't need to implement applyTransforms. Just using the complex code path as the simple code path gains the performance boost.
Fujii Hironori
Comment 11 2025-08-19 01:51:18 PDT
Created attachment 476448 [details] perf test result
Fujii Hironori
Comment 12 2025-08-21 21:38:09 PDT
Created attachment 476486 [details] perf test result of complex-only v. HarfBuzzShaper I compared complex-only (comment#10) and HarfBuzzShaper (comment#10 + comment#9). HarfBuzzShaper is better.
Carlos Garcia Campos
Comment 13 2025-09-16 05:37:44 PDT
Note You need to log in before you can comment on or make changes to this bug.