diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 21f1cb3e4a..b3f83f0799 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -821,6 +821,23 @@ void chooseRenderEngineType(renderengine::RenderEngineCreationArgs::Builder& bui } } +/** + * Choose a suggested blurring algorithm if supportsBlur is true. By default Kawase will be + * suggested as it's faster than a full Gaussian blur and looks close enough. + */ +renderengine::RenderEngine::BlurAlgorithm chooseBlurAlgorithm(bool supportsBlur) { + if (!supportsBlur) { + return renderengine::RenderEngine::BlurAlgorithm::NONE; + } + + auto const algorithm = base::GetProperty(PROPERTY_DEBUG_RENDERENGINE_BLUR_ALGORITHM, ""); + if (algorithm == "gaussian") { + return renderengine::RenderEngine::BlurAlgorithm::GAUSSIAN; + } else { + return renderengine::RenderEngine::BlurAlgorithm::KAWASE; + } +} + void SurfaceFlinger::init() FTL_FAKE_GUARD(kMainThreadContext) { ATRACE_CALL(); ALOGI( "SurfaceFlinger's main thread ready to run. " @@ -836,7 +853,7 @@ void SurfaceFlinger::init() FTL_FAKE_GUARD(kMainThreadContext) { .setImageCacheSize(maxFrameBufferAcquiredBuffers) .setEnableProtectedContext(enable_protected_contents(false)) .setPrecacheToneMapperShaderOnly(false) - .setSupportsBackgroundBlur(mSupportsBlur) + .setBlurAlgorithm(chooseBlurAlgorithm(mSupportsBlur)) .setContextPriority( useContextPriority ? renderengine::RenderEngine::ContextPriority::REALTIME |