diff options
| author | 2023-07-27 21:34:07 +0000 | |
|---|---|---|
| committer | 2023-07-27 21:34:07 +0000 | |
| commit | be2ac9c75328f62456965d764d9e2eb4869cd69e (patch) | |
| tree | aa3b691836021b4957e66e1ceb5b3d470b198701 /libs | |
| parent | 6c5d50bfee407e275c4efc2a6389a27b7b154a14 (diff) | |
| parent | 763e450b7c5fa6ad1ed35cabb96fdb87467d00c2 (diff) | |
Merge "RenderEngine: Limit the size of blur input to the display size" into udc-dev
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/renderengine/skia/SkiaRenderEngine.cpp | 14 |
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. |