Preapre region tracking in layers
Change-Id: Ied1fa0d36c99ef4e33cb8fde7e3106a793db3a4c
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index f005573..b933232 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -697,13 +697,7 @@
if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom);
transform.mapRect(bounds);
- if (bounds.intersect(*mSnapshot->clipRect)) {
- bounds.snapToPixelBoundaries();
- android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
- if (!dirty.isEmpty()) {
- mSnapshot->region->orSelf(dirty);
- }
- }
+ dirtyLayerUnchecked(bounds, mSnapshot->region);
}
#endif
}
@@ -713,12 +707,18 @@
#if RENDER_LAYERS_AS_REGIONS
if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom);
- if (bounds.intersect(*mSnapshot->clipRect)) {
- bounds.snapToPixelBoundaries();
- android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
- if (!dirty.isEmpty()) {
- mSnapshot->region->orSelf(dirty);
- }
+ dirtyLayerUnchecked(bounds, mSnapshot->region);
+ }
+#endif
+}
+
+void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) {
+#if RENDER_LAYERS_AS_REGIONS
+ if (bounds.intersect(*mSnapshot->clipRect)) {
+ bounds.snapToPixelBoundaries();
+ android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
+ if (!dirty.isEmpty()) {
+ region->orSelf(dirty);
}
}
#endif
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 8cec8f1..56be134 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -145,6 +145,8 @@
virtual void dirtyLayer(const float left, const float top,
const float right, const float bottom);
+ void dirtyLayerUnchecked(Rect& bounds, Region* region);
+
private:
/**
* Saves the current state of the renderer as a new snapshot.