hwc: Add check for dirtyRect clear call.
We should call clear in dirtyRect only if its a
valid region to clear.
CRs-Fixed: 768200
Change-Id: If627170e9f4893fe13a85a9929511858132d5405
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 546a67b..ee5b3b7 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -533,19 +533,21 @@
}
mDirtyLayerIndex = checkDirtyRect(ctx, list, dpy);
- if( mDirtyLayerIndex != -1){
- hwc_layer_1_t *layer = &list->hwLayers[mDirtyLayerIndex];
+ hwc_rect_t clearRegion = {0,0,0,0};
+ if (CBUtils::getuiClearRegion(list, clearRegion, layerProp)){
+ if (mDirtyLayerIndex != -1){
+ hwc_layer_1_t *layer = &list->hwLayers[mDirtyLayerIndex];
#ifdef QCOM_BSP
- clear(renderBuffer,layer->dirtyRect);
+ hwc_rect_t result = getIntersection(layer->dirtyRect,clearRegion);
+ if(isValidRect(result))
+ clear(renderBuffer,result);
#else
- clear(renderBuffer,layer->displayFrame);
+ clear(renderBuffer,clearRegion);
#endif
- } else {
- hwc_rect_t clearRegion = {0,0,0,0};
- if(CBUtils::getuiClearRegion(list, clearRegion, layerProp))
+ } else {
clear(renderBuffer, clearRegion);
+ }
}
-
// numAppLayers-1, as we iterate from 0th layer index with HWC_COPYBIT flag
for (int i = 0; i <= (ctx->listStats[dpy].numAppLayers-1); i++) {
if(!(layerProp[i].mFlags & HWC_COPYBIT)) {