diff options
| author | 2019-02-04 21:07:41 -0800 | |
|---|---|---|
| committer | 2019-02-04 21:07:41 -0800 | |
| commit | 1090f49c5aada61b7ed6eb7743e34cd4ea937b46 (patch) | |
| tree | b1d1a92b1546a6a7f3999d583f0d6e9980a4d300 | |
| parent | 49181399d571fa6b8f396ed29b2183ded4a1d565 (diff) | |
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
| -rw-r--r-- | libs/hwui/hwui/MinikinSkia.cpp | 9 | ||||
| -rw-r--r-- | libs/hwui/hwui/MinikinSkia.h | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp index 375f5bc9df37..6a12a203b9f8 100644 --- a/libs/hwui/hwui/MinikinSkia.cpp +++ b/libs/hwui/hwui/MinikinSkia.cpp @@ -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 { diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h index ad46b2391cac..90f7d48a47ee 100644 --- a/libs/hwui/hwui/MinikinSkia.h +++ b/libs/hwui/hwui/MinikinSkia.h @@ -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; |