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);