diff options
-rw-r--r-- | libs/renderengine/gl/GLESRenderEngine.h | 1 | ||||
-rw-r--r-- | libs/renderengine/gl/filters/BlurFilter.cpp | 6 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/RenderEngine.h | 4 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/mock/RenderEngine.h | 1 | ||||
-rw-r--r-- | libs/renderengine/skia/SkiaGLRenderEngine.h | 1 | ||||
-rw-r--r-- | libs/renderengine/tests/RenderEngineTest.cpp | 15 | ||||
-rw-r--r-- | libs/renderengine/tests/RenderEngineThreadedTest.cpp | 11 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.cpp | 15 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.h | 1 |
9 files changed, 42 insertions, 13 deletions
diff --git a/libs/renderengine/gl/GLESRenderEngine.h b/libs/renderengine/gl/GLESRenderEngine.h index 64d6c6bdd7..7496b74ba5 100644 --- a/libs/renderengine/gl/GLESRenderEngine.h +++ b/libs/renderengine/gl/GLESRenderEngine.h @@ -72,6 +72,7 @@ public: base::unique_fd&& bufferFence, base::unique_fd* drawFence) override; bool cleanupPostRender(CleanupMode mode) override; int getContextPriority() override; + bool supportsBackgroundBlur() override { return mBlurFilter != nullptr; } EGLDisplay getEGLDisplay() const { return mEGLDisplay; } // Creates an output image for rendering to diff --git a/libs/renderengine/gl/filters/BlurFilter.cpp b/libs/renderengine/gl/filters/BlurFilter.cpp index 19f18c0a7f..3455e08cfe 100644 --- a/libs/renderengine/gl/filters/BlurFilter.cpp +++ b/libs/renderengine/gl/filters/BlurFilter.cpp @@ -207,7 +207,7 @@ status_t BlurFilter::render(bool multiPass) { } string BlurFilter::getVertexShader() const { - return R"SHADER(#version 310 es + return R"SHADER(#version 300 es precision mediump float; in vec2 aPosition; @@ -222,7 +222,7 @@ string BlurFilter::getVertexShader() const { } string BlurFilter::getFragmentShader() const { - return R"SHADER(#version 310 es + return R"SHADER(#version 300 es precision mediump float; uniform sampler2D uTexture; @@ -244,7 +244,7 @@ string BlurFilter::getFragmentShader() const { } string BlurFilter::getMixFragShader() const { - string shader = R"SHADER(#version 310 es + string shader = R"SHADER(#version 300 es precision mediump float; in highp vec2 vUV; diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h index 506f81ecc2..163a163fb2 100644 --- a/libs/renderengine/include/renderengine/RenderEngine.h +++ b/libs/renderengine/include/renderengine/RenderEngine.h @@ -188,6 +188,10 @@ public: // number of contexts that can be created at a specific priority level in the system. virtual int getContextPriority() = 0; + // Returns true if blur was requested in the RenderEngineCreationArgs and the implementation + // also supports background blur. If false, no blur will be applied when drawing layers. + virtual bool supportsBackgroundBlur() = 0; + protected: friend class threaded::RenderEngineThreaded; }; diff --git a/libs/renderengine/include/renderengine/mock/RenderEngine.h b/libs/renderengine/include/renderengine/mock/RenderEngine.h index 2c34da40f8..895ba3fe85 100644 --- a/libs/renderengine/include/renderengine/mock/RenderEngine.h +++ b/libs/renderengine/include/renderengine/mock/RenderEngine.h @@ -54,6 +54,7 @@ public: base::unique_fd*)); MOCK_METHOD0(cleanFramebufferCache, void()); MOCK_METHOD0(getContextPriority, int()); + MOCK_METHOD0(supportsBackgroundBlur, bool()); }; } // namespace mock diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.h b/libs/renderengine/skia/SkiaGLRenderEngine.h index 8ef73599a4..5779ae679b 100644 --- a/libs/renderengine/skia/SkiaGLRenderEngine.h +++ b/libs/renderengine/skia/SkiaGLRenderEngine.h @@ -61,6 +61,7 @@ public: bool isProtected() const override { return mInProtectedContext; } bool supportsProtectedContent() const override; bool useProtectedContext(bool useProtectedContext) override; + bool supportsBackgroundBlur() override { return mBlurFilter != nullptr; } protected: void dump(std::string& result) override; diff --git a/libs/renderengine/tests/RenderEngineTest.cpp b/libs/renderengine/tests/RenderEngineTest.cpp index 886c9da70a..500a90b6ef 100644 --- a/libs/renderengine/tests/RenderEngineTest.cpp +++ b/libs/renderengine/tests/RenderEngineTest.cpp @@ -914,13 +914,6 @@ void RenderEngineTest::fillBufferWithRoundedCorners() { template <typename SourceVariant> void RenderEngineTest::fillBufferAndBlurBackground() { - char value[PROPERTY_VALUE_MAX]; - property_get("ro.surface_flinger.supports_background_blur", value, "0"); - if (!atoi(value)) { - // This device doesn't support blurs, no-op. - return; - } - auto blurRadius = 50; auto center = DEFAULT_DISPLAY_WIDTH / 2; @@ -959,9 +952,11 @@ void RenderEngineTest::fillBufferAndBlurBackground() { // solid color expectBufferColor(Rect(0, 0, 1, 1), 255, 0, 0, 255, 0 /* tolerance */); - // blurred color (downsampling should result in the center color being close to 128) - expectBufferColor(Rect(center - 1, center - 5, center + 1, center + 5), 128, 128, 0, 255, - 10 /* tolerance */); + if (mRE->supportsBackgroundBlur()) { + // blurred color (downsampling should result in the center color being close to 128) + expectBufferColor(Rect(center - 1, center - 5, center + 1, center + 5), 128, 128, 0, 255, + 10 /* tolerance */); + } } template <typename SourceVariant> diff --git a/libs/renderengine/tests/RenderEngineThreadedTest.cpp b/libs/renderengine/tests/RenderEngineThreadedTest.cpp index 02ff06f393..08b672a99f 100644 --- a/libs/renderengine/tests/RenderEngineThreadedTest.cpp +++ b/libs/renderengine/tests/RenderEngineThreadedTest.cpp @@ -144,6 +144,17 @@ TEST_F(RenderEngineThreadedTest, cleanupPostRender_returnsTrue) { ASSERT_EQ(true, result); } +TEST_F(RenderEngineThreadedTest, supportsBackgroundBlur_returnsFalse) { + EXPECT_CALL(*mRenderEngine, supportsBackgroundBlur()).WillOnce(Return(false)); + status_t result = mThreadedRE->supportsBackgroundBlur(); + ASSERT_EQ(false, result); +} + +TEST_F(RenderEngineThreadedTest, supportsBackgroundBlur_returnsTrue) { + EXPECT_CALL(*mRenderEngine, supportsBackgroundBlur()).WillOnce(Return(true)); + status_t result = mThreadedRE->supportsBackgroundBlur(); + ASSERT_EQ(true, result); +} TEST_F(RenderEngineThreadedTest, drawLayers) { renderengine::DisplaySettings settings; std::vector<const renderengine::LayerSettings*> layers; diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp index 3b97f5659e..f4481358cf 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.cpp +++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp @@ -315,6 +315,21 @@ int RenderEngineThreaded::getContextPriority() { return resultFuture.get(); } +bool RenderEngineThreaded::supportsBackgroundBlur() { + std::promise<bool> resultPromise; + std::future<bool> resultFuture = resultPromise.get_future(); + { + std::lock_guard lock(mThreadMutex); + mFunctionCalls.push([&resultPromise](renderengine::RenderEngine& instance) { + ATRACE_NAME("REThreaded::supportsBackgroundBlur"); + bool returnValue = instance.supportsBackgroundBlur(); + resultPromise.set_value(returnValue); + }); + } + mCondition.notify_one(); + return resultFuture.get(); +} + } // namespace threaded } // namespace renderengine } // namespace android diff --git a/libs/renderengine/threaded/RenderEngineThreaded.h b/libs/renderengine/threaded/RenderEngineThreaded.h index 8b1e2dec5a..8279cbcd09 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.h +++ b/libs/renderengine/threaded/RenderEngineThreaded.h @@ -64,6 +64,7 @@ public: void cleanFramebufferCache() override; int getContextPriority() override; + bool supportsBackgroundBlur() override; private: void threadMain(CreateInstanceFactory factory); |