diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index ad96686..da12d46 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -6421,6 +6421,12 @@
             mPrivateFlags &= ~DRAWING_CACHE_VALID;
             final ViewParent p = mParent;
             final AttachInfo ai = mAttachInfo;
+            if (p != null && ai != null && ai.mHardwareAccelerated) {
+                // fast-track for GL-enabled applications; just invalidate the whole hierarchy
+                // with a null dirty rect, which tells the ViewRoot to redraw everything
+                p.invalidateChild(this, null);
+                return;
+            }
             if (p != null && ai != null) {
                 final int scrollX = mScrollX;
                 final int scrollY = mScrollY;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index b357973..8bfc8d4 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -268,7 +268,7 @@
     const GLuint previousFbo = mSnapshot->fbo;
     const int count = saveSnapshot(flags);
 
-    if (!mSnapshot->invisible) {
+    if (!mSnapshot->isIgnored()) {
         int alpha = 255;
         SkXfermode::Mode mode;
 
@@ -385,13 +385,17 @@
 
     if (bounds.isEmpty() || bounds.getWidth() > mCaches.maxTextureSize ||
             bounds.getHeight() > mCaches.maxTextureSize) {
-        snapshot->invisible = true;
+        if (fboLayer) {
+            snapshot->invisible = true;
+        } else {
+            snapshot->empty = true;
+        }
     } else {
         snapshot->invisible = snapshot->invisible || (alpha <= ALPHA_THRESHOLD && fboLayer);
     }
 
     // Bail out if we won't draw in this snapshot
-    if (snapshot->invisible) {
+    if (snapshot->invisible || snapshot->empty) {
         return false;
     }
 
@@ -731,7 +735,7 @@
 }
 
 void OpenGLRenderer::clearLayerRegions() {
-    if (mLayers.size() == 0 || mSnapshot->invisible) return;
+    if (mLayers.size() == 0 || mSnapshot->isIgnored()) return;
 
     Rect clipRect(*mSnapshot->clipRect);
     clipRect.snapToPixelBoundaries();
@@ -809,7 +813,7 @@
 }
 
 bool OpenGLRenderer::quickReject(float left, float top, float right, float bottom) {
-    if (mSnapshot->invisible) {
+    if (mSnapshot->isIgnored()) {
         return true;
     }
 
@@ -988,7 +992,7 @@
 
 void OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
     // TODO: Should do quickReject for each line
-    if (mSnapshot->invisible) return;
+    if (mSnapshot->isIgnored()) return;
 
     const bool isAA = paint->isAntiAlias();
     const float strokeWidth = paint->getStrokeWidth() * 0.5f;
@@ -1112,7 +1116,7 @@
 
 void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
     // No need to check against the clip, we fill the clip region
-    if (mSnapshot->invisible) return;
+    if (mSnapshot->isIgnored()) return;
 
     Rect& clip(*mSnapshot->clipRect);
     clip.snapToPixelBoundaries();
@@ -1150,7 +1154,7 @@
     if (text == NULL || count == 0 || (paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
         return;
     }
-    if (mSnapshot->invisible) return;
+    if (mSnapshot->isIgnored()) return;
 
     paint->setAntiAlias(true);
 
@@ -1253,7 +1257,7 @@
 }
 
 void OpenGLRenderer::drawPath(SkPath* path, SkPaint* paint) {
-    if (mSnapshot->invisible) return;
+    if (mSnapshot->isIgnored()) return;
 
     GLuint textureUnit = 0;
     glActiveTexture(gTextureUnits[textureUnit]);
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 9f78063..9898df4 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -43,7 +43,7 @@
  */
 class Snapshot: public LightRefBase<Snapshot> {
 public:
-    Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0), invisible(false) {
+    Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0), invisible(false), empty(false) {
         transform = &mTransformRoot;
         clipRect = &mClipRectRoot;
         region = NULL;
@@ -55,7 +55,7 @@
      */
     Snapshot(const sp<Snapshot>& s, int saveFlags):
             flags(0), previous(s), layer(NULL), fbo(s->fbo),
-            invisible(s->invisible), viewport(s->viewport), height(s->height) {
+            invisible(s->invisible), empty(false), viewport(s->viewport), height(s->height) {
         if (saveFlags & SkCanvas::kMatrix_SaveFlag) {
             mTransformRoot.load(*s->transform);
             transform = &mTransformRoot;
@@ -203,6 +203,10 @@
         flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
     }
 
+    bool isIgnored() const {
+        return invisible || empty;
+    }
+
     /**
      * Dirty flags.
      */
@@ -225,11 +229,18 @@
 
     /**
      * Indicates that this snapshot is invisible and nothing should be drawn
-     * inside it.
+     * inside it. This flag is set only when the layer clips drawing to its
+     * bounds and is passed to subsequent snapshots.
      */
     bool invisible;
 
     /**
+     * If set to true, the layer will not be composited. This is similar to
+     * invisible but this flag is not passed to subsequent snapshots.
+     */
+    bool empty;
+
+    /**
      * Current viewport.
      */
     Rect viewport;
