From a0ee06083c9e85f8fe931702f45f263f69a45f29 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Fri, 15 May 2020 13:51:03 +0800 Subject: [PATCH] Only add divider when it need to show By previous memory patch, the divider will always call update when enter split when means it always add divider view when showing. So we can reduce some update call to avoid any unnecessary surface memory allocate. Fix: 150190730 Test: Check split mode rotate normally and dump SF to check divider memory status Change-Id: Idb39cefe0168e9e5e11ce0e13438a24f84cbb9f4 --- core/java/android/view/WindowlessWindowManager.java | 1 - .../com/android/systemui/stackdivider/Divider.java | 13 +++++-------- .../stackdivider/SplitScreenTaskOrganizer.java | 2 -- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java index a5ec4e9006414..d2e506ea550c9 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -41,7 +41,6 @@ public class WindowlessWindowManager implements IWindowSession { private final static String TAG = "WindowlessWindowManager"; private class State { - //TODO : b/150190730 we should create it when view show and release it when view invisible. SurfaceControl mSurfaceControl; WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); int mDisplayId; diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index 21810c0e7cf59..166934599aeba 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -253,7 +253,9 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, mSplitLayout.mSecondary = new Rect(mRotateSplitLayout.mSecondary); mRotateSplitLayout = null; } - update(newConfig); + if (isSplitActive()) { + update(newConfig); + } } Handler getHandler() { @@ -328,11 +330,6 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, mHandler.post(this::removeDivider); } - void onTasksReady() { - mHandler.post(() -> update(mDisplayController.getDisplayContext( - mContext.getDisplayId()).getResources().getConfiguration())); - } - private void updateVisibility(final boolean visible) { if (DEBUG) Slog.d(TAG, "Updating visibility " + mVisible + "->" + visible); if (mVisible != visible) { @@ -524,7 +521,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, void ensureMinimizedSplit() { setHomeMinimized(true /* minimized */, mSplits.mSecondary.isResizable()); - if (!isDividerVisible()) { + if (mView != null && !isDividerVisible()) { // Wasn't in split-mode yet, so enter now. if (DEBUG) { Slog.d(TAG, " entering split mode with minimized=true"); @@ -535,7 +532,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, void ensureNormalSplit() { setHomeMinimized(false /* minimized */, mHomeStackResizable); - if (!isDividerVisible()) { + if (mView != null && !isDividerVisible()) { // Wasn't in split-mode, so enter now. if (DEBUG) { Slog.d(TAG, " enter split mode unminimized "); diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java index db324822994b1..44674df3b8652 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java @@ -113,8 +113,6 @@ class SplitScreenTaskOrganizer extends TaskOrganizer { t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f}); t.apply(); releaseTransaction(t); - - mDivider.onTasksReady(); } } }