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:
Seigo Nonaka
2019-02-04 21:07:41 -08:00
parent 49181399d5
commit 1090f49c5a
2 changed files with 14 additions and 0 deletions

View File

@@ -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 {

View File

@@ -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;