diff options
| author | 2021-04-23 13:12:31 +0000 | |
|---|---|---|
| committer | 2021-04-23 13:12:31 +0000 | |
| commit | 21edd5736cda468a9179bb12de84fb73baea0494 (patch) | |
| tree | 5ad2bbfd12696f1286c2f2bec0b837e25d448abc | |
| parent | f0dcab5d1c7949c76f456b1ca1e9d8ed7dfd336d (diff) | |
| parent | e425ac83252e0401b780b9367e213fce10e4b4f9 (diff) | |
Merge "Fix SF crashing when blur layer rect is empty" into sc-dev
| -rw-r--r-- | libs/renderengine/skia/SkiaGLRenderEngine.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp index 0a84754d22..377b6f89ad 100644 --- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp +++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp @@ -821,27 +821,30 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, // rect to be blurred in the coordinate space of blurInput const auto blurRect = canvas->getTotalMatrix().mapRect(bounds); - if (layer->backgroundBlurRadius > 0) { - ATRACE_NAME("BackgroundBlur"); - auto blurredImage = - mBlurFilter->generate(grContext.get(), layer->backgroundBlurRadius, - blurInput, blurRect); - - cachedBlurs[layer->backgroundBlurRadius] = blurredImage; - - mBlurFilter->drawBlurRegion(canvas, getBlurRegion(layer), blurRect, blurredImage, - blurInput); - } - for (auto region : layer->blurRegions) { - if (cachedBlurs[region.blurRadius] == nullptr) { - ATRACE_NAME("BlurRegion"); - cachedBlurs[region.blurRadius] = - mBlurFilter->generate(grContext.get(), region.blurRadius, blurInput, - blurRect); + // TODO(b/182216890): Filter out empty layers earlier + if (blurRect.width() > 0 && blurRect.height() > 0) { + if (layer->backgroundBlurRadius > 0) { + ATRACE_NAME("BackgroundBlur"); + auto blurredImage = + mBlurFilter->generate(grContext.get(), layer->backgroundBlurRadius, + blurInput, blurRect); + + cachedBlurs[layer->backgroundBlurRadius] = blurredImage; + + mBlurFilter->drawBlurRegion(canvas, getBlurRegion(layer), blurRect, + blurredImage, blurInput); + } + for (auto region : layer->blurRegions) { + if (cachedBlurs[region.blurRadius] == nullptr) { + ATRACE_NAME("BlurRegion"); + cachedBlurs[region.blurRadius] = + mBlurFilter->generate(grContext.get(), region.blurRadius, blurInput, + blurRect); + } + + mBlurFilter->drawBlurRegion(canvas, region, blurRect, + cachedBlurs[region.blurRadius], blurInput); } - - mBlurFilter->drawBlurRegion(canvas, region, blurRect, - cachedBlurs[region.blurRadius], blurInput); } } |