From 47639b9c1db9a5d0d89ce6b4b36d6b3c0d489602 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Mon, 14 Jan 2013 12:42:27 +0100 Subject: Use less HW layers in All Apps (saves memory) Change-Id: Ib2beda7549662a787437c7aa043e7858357c051f --- .../android/launcher2/AppsCustomizePagedView.java | 49 ++++++++++++++++++++-- src/com/android/launcher2/PagedViewCellLayout.java | 13 +----- src/com/android/launcher2/PagedViewGridLayout.java | 10 +---- src/com/android/launcher2/Workspace.java | 4 +- 4 files changed, 50 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java index 4bfeb60b8..e36eee29a 100644 --- a/src/com/android/launcher2/AppsCustomizePagedView.java +++ b/src/com/android/launcher2/AppsCustomizePagedView.java @@ -1099,7 +1099,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen images.add(info.iconBitmap); } - layout.createHardwareLayers(); + enableHwLayersOnVisiblePages(); } /** @@ -1552,8 +1552,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } - layout.createHardwareLayer(); - invalidate(); + enableHwLayersOnVisiblePages(); // Update all thread priorities Iterator iter = mRunningTasks.iterator(); @@ -1676,6 +1675,50 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } } + + enableHwLayersOnVisiblePages(); + } + + private void enableHwLayersOnVisiblePages() { + final int screenCount = getChildCount(); + + getVisiblePages(mTempVisiblePagesRange); + int leftScreen = mTempVisiblePagesRange[0]; + int rightScreen = mTempVisiblePagesRange[1]; + int forceDrawScreen = -1; + if (leftScreen == rightScreen) { + // make sure we're caching at least two pages always + if (rightScreen < screenCount - 1) { + rightScreen++; + forceDrawScreen = rightScreen; + } else if (leftScreen > 0) { + leftScreen--; + forceDrawScreen = leftScreen; + } + } else { + forceDrawScreen = leftScreen + 1; + } + + for (int i = 0; i < screenCount; i++) { + final View layout = (View) getPageAt(i); + if (!(leftScreen <= i && i <= rightScreen && + (i == forceDrawScreen || shouldDrawChild(layout)))) { + layout.setLayerType(LAYER_TYPE_NONE, null); + } + } + + int newLeft = -1; + int newRight = -1; + for (int i = 0; i < screenCount; i++) { + final View layout = (View) getPageAt(i); + + if (leftScreen <= i && i <= rightScreen && + (i == forceDrawScreen || shouldDrawChild(layout))) { + if (layout.getLayerType() != LAYER_TYPE_HARDWARE) { + layout.setLayerType(LAYER_TYPE_HARDWARE, null); + } + } + } } protected void overScroll(float amount) { diff --git a/src/com/android/launcher2/PagedViewCellLayout.java b/src/com/android/launcher2/PagedViewCellLayout.java index 6f73e6341..9ce177b76 100644 --- a/src/com/android/launcher2/PagedViewCellLayout.java +++ b/src/com/android/launcher2/PagedViewCellLayout.java @@ -86,17 +86,6 @@ public class PagedViewCellLayout extends ViewGroup implements Page { return mCellHeight; } - void destroyHardwareLayers() { - // called when a page is no longer visible (triggered by loadAssociatedPages -> - // removeAllViewsOnPage) - setLayerType(LAYER_TYPE_NONE, null); - } - - void createHardwareLayers() { - // called when a page is visible (triggered by loadAssociatedPages -> syncPageItems) - setLayerType(LAYER_TYPE_HARDWARE, null); - } - @Override public void cancelLongPress() { super.cancelLongPress(); @@ -133,7 +122,7 @@ public class PagedViewCellLayout extends ViewGroup implements Page { @Override public void removeAllViewsOnPage() { mChildren.removeAllViews(); - destroyHardwareLayers(); + setLayerType(LAYER_TYPE_NONE, null); } @Override diff --git a/src/com/android/launcher2/PagedViewGridLayout.java b/src/com/android/launcher2/PagedViewGridLayout.java index 90bfe88ec..aa9adc0ea 100644 --- a/src/com/android/launcher2/PagedViewGridLayout.java +++ b/src/com/android/launcher2/PagedViewGridLayout.java @@ -98,19 +98,11 @@ public class PagedViewGridLayout extends GridLayout implements Page { return result; } - void destroyHardwareLayer() { - setLayerType(LAYER_TYPE_NONE, null); - } - - void createHardwareLayer() { - setLayerType(LAYER_TYPE_HARDWARE, null); - } - @Override public void removeAllViewsOnPage() { removeAllViews(); mOnLayoutListener = null; - destroyHardwareLayer(); + setLayerType(LAYER_TYPE_NONE, null); } @Override diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 2c44aca07..9d8845b2c 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -1406,13 +1406,13 @@ public class Workspace extends SmoothPagedView } } for (int i = 0; i < screenCount; i++) { - final CellLayout layout = (CellLayout) getChildAt(i); + final CellLayout layout = (CellLayout) getPageAt(i); if (!(leftScreen <= i && i <= rightScreen && shouldDrawChild(layout))) { layout.disableHardwareLayers(); } } for (int i = 0; i < screenCount; i++) { - final CellLayout layout = (CellLayout) getChildAt(i); + final CellLayout layout = (CellLayout) getPageAt(i); if (leftScreen <= i && i <= rightScreen && shouldDrawChild(layout)) { layout.enableHardwareLayers(); } -- cgit v1.2.3