summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2023-07-27 22:11:31 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-07-27 22:11:31 +0000
commitf6dc23b2a3940d00d7584c854be260bb82c8880b (patch)
treef4cfbdfb6eba55ea21162229c77d1f3d8488895f
parente1c5163479ef3b88838dc8c370150e93cb0441e0 (diff)
parentbe2ac9c75328f62456965d764d9e2eb4869cd69e (diff)
Merge "RenderEngine: Limit the size of blur input to the display size" into udc-dev am: be2ac9c753
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/24193668 Change-Id: I592a8a41290c441dd837a467991a1d8925c3fcfd Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libs/renderengine/skia/SkiaRenderEngine.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp
index fda6ea189e..76ebf9d0c2 100644
--- a/libs/renderengine/skia/SkiaRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaRenderEngine.cpp
@@ -813,8 +813,20 @@ void SkiaRenderEngine::drawLayersInternal(
if (!blurInput) {
blurInput = activeSurface->makeImageSnapshot();
}
+
// rect to be blurred in the coordinate space of blurInput
- const auto blurRect = canvas->getTotalMatrix().mapRect(bounds.rect());
+ SkRect blurRect = canvas->getTotalMatrix().mapRect(bounds.rect());
+
+ // Some layers may be much bigger than the screen. If we used
+ // `blurRect` directly, this would allocate a large buffer with no
+ // benefit. Apply the clip, which already takes the display size
+ // into account. The clipped size will then be used to calculate the
+ // size of the buffer we will create for blurring.
+ if (!blurRect.intersect(SkRect::Make(canvas->getDeviceClipBounds()))) {
+ // This should not happen, but if it did, we would use the full
+ // sized layer, which should still be fine.
+ ALOGW("blur bounds does not intersect display clip!");
+ }
// if the clip needs to be applied then apply it now and make sure
// it is restored before we attempt to draw any shadows.