diff options
author | Seigo Nonaka <nona@google.com> | 2021-06-08 16:12:39 -0700 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-30 05:29:32 +0000 |
commit | e21a048af5d99afc17bae2a02f94067bdf3f1978 (patch) | |
tree | 5531010f642ed5b66e442a94f6ae447f854f0cc4 | |
parent | afff8015f07edb23838ad9e8f2d0070f64f3d9f9 (diff) | |
download | base-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.java | 14 |
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; } } |