Add support for text culling.

Change-Id: Ibf0adacdc5c64d40a8000b21d7cb0797d63efe29
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 3316c7e..cc7fde9 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -42,7 +42,7 @@
  */
 class Snapshot: public LightRefBase<Snapshot> {
 public:
-    Snapshot(): flags(0x0), previous(NULL), layer(NULL), fbo(0) { }
+    Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0) { }
 
     /**
      * Copies the specified snapshot. Only the transform and clip rectangle
@@ -54,10 +54,11 @@
             height(s->height),
             transform(s->transform),
             clipRect(s->clipRect),
-            flags(0x0),
+            flags(0),
             previous(s),
             layer(NULL),
-            fbo(s->fbo) {
+            fbo(s->fbo),
+            localClip(s->localClip) {
     }
 
     /**
@@ -78,6 +79,10 @@
          * Indicates that this snapshot has changed the ortho matrix.
          */
         kFlagDirtyOrtho = 0x4,
+        /**
+         * Indicates that the local clip should be recomputed.
+         */
+        kFlagDirtyLocalClip = 0x8,
     };
 
     /**
@@ -109,7 +114,7 @@
         }
 
         if (clipped) {
-            flags |= Snapshot::kFlagClipSet;
+            flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
         }
 
         return clipped;
@@ -120,14 +125,17 @@
      */
     void setClip(float left, float top, float right, float bottom) {
         clipRect.set(left, top, right, bottom);
-        flags |= Snapshot::kFlagClipSet;
+        flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip;
     }
 
     const Rect& getLocalClip() {
-        mat4 inverse;
-        inverse.loadInverse(transform);
-        localClip.set(clipRect);
-        inverse.mapRect(localClip);
+        if (flags & Snapshot::kFlagDirtyLocalClip) {
+            mat4 inverse;
+            inverse.loadInverse(transform);
+            localClip.set(clipRect);
+            inverse.mapRect(localClip);
+            flags &= ~Snapshot::kFlagDirtyLocalClip;
+        }
         return localClip;
     }