am 80c69853: simplifying code to prevent drawing off-screen

* commit '80c69853d64b73e5d62ed33bea1b10680557ee3e':
  simplifying code to prevent drawing off-screen
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index b6efcfa..ef36042 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -727,17 +727,16 @@
         final int pageCount = getChildCount();
         if (pageCount > 0) {
             final int screenWidth = getMeasuredWidth();
-            int x = (int) getPageAt(0).getRight();
             int leftScreen = 0;
             int rightScreen = 0;
-            while (x <= mScrollX && leftScreen < pageCount - 1) {
+            while (leftScreen < pageCount - 1 &&
+                    getPageAt(leftScreen).getRight() <= mScrollX) {
                 leftScreen++;
-                x = getPageAt(leftScreen).getRight();
             }
             rightScreen = leftScreen;
-            while (x < mScrollX + screenWidth && rightScreen < pageCount - 1) {
+            while (rightScreen < pageCount - 1 &&
+                    getPageAt(rightScreen + 1).getLeft() < mScrollX + screenWidth) {
                 rightScreen++;
-                x = (int) getPageAt(rightScreen).getRight();
             }
             range[0] = leftScreen;
             range[1] = rightScreen;
@@ -773,8 +772,21 @@
                 canvas.clipRect(mScrollX, mScrollY, mScrollX + mRight - mLeft,
                         mScrollY + mBottom - mTop);
 
-                for (int i = rightScreen; i >= leftScreen; i--) {
-                    drawChild(canvas, getPageAt(i), drawingTime);
+                // On certain graphics drivers, if you draw to a off-screen buffer that's not
+                // used, it can lead to poor performance. We were running into this when
+                // setChildrenLayersEnabled was called on a CellLayout; that triggered a re-draw
+                // of that CellLayout's hardware layer, even if that CellLayout wasn't visible.
+                // As a fix, below we set pages that aren't going to be rendered are to be
+                // View.INVISIBLE, preventing re-drawing of their hardware layer
+                for (int i = getChildCount() - 1; i >= 0; i--) {
+                    final View v = getPageAt(i);
+                    if (leftScreen <= i && i <= rightScreen &&
+                            v.getAlpha() > ViewConfiguration.ALPHA_THRESHOLD) {
+                        v.setVisibility(VISIBLE);
+                        drawChild(canvas, v, drawingTime);
+                    } else {
+                        v.setVisibility(INVISIBLE);
+                    }
                 }
                 canvas.restore();
             }
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index d74a2c3..148c1ba 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -1268,32 +1268,6 @@
         return (mBackground != null && mBackgroundAlpha > 0.0f && mDrawBackground);
     }
 
-    public void scrollTo (int x, int y) {
-        super.scrollTo(x, y);
-        syncChildrenLayersEnabledOnVisiblePages();
-    }
-
-    // This method just applies the value mChildrenLayersEnabled to all the pages that
-    // will be rendered on the next frame.
-    // We do this because calling setChildrenLayersEnabled on a view that's not
-    // visible/rendered causes slowdowns on some graphics cards
-    private void syncChildrenLayersEnabledOnVisiblePages() {
-        if (mChildrenLayersEnabled) {
-            getVisiblePages(mTempVisiblePagesRange);
-            final int leftScreen = mTempVisiblePagesRange[0];
-            final int rightScreen = mTempVisiblePagesRange[1];
-            if (leftScreen != -1 && rightScreen != -1) {
-                for (int i = leftScreen; i <= rightScreen; i++) {
-                    ViewGroup page = (ViewGroup) getPageAt(i);
-                    if (page.getVisibility() == VISIBLE &&
-                            page.getAlpha() > ViewConfiguration.ALPHA_THRESHOLD) {
-                        ((ViewGroup)getPageAt(i)).setChildrenLayersEnabled(true);
-                    }
-                }
-            }
-        }
-    }
-
     @Override
     protected void dispatchDraw(Canvas canvas) {
         super.dispatchDraw(canvas);
@@ -1400,13 +1374,8 @@
 
         if (enableChildrenLayers != mChildrenLayersEnabled) {
             mChildrenLayersEnabled = enableChildrenLayers;
-            // calling setChildrenLayersEnabled on a view that's not visible/rendered
-            // causes slowdowns on some graphics cards, so we only disable it here and leave
-            // the enabling to dispatchDraw
-            if (!enableChildrenLayers) {
-                for (int i = 0; i < getPageCount(); i++) {
-                    ((ViewGroup)getChildAt(i)).setChildrenLayersEnabled(false);
-                }
+            for (int i = 0; i < getPageCount(); i++) {
+                ((ViewGroup)getChildAt(i)).setChildrenLayersEnabled(mChildrenLayersEnabled);
             }
         }
     }
@@ -1731,7 +1700,6 @@
                             }
                         }
                     }
-                    syncChildrenLayersEnabledOnVisiblePages();
                 }
             });
 
@@ -1771,7 +1739,6 @@
             // Fade the background gradient away
             animateBackgroundGradient(0f, true);
         }
-        syncChildrenLayersEnabledOnVisiblePages();
         return anim;
     }