Clip buffer damage to viewport bounds
bug:27287946
Change-Id: Ief3ae9c2dd92196b7d09f1b9fadf009eb228d80a
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index 5f689b4..c147384 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -296,12 +296,9 @@
}
}
- // dirty offscreenbuffer
- if (dirtyBounds && mRenderTarget.offscreenBuffer) {
- // register layer damage to draw-back region
- android::Rect dirty(dirtyBounds->left, dirtyBounds->top,
- dirtyBounds->right, dirtyBounds->bottom);
- mRenderTarget.offscreenBuffer->region.orSelf(dirty);
+ if (dirtyBounds) {
+ // dirty offscreenbuffer if present
+ dirtyRenderTarget(*dirtyBounds);
}
}
@@ -329,29 +326,9 @@
mRenderState.invokeFunctor(op.functor, DrawGlInfo::kModeDraw, &info);
}
-#define VALIDATE_RECT_ARG(rect, arg) \
- ((isnanf(rect.arg) || rect.arg < -10000 || rect.arg > 10000) ? (\
- ALOGW("suspicious " #rect "." #arg "! %f", rect.arg),\
- false) : true)
-
-#define VALIDATE_RECT(rect) \
- VALIDATE_RECT_ARG(rect, bottom) & \
- VALIDATE_RECT_ARG(rect, left) & \
- VALIDATE_RECT_ARG(rect, top) & \
- VALIDATE_RECT_ARG(rect, right)
-
void BakedOpRenderer::dirtyRenderTarget(const Rect& uiDirty) {
if (mRenderTarget.offscreenBuffer) {
- bool valid = VALIDATE_RECT(uiDirty);
- android::Rect dirty;
- if (valid) {
- dirty = android::Rect(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom);
- } else {
- dirty = android::Rect(
- mRenderTarget.offscreenBuffer->viewportWidth,
- mRenderTarget.offscreenBuffer->viewportHeight);
- }
- mRenderTarget.offscreenBuffer->region.orSelf(dirty);
+ mRenderTarget.offscreenBuffer->dirty(uiDirty);
}
}