diff options
author | Seigo Nonaka <nona@google.com> | 2018-03-23 12:38:08 -0700 |
---|---|---|
committer | Seigo Nonaka <nona@google.com> | 2018-03-23 12:55:45 -0700 |
commit | 2adb04f8edb61857a2c53c16ced533df47be67c3 (patch) | |
tree | cbeec3391bb98477a49d8e0b94a461ba43326de8 | |
parent | 048b45f69c2a6a43329fc8efd056666f427a62d4 (diff) | |
download | minikin-2adb04f8edb61857a2c53c16ced533df47be67c3.tar.gz |
Discard hyphenation context
During line breaking, the hyphenated pieces are computed with context.
On the other hand, during drawing, the context is not available.
This ends up with cache miss during drawing.
To increase the cache hit and making line break correct, remove context
during line breaking.
Bug: 65024629
Test: atest CtsWidgetTestCases:EditTextTest
CtsWidgetTestCases:TextViewFadingEdgeTest
FrameworksCoreTests:TextViewFallbackLineSpacingTest
FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest
CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest
CtsTextTestCases FrameworksCoreTests:android.text
CtsWidgetTestCases:TextViewPrecomputedTextTest
Test: minikin_test
Change-Id: I27efa55825aa5060d742020661f831c69697aaf5
-rw-r--r-- | libs/minikin/LineBreakerUtil.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libs/minikin/LineBreakerUtil.h b/libs/minikin/LineBreakerUtil.h index 406de7b..64f4371 100644 --- a/libs/minikin/LineBreakerUtil.h +++ b/libs/minikin/LineBreakerUtil.h @@ -87,14 +87,16 @@ inline void populateHyphenationPoints( } auto hyphenPart = contextRange.split(i); - const float first = run.measureHyphenPiece( - textBuf /* text */, hyphenPart.first /* hyphenated piece range */, - StartHyphenEdit::NO_EDIT /* start hyphen edit */, - editForThisLine(hyph) /* end hyphen edit */, nullptr /* advances */, pieces); - const float second = run.measureHyphenPiece( - textBuf /* text */, hyphenPart.second /* hyphenated piece range */, - editForNextLine(hyph) /* start hyphen edit */, - EndHyphenEdit::NO_EDIT /* end hyphen edit */, nullptr /* advances */, pieces); + U16StringPiece firstText = textBuf.substr(hyphenPart.first); + U16StringPiece secondText = textBuf.substr(hyphenPart.second); + const float first = run.measureHyphenPiece(firstText, Range(0, firstText.size()), + StartHyphenEdit::NO_EDIT /* start hyphen edit */, + editForThisLine(hyph) /* end hyphen edit */, + nullptr /* advances */, pieces); + const float second = run.measureHyphenPiece(secondText, Range(0, secondText.size()), + editForNextLine(hyph) /* start hyphen edit */, + EndHyphenEdit::NO_EDIT /* end hyphen edit */, + nullptr /* advances */, pieces); out->emplace_back(i, hyph, first, second); } |