diff options
Diffstat (limited to 'msm8996/sdm/libs/hwc2/hwc_layers.cpp')
| -rw-r--r-- | msm8996/sdm/libs/hwc2/hwc_layers.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/msm8996/sdm/libs/hwc2/hwc_layers.cpp b/msm8996/sdm/libs/hwc2/hwc_layers.cpp index 935845e73..c3cab1ad1 100644 --- a/msm8996/sdm/libs/hwc2/hwc_layers.cpp +++ b/msm8996/sdm/libs/hwc2/hwc_layers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2017, 2019, The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright 2015 The Android Open Source Project @@ -128,7 +128,21 @@ HWC2::Error HWCLayer::SetLayerBuffer(buffer_handle_t buffer, int32_t acquire_fen } HWC2::Error HWCLayer::SetLayerSurfaceDamage(hwc_region_t damage) { - // Check if there is an update in SurfaceDamage rects + surface_updated_ = true; + if ((damage.numRects == 1) && (damage.rects[0].bottom == 0) && (damage.rects[0].right == 0)) { + surface_updated_ = false; + } + + if (!layer_->flags.updating && surface_updated_) { + needs_validate_ = true; + } + + if (!partial_update_enabled_) { + SetDirtyRegions(damage); + return HWC2::Error::None; + } + + // Check if there is an update in SurfaceDamage rects. if (layer_->dirty_regions.size() != damage.numRects) { needs_validate_ = true; } else { @@ -142,12 +156,7 @@ HWC2::Error HWCLayer::SetLayerSurfaceDamage(hwc_region_t damage) { } } - layer_->dirty_regions.clear(); - for (uint32_t i = 0; i < damage.numRects; i++) { - LayerRect rect; - SetRect(damage.rects[i], &rect); - layer_->dirty_regions.push_back(rect); - } + SetDirtyRegions(damage); return HWC2::Error::None; } @@ -628,4 +637,13 @@ int32_t HWCLayer::PopReleaseFence(void) { return fence; } +void HWCLayer::SetDirtyRegions(hwc_region_t surface_damage) { + layer_->dirty_regions.clear(); + for (uint32_t i = 0; i < surface_damage.numRects; i++) { + LayerRect rect; + SetRect(surface_damage.rects[i], &rect); + layer_->dirty_regions.push_back(rect); + } +} + } // namespace sdm |
