diff options
| author | Seigo Nonaka <nona@google.com> | 2021-06-04 16:07:23 -0700 |
|---|---|---|
| committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-30 23:58:52 +0000 |
| commit | ed0c637a311d98426ff29cecd96aa429b53544dc (patch) | |
| tree | 43fab01898a2a403375addfb86bee7e9391bc0e4 /core/java/android | |
| parent | 4241ab5ee435ee3c5e6496c001b2cf5bc827cfc4 (diff) | |
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
(cherry picked from commit 2c6121f3e3c52965ae33317e4fe7a273fd1742c6)
(cherry picked from commit 40d7a4535aba93073264bf8998daf588f0923986)
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/text/Layout.java | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 8a4497a0f0ce..6baea1aea471 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -2350,7 +2350,10 @@ public abstract class Layout { final int ellipsisStringLen = ellipsisString.length(); // Use the ellipsis string only if there are that at least as many characters to replace. final boolean useEllipsisString = ellipsisCount >= ellipsisStringLen; - for (int i = 0; i < 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++) { final char c; if (useEllipsisString && i < ellipsisStringLen) { c = ellipsisString.charAt(i); @@ -2359,9 +2362,7 @@ public abstract class Layout { } final int a = i + ellipsisStart + lineStart; - if (start <= a && a < end) { - dest[destoff + a - start] = c; - } + dest[destoff + a - start] = c; } } |
