Implement batch horizontal advances callback
The SkFont's overhead is not negligible if we performs glyph width
computation one-by-one. HarfBuzz now supports batch width request,
so let's use it for aoviding SkFont's overhead.
Here is the raw performance scores:
android.text.StaticLayoutPerfTest:
create
RandomText Balanced Hyphenation : 16,311 -> 15,253: (-1058, -6.5%)
RandomText Balanced NoHyphenation : 6,679 -> 6,164: ( -515, -7.7%)
RandomText Greedy Hyphenation : 6,614 -> 6,083: ( -531, -8.0%)
RandomText Greedy NoHyphenation : 6,613 -> 6,090: ( -523, -7.9%)
Bug: 123907498
Test: minikin_tests
Test: hwui_unit_tests
Test: atest CtsTextTestCases
Test: atest CtsGraphicsTestCases
Test: atest CtsWidgetTestCases
Test: TreeHugger
Change-Id: I5a33e24aa0b5d865f02518c5e80177d5a7706593
This commit is contained in:
@@ -65,6 +65,15 @@ float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id, const minikin::Mi
|
||||
return skWidth;
|
||||
}
|
||||
|
||||
void MinikinFontSkia::GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count,
|
||||
const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery,
|
||||
float* outAdvances) const {
|
||||
SkFont skFont;
|
||||
MinikinFontSkia_SetSkiaFont(this, &skFont, paint, fakery);
|
||||
skFont.getWidths(glyph_ids, count, outAdvances);
|
||||
}
|
||||
|
||||
void MinikinFontSkia::GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id,
|
||||
const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery) const {
|
||||
|
||||
@@ -35,6 +35,11 @@ public:
|
||||
float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery) const override;
|
||||
|
||||
void GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count,
|
||||
const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery,
|
||||
float* outAdvances) const override;
|
||||
|
||||
void GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id,
|
||||
const minikin::MinikinPaint& paint,
|
||||
const minikin::FontFakery& fakery) const override;
|
||||
|
||||
Reference in New Issue
Block a user