summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2021-06-08 16:12:39 -0700
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-06-30 05:29:32 +0000
commite21a048af5d99afc17bae2a02f94067bdf3f1978 (patch)
tree5531010f642ed5b66e442a94f6ae447f854f0cc4
parentafff8015f07edb23838ad9e8f2d0070f64f3d9f9 (diff)
downloadbase-e21a048af5d99afc17bae2a02f94067bdf3f1978.tar.gz
Improve ellipsize performance
Instead of iterate all ellipsized characters, only iterate the necessary ranges for copying. Bug: 188913943 Test: atest CtsTextTestCases CtsGraphicsTestCases CtsWidgetTestCases Change-Id: I3d03b1e3897e427c23fbe51315f412c57a4ce9e9 Merged-In: I3d03b1e3897e427c23fbe51315f412c57a4ce9e9 (cherry picked from commit ae1912b62f7dfa361acfbe472cb8a49cd60f746e)
-rw-r--r--core/java/android/text/Layout.java14
1 files changed, 7 insertions, 7 deletions
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 8f9233f06839..38240fa7e9d9 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -2214,20 +2214,20 @@ public abstract class Layout {
int ellipsisStart = getEllipsisStart(line);
int linestart = getLineStart(line);
- for (int i = ellipsisStart; i < ellipsisStart + ellipsisCount; i++) {
+ final int min = Math.max(0, start - ellipsisStart - linestart);
+ final int max = Math.min(ellipsisCount, end - ellipsisStart - linestart);
+
+ for (int i = min; i < max; i++) {
char c;
- if (i == ellipsisStart) {
+ if (i == 0) {
c = getEllipsisChar(method); // ellipsis
} else {
c = '\uFEFF'; // 0-width space
}
- int a = i + linestart;
-
- if (a >= start && a < end) {
- dest[destoff + a - start] = c;
- }
+ int a = i + ellipsisStart + linestart;
+ dest[destoff + a - start] = c;
}
}