summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2018-03-23 12:38:08 -0700
committerSeigo Nonaka <nona@google.com>2018-03-23 12:55:45 -0700
commit2adb04f8edb61857a2c53c16ced533df47be67c3 (patch)
treecbeec3391bb98477a49d8e0b94a461ba43326de8
parent048b45f69c2a6a43329fc8efd056666f427a62d4 (diff)
downloadminikin-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.h18
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);
}