diff --git a/include/utils/Functor.h b/include/utils/Functor.h
index 565f4a3..e24ded4 100644
--- a/include/utils/Functor.h
+++ b/include/utils/Functor.h
@@ -25,8 +25,7 @@
 public:
     Functor() {}
     virtual ~Functor() {}
-    virtual status_t operator ()() { return true; }
-    virtual status_t operator ()(float* data, uint32_t len) { return true; }
+    virtual status_t operator ()(int what, void* data) { return NO_ERROR; }
 };
 
 }; // namespace android
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index e01e072..d265804 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -216,21 +216,41 @@
         setScissorFromClip();
     }
 
+    Rect clip(*mSnapshot->clipRect);
+    clip.snapToPixelBoundaries();
+
 #if RENDER_LAYERS_AS_REGIONS
     // Since we don't know what the functor will draw, let's dirty
     // tne entire clip region
     if (hasLayer()) {
-        Rect clip(*mSnapshot->clipRect);
-        clip.snapToPixelBoundaries();
         dirtyLayerUnchecked(clip, getRegion());
     }
 #endif
 
-    float bounds[4];
-    status_t result = (*functor)(&bounds[0], 4);
+    struct {
+        // Input: current clip rect
+        int clipLeft;
+        int clipTop;
+        int clipRight;
+        int clipBottom;
+
+        // Output: dirty region to redraw
+        float dirtyLeft;
+        float dirtyTop;
+        float dirtyRight;
+        float dirtyBottom;
+    } constraints;
+
+    constraints.clipLeft = clip.left;
+    constraints.clipTop = clip.top;
+    constraints.clipRight = clip.right;
+    constraints.clipBottom = clip.bottom;
+
+    status_t result = (*functor)(0, &constraints);
 
     if (result != 0) {
-        Rect localDirty(bounds[0], bounds[1], bounds[2], bounds[3]);
+        Rect localDirty(constraints.dirtyLeft, constraints.dirtyTop,
+                constraints.dirtyRight, constraints.dirtyBottom);
         dirty.unionWith(localDirty);
     }
 
