diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-08-15 22:04:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-08-15 22:04:34 +0000 |
commit | 5893148cbbec78087f0622d4cc515ccd94f5a209 (patch) | |
tree | 35f0f8f7f0af660849963dacf9dae51ba5a2bcee | |
parent | 306cb4ef366cbedc9e00c0701855801b114b0328 (diff) | |
parent | 5acda99cd5b09646299e2cc1a7cd398b35f1a5dc (diff) | |
download | minikin-5893148cbbec78087f0622d4cc515ccd94f5a209.tar.gz |
Merge "[2nd attempt] Do not create word breaker for optimization" into main
-rw-r--r-- | libs/minikin/OptimalLineBreaker.cpp | 58 |
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; |