Reducing HW layer usage on non-large devices
- On phones, we set HW layers on the workspace items themselves, which doesn't cost any performance
- On tablets this approach costs 5-6 FPS in the worst case when swiping pages so we stay with the old approach of enabling HW layers on the entire workspace page
Change-Id: I3626ea14844c3e4444cf79232dbde396840b1804
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index a17e2d6..6f59d1f 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -292,8 +292,20 @@
return minGap * (numCells - 1) + cellHeight * numCells;
}
+ @Override
+ public void setChildrenLayersEnabled(boolean enabled) {
+ // see "Hardware Layer Note" lower in the code
+ if (LauncherApplication.isScreenLarge()) {
+ super.setChildrenLayersEnabled(enabled);
+ } else {
+ mChildren.setChildrenLayersEnabled(enabled);
+ }
+ }
public void enableHardwareLayers() {
- mChildren.enableHardwareLayers();
+ // see "Hardware Layer Note" lower in the code
+ if (LauncherApplication.isScreenLarge()) {
+ mChildren.enableHardwareLayers();
+ }
}
public void setGridSize(int x, int y) {
@@ -638,6 +650,16 @@
child.setId(childId);
+ if (!LauncherApplication.isScreenLarge()) {
+ // Hardware Layer Note:
+ // On phones, we set hardware layers on individual items
+ // On tablets, we set hardware layers on the entire mChildren view
+ // Setting the hardware layers on individual items only uses
+ // less memory but on tablet-size devices it has worse performance
+ // (a drop of ~6fps) whereas on phones the performance is the same
+ // with both approaches
+ child.setLayerType(LAYER_TYPE_HARDWARE, null);
+ }
mChildren.addView(child, index, lp);
if (markCells) markCellsAsOccupiedForView(child);