diff options
| author | Robert Horvath <robhor@google.com> | 2022-03-23 15:21:10 +0100 |
|---|---|---|
| committer | Robert Horvath <robhor@google.com> | 2022-03-24 12:29:05 +0100 |
| commit | e10a3513f4831fcb47c641215438c9316835ef87 (patch) | |
| tree | 1ae9836c761ee51e069e2046b4542508bf4f9b0e /core/java/android | |
| parent | e0934dadbe3b5d9860a066a413f7ade877ffced2 (diff) | |
Prevent ArrayList allocation for prefer keep clear areas
This avoids creating an ArrayList if there are no keep clear areas,
returning early with an empty or singleton list where possible.
Bug: 222567277
Test: android.view.ViewShowHidePerfTest#testVisibleToInvisible
Change-Id: Id718a37ea8aa4fcf4edbaade532cea826b15adf0
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/View.java | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index febd2e2efdac..7d823b1c100d 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -11939,13 +11939,22 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @NonNull List<Rect> collectPreferKeepClearRects() { ListenerInfo info = mListenerInfo; - final List<Rect> list = new ArrayList<>(); + boolean keepBoundsClear = + (info != null && info.mPreferKeepClear) || mPreferKeepClearForFocus; + boolean hasCustomKeepClearRects = info != null && info.mKeepClearRects != null; + + if (!keepBoundsClear && !hasCustomKeepClearRects) { + return Collections.emptyList(); + } else if (keepBoundsClear && !hasCustomKeepClearRects) { + return Collections.singletonList(new Rect(0, 0, getWidth(), getHeight())); + } - if ((info != null && info.mPreferKeepClear) || mPreferKeepClearForFocus) { + final List<Rect> list = new ArrayList<>(); + if (keepBoundsClear) { list.add(new Rect(0, 0, getWidth(), getHeight())); } - if (info != null && info.mKeepClearRects != null) { + if (hasCustomKeepClearRects) { list.addAll(info.mKeepClearRects); } |
