From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Tue, 8 Jun 2021 16:12:39 -0700 Subject: [PATCH] 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) --- core/java/android/text/Layout.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 0999b982d990..11e5fab2ebb3 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -2054,20 +2054,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; } }