am f44ed5ad: Merge "Don\'t clobber the local dirty rect after rendering a layer. Bug #3417254 Bug #3413433" into honeycomb

* commit 'f44ed5adc42fefa0c91fc79c5e3c20e1cdc7d697':
  Don't clobber the local dirty rect after rendering a layer. Bug #3417254 Bug #3413433
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 48f40c3..71d55f7 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -547,7 +547,7 @@
                     }
 
                     onPreDraw(dirty);
-    
+
                     HardwareCanvas canvas = mCanvas;
                     attachInfo.mHardwareCanvas = canvas;
 
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 393412f..9db43a1 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8221,8 +8221,10 @@
             if (mHardwareLayer == null) {
                 mHardwareLayer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
                         width, height, isOpaque());
+                mLocalDirtyRect.setEmpty();
             } else if (mHardwareLayer.getWidth() != width || mHardwareLayer.getHeight() != height) {
                 mHardwareLayer.resize(width, height);
+                mLocalDirtyRect.setEmpty();
             }
 
             Canvas currentCanvas = mAttachInfo.mHardwareCanvas;
@@ -8231,6 +8233,7 @@
             try {
                 canvas.setViewport(width, height);
                 canvas.onPreDraw(mLocalDirtyRect);
+                mLocalDirtyRect.setEmpty();
 
                 final int restoreCount = canvas.save();
 
@@ -8252,7 +8255,6 @@
                 canvas.onPostDraw();
                 mHardwareLayer.end(currentCanvas);
                 mAttachInfo.mHardwareCanvas = currentCanvas;
-                mLocalDirtyRect.setEmpty();
             }
         }
 
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 7379b63..60ff0bf 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -32,6 +32,8 @@
 void LayerRenderer::prepareDirty(float left, float top, float right, float bottom, bool opaque) {
     LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo);
 
+    glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
+
 #if RENDER_LAYERS_AS_REGIONS
     Rect dirty(left, top, right, bottom);
     if (dirty.isEmpty() || (dirty.left <= 0 && dirty.top <= 0 &&
@@ -43,11 +45,7 @@
         android::Rect r(dirty.left, dirty.top, dirty.right, dirty.bottom);
         mLayer->region.subtractSelf(r);
     }
-#endif
 
-    glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo);
-
-#if RENDER_LAYERS_AS_REGIONS
     OpenGLRenderer::prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom, opaque);
 #else
     OpenGLRenderer::prepareDirty(0.0f, 0.0f, mLayer->width, mLayer->height, opaque);