Merge "Fix performance issue in Launcher Bug #3515248" into honeycomb-mr1
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index b1eb164..f92e20b 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -92,7 +92,11 @@
 
 void LayerRenderer::generateMesh() {
 #if RENDER_LAYERS_AS_REGIONS
+#if RENDER_LAYERS_RECT_AS_RECT
     if (mLayer->region.isRect() || mLayer->region.isEmpty()) {
+#else
+    if (mLayer->region.isEmpty()) {
+#endif
         if (mLayer->mesh) {
             delete mLayer->mesh;
             delete mLayer->meshIndices;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index b8bd7d6..e01e072 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -636,11 +636,13 @@
 
 void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) {
 #if RENDER_LAYERS_AS_REGIONS
+#if RENDER_LAYERS_RECT_AS_RECT
     if (layer->region.isRect()) {
         composeLayerRect(layer, rect);
         layer->region.clear();
         return;
     }
+#endif
 
     if (!layer->region.isEmpty()) {
         size_t count;
@@ -1646,10 +1648,14 @@
 
 #if RENDER_LAYERS_AS_REGIONS
     if (!layer->region.isEmpty()) {
+#if RENDER_LAYERS_RECT_AS_RECT
         if (layer->region.isRect()) {
             const Rect r(x, y, x + layer->layer.getWidth(), y + layer->layer.getHeight());
             composeLayerRect(layer, r);
         } else if (layer->mesh) {
+#else
+        if (layer->mesh) {
+#endif
             const float a = alpha / 255.0f;
             const Rect& rect = layer->layer;
 
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 2d8b6f3..1aef99b 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -27,6 +27,8 @@
 
 // If turned on, layers drawn inside FBOs are optimized with regions
 #define RENDER_LAYERS_AS_REGIONS 1
+// If turned on, layers that map to a single rect are drawn as a rect
+#define RENDER_LAYERS_RECT_AS_RECT 0
 
 /**
  * Debug level for app developers.