summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-08-15 22:04:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-08-15 22:04:34 +0000
commit5893148cbbec78087f0622d4cc515ccd94f5a209 (patch)
tree35f0f8f7f0af660849963dacf9dae51ba5a2bcee
parent306cb4ef366cbedc9e00c0701855801b114b0328 (diff)
parent5acda99cd5b09646299e2cc1a7cd398b35f1a5dc (diff)
downloadminikin-5893148cbbec78087f0622d4cc515ccd94f5a209.tar.gz
Merge "[2nd attempt] Do not create word breaker for optimization" into main
-rw-r--r--libs/minikin/OptimalLineBreaker.cpp58
1 files changed, 31 insertions, 27 deletions
diff --git a/libs/minikin/OptimalLineBreaker.cpp b/libs/minikin/OptimalLineBreaker.cpp
index 40603e2..50acae6 100644
--- a/libs/minikin/OptimalLineBreaker.cpp
+++ b/libs/minikin/OptimalLineBreaker.cpp
@@ -167,37 +167,41 @@ std::vector<DesperateBreak> populateDesperatePoints(const U16StringPiece& textBu
const Range& range, const Run& run) {
std::vector<DesperateBreak> out;
- bool calculateFallback = true;
if (run.lineBreakWordStyle() == LineBreakWordStyle::None) {
- calculateFallback = false;
- }
-
- WordBreaker wb;
- wb.setText(textBuf.data(), textBuf.length());
- ssize_t next =
- wb.followingWithLocale(getEffectiveLocale(run.getLocaleListId()), run.lineBreakStyle(),
- LineBreakWordStyle::None, range.getStart());
-
- if (!range.contains(next)) {
- calculateFallback = false;
- }
-
- ParaWidth width = measured.widths[range.getStart()];
- for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
- const float w = measured.widths[i];
- if (w == 0) {
- continue; // w == 0 means here is not a grapheme bounds. Don't break here.
- }
- if (calculateFallback && i == (uint32_t)next) {
- out.emplace_back(i, width, SCORE_FALLBACK);
- next = wb.next();
- if (!range.contains(next)) {
- break;
+ ParaWidth width = measured.widths[range.getStart()];
+ for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
+ const float w = measured.widths[i];
+ if (w == 0) {
+ continue; // w == 0 means here is not a grapheme bounds. Don't break here.
}
- } else {
out.emplace_back(i, width, SCORE_DESPERATE);
+ width += w;
+ }
+ } else {
+ WordBreaker wb;
+ wb.setText(textBuf.data(), textBuf.length());
+ ssize_t next = wb.followingWithLocale(getEffectiveLocale(run.getLocaleListId()),
+ run.lineBreakStyle(), LineBreakWordStyle::None,
+ range.getStart());
+
+ const bool calculateFallback = range.contains(next);
+ ParaWidth width = measured.widths[range.getStart()];
+ for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
+ const float w = measured.widths[i];
+ if (w == 0) {
+ continue; // w == 0 means here is not a grapheme bounds. Don't break here.
+ }
+ if (calculateFallback && i == (uint32_t)next) {
+ out.emplace_back(i, width, SCORE_FALLBACK);
+ next = wb.next();
+ if (!range.contains(next)) {
+ break;
+ }
+ } else {
+ out.emplace_back(i, width, SCORE_DESPERATE);
+ }
+ width += w;
}
- width += w;
}
return out;