Loading libs/renderengine/gl/GLESRenderEngine.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -1156,10 +1156,6 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display, const mat4 projectionMatrix = ui::Transform(display.orientation).asMatrix4() * mState.projectionMatrix; if (!display.clearRegion.isEmpty()) { glDisable(GL_BLEND); fillRegionWithColor(display.clearRegion, 0.0, 0.0, 0.0, 1.0); } Mesh mesh = Mesh::Builder() .setPrimitive(Mesh::TRIANGLE_FAN) Loading libs/renderengine/include/renderengine/DisplaySettings.h +1 −9 Original line number Diff line number Diff line Loading @@ -51,10 +51,6 @@ struct DisplaySettings { // dataspace, in non-linear space. mat4 colorTransform = mat4(); // Region that will be cleared to (0, 0, 0, 1) prior to rendering. // This is specified in layer-stack space. Region clearRegion = Region::INVALID_REGION; // An additional orientation flag to be applied after clipping the output. // By way of example, this may be used for supporting fullscreen screenshot // capture of a device in landscape while the buffer is in portrait Loading @@ -68,8 +64,7 @@ struct DisplaySettings { static inline bool operator==(const DisplaySettings& lhs, const DisplaySettings& rhs) { return lhs.physicalDisplay == rhs.physicalDisplay && lhs.clip == rhs.clip && lhs.maxLuminance == rhs.maxLuminance && lhs.outputDataspace == rhs.outputDataspace && lhs.colorTransform == rhs.colorTransform && lhs.clearRegion.hasSameRects(rhs.clearRegion) && lhs.orientation == rhs.orientation; lhs.colorTransform == rhs.colorTransform && lhs.orientation == rhs.orientation; } // Defining PrintTo helps with Google Tests. Loading @@ -84,9 +79,6 @@ static inline void PrintTo(const DisplaySettings& settings, ::std::ostream* os) PrintTo(settings.outputDataspace, os); *os << "\n .colorTransform = " << settings.colorTransform; *os << "\n .clearRegion = "; PrintTo(settings.clearRegion, os); *os << "\n .orientation = " << settings.orientation; *os << "\n}"; } } // namespace renderengine Loading libs/renderengine/skia/SkiaGLRenderEngine.cpp +0 −22 Original line number Diff line number Diff line Loading @@ -812,28 +812,6 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, canvas->clear(SK_ColorTRANSPARENT); initCanvas(canvas, display); // TODO: clearRegion was required for SurfaceView when a buffer is not yet available but the // view is still on-screen. The clear region could be re-specified as a black color layer, // however. if (!display.clearRegion.isEmpty()) { ATRACE_NAME("ClearRegion"); size_t numRects = 0; Rect const* rects = display.clearRegion.getArray(&numRects); SkIRect skRects[numRects]; for (int i = 0; i < numRects; ++i) { skRects[i] = SkIRect::MakeLTRB(rects[i].left, rects[i].top, rects[i].right, rects[i].bottom); } SkRegion clearRegion; SkPaint paint; sk_sp<SkShader> shader = SkShaders::Color(SkColor4f{.fR = 0., .fG = 0., .fB = 0., .fA = 1.0}, toSkColorSpace(dstDataspace)); paint.setShader(shader); clearRegion.setRects(skRects, numRects); canvas->drawRegion(clearRegion, paint); } for (const auto& layer : layers) { ATRACE_FORMAT("DrawLayer: %s", layer->name.c_str()); Loading libs/renderengine/tests/RenderEngineTest.cpp +0 −31 Original line number Diff line number Diff line Loading @@ -524,10 +524,6 @@ public: void fillGreenColorBufferThenClearRegion(); void clearLeftRegion(); void clearRegion(); template <typename SourceVariant> void drawShadow(const renderengine::LayerSettings& castingLayer, const renderengine::ShadowSettings& shadow, const ubyte4& casterColor, Loading Loading @@ -1195,28 +1191,6 @@ void RenderEngineTest::fillBufferWithoutPremultiplyAlpha() { expectBufferColor(fullscreenRect(), 128, 0, 0, 128, 1); } void RenderEngineTest::clearLeftRegion() { renderengine::DisplaySettings settings; settings.physicalDisplay = fullscreenRect(); // Here logical space is 4x4 settings.clip = Rect(4, 4); settings.clearRegion = Region(Rect(2, 4)); std::vector<const renderengine::LayerSettings*> layers; // fake layer, without bounds should not render anything renderengine::LayerSettings layer; layers.push_back(&layer); invokeDraw(settings, layers); } void RenderEngineTest::clearRegion() { // Reuse mBuffer clearLeftRegion(); expectBufferColor(Rect(DEFAULT_DISPLAY_WIDTH / 2, DEFAULT_DISPLAY_HEIGHT), 0, 0, 0, 255); expectBufferColor(Rect(DEFAULT_DISPLAY_WIDTH / 2, 0, DEFAULT_DISPLAY_WIDTH, DEFAULT_DISPLAY_HEIGHT), 0, 0, 0, 0); } template <typename SourceVariant> void RenderEngineTest::drawShadow(const renderengine::LayerSettings& castingLayer, const renderengine::ShadowSettings& shadow, Loading Loading @@ -1647,11 +1621,6 @@ TEST_P(RenderEngineTest, drawLayers_fillBuffer_withoutPremultiplyingAlpha) { fillBufferWithoutPremultiplyAlpha(); } TEST_P(RenderEngineTest, drawLayers_clearRegion) { initializeRenderEngine(); clearRegion(); } TEST_P(RenderEngineTest, drawLayers_fillShadow_castsWithoutCasterLayer) { initializeRenderEngine(); Loading services/surfaceflinger/BufferLayer.cpp +4 −33 Original line number Diff line number Diff line Loading @@ -152,39 +152,10 @@ std::optional<compositionengine::LayerFE::LayerSettings> BufferLayer::prepareCli return result; } if (CC_UNLIKELY(mBufferInfo.mBuffer == 0)) { // the texture has not been created yet, this Layer has // in fact never been drawn into. This happens frequently with // SurfaceView because the WindowManager can't know when the client // has drawn the first time. // If there is nothing under us, we paint the screen in black, otherwise // we just skip this update. // figure out if there is something below us Region under; bool finished = false; mFlinger->mDrawingState.traverseInZOrder([&](Layer* layer) { if (finished || layer == static_cast<BufferLayer const*>(this)) { finished = true; return; } under.orSelf(layer->getScreenBounds()); }); // if not everything below us is covered, we plug the holes! Region holes(targetSettings.clip.subtract(under)); if (!holes.isEmpty()) { targetSettings.clearRegion.orSelf(holes); } if (mSidebandStream != nullptr) { if (CC_UNLIKELY(mBufferInfo.mBuffer == 0) && mSidebandStream != nullptr) { // For surfaceview of tv sideband, there is no activeBuffer // in bufferqueue, we need return LayerSettings. return result; } else { return std::nullopt; } } const bool blackOutLayer = (isProtected() && !targetSettings.supportsProtectedContent) || ((isSecure() || isProtected()) && !targetSettings.isSecure); Loading Loading
libs/renderengine/gl/GLESRenderEngine.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -1156,10 +1156,6 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display, const mat4 projectionMatrix = ui::Transform(display.orientation).asMatrix4() * mState.projectionMatrix; if (!display.clearRegion.isEmpty()) { glDisable(GL_BLEND); fillRegionWithColor(display.clearRegion, 0.0, 0.0, 0.0, 1.0); } Mesh mesh = Mesh::Builder() .setPrimitive(Mesh::TRIANGLE_FAN) Loading
libs/renderengine/include/renderengine/DisplaySettings.h +1 −9 Original line number Diff line number Diff line Loading @@ -51,10 +51,6 @@ struct DisplaySettings { // dataspace, in non-linear space. mat4 colorTransform = mat4(); // Region that will be cleared to (0, 0, 0, 1) prior to rendering. // This is specified in layer-stack space. Region clearRegion = Region::INVALID_REGION; // An additional orientation flag to be applied after clipping the output. // By way of example, this may be used for supporting fullscreen screenshot // capture of a device in landscape while the buffer is in portrait Loading @@ -68,8 +64,7 @@ struct DisplaySettings { static inline bool operator==(const DisplaySettings& lhs, const DisplaySettings& rhs) { return lhs.physicalDisplay == rhs.physicalDisplay && lhs.clip == rhs.clip && lhs.maxLuminance == rhs.maxLuminance && lhs.outputDataspace == rhs.outputDataspace && lhs.colorTransform == rhs.colorTransform && lhs.clearRegion.hasSameRects(rhs.clearRegion) && lhs.orientation == rhs.orientation; lhs.colorTransform == rhs.colorTransform && lhs.orientation == rhs.orientation; } // Defining PrintTo helps with Google Tests. Loading @@ -84,9 +79,6 @@ static inline void PrintTo(const DisplaySettings& settings, ::std::ostream* os) PrintTo(settings.outputDataspace, os); *os << "\n .colorTransform = " << settings.colorTransform; *os << "\n .clearRegion = "; PrintTo(settings.clearRegion, os); *os << "\n .orientation = " << settings.orientation; *os << "\n}"; } } // namespace renderengine Loading
libs/renderengine/skia/SkiaGLRenderEngine.cpp +0 −22 Original line number Diff line number Diff line Loading @@ -812,28 +812,6 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display, canvas->clear(SK_ColorTRANSPARENT); initCanvas(canvas, display); // TODO: clearRegion was required for SurfaceView when a buffer is not yet available but the // view is still on-screen. The clear region could be re-specified as a black color layer, // however. if (!display.clearRegion.isEmpty()) { ATRACE_NAME("ClearRegion"); size_t numRects = 0; Rect const* rects = display.clearRegion.getArray(&numRects); SkIRect skRects[numRects]; for (int i = 0; i < numRects; ++i) { skRects[i] = SkIRect::MakeLTRB(rects[i].left, rects[i].top, rects[i].right, rects[i].bottom); } SkRegion clearRegion; SkPaint paint; sk_sp<SkShader> shader = SkShaders::Color(SkColor4f{.fR = 0., .fG = 0., .fB = 0., .fA = 1.0}, toSkColorSpace(dstDataspace)); paint.setShader(shader); clearRegion.setRects(skRects, numRects); canvas->drawRegion(clearRegion, paint); } for (const auto& layer : layers) { ATRACE_FORMAT("DrawLayer: %s", layer->name.c_str()); Loading
libs/renderengine/tests/RenderEngineTest.cpp +0 −31 Original line number Diff line number Diff line Loading @@ -524,10 +524,6 @@ public: void fillGreenColorBufferThenClearRegion(); void clearLeftRegion(); void clearRegion(); template <typename SourceVariant> void drawShadow(const renderengine::LayerSettings& castingLayer, const renderengine::ShadowSettings& shadow, const ubyte4& casterColor, Loading Loading @@ -1195,28 +1191,6 @@ void RenderEngineTest::fillBufferWithoutPremultiplyAlpha() { expectBufferColor(fullscreenRect(), 128, 0, 0, 128, 1); } void RenderEngineTest::clearLeftRegion() { renderengine::DisplaySettings settings; settings.physicalDisplay = fullscreenRect(); // Here logical space is 4x4 settings.clip = Rect(4, 4); settings.clearRegion = Region(Rect(2, 4)); std::vector<const renderengine::LayerSettings*> layers; // fake layer, without bounds should not render anything renderengine::LayerSettings layer; layers.push_back(&layer); invokeDraw(settings, layers); } void RenderEngineTest::clearRegion() { // Reuse mBuffer clearLeftRegion(); expectBufferColor(Rect(DEFAULT_DISPLAY_WIDTH / 2, DEFAULT_DISPLAY_HEIGHT), 0, 0, 0, 255); expectBufferColor(Rect(DEFAULT_DISPLAY_WIDTH / 2, 0, DEFAULT_DISPLAY_WIDTH, DEFAULT_DISPLAY_HEIGHT), 0, 0, 0, 0); } template <typename SourceVariant> void RenderEngineTest::drawShadow(const renderengine::LayerSettings& castingLayer, const renderengine::ShadowSettings& shadow, Loading Loading @@ -1647,11 +1621,6 @@ TEST_P(RenderEngineTest, drawLayers_fillBuffer_withoutPremultiplyingAlpha) { fillBufferWithoutPremultiplyAlpha(); } TEST_P(RenderEngineTest, drawLayers_clearRegion) { initializeRenderEngine(); clearRegion(); } TEST_P(RenderEngineTest, drawLayers_fillShadow_castsWithoutCasterLayer) { initializeRenderEngine(); Loading
services/surfaceflinger/BufferLayer.cpp +4 −33 Original line number Diff line number Diff line Loading @@ -152,39 +152,10 @@ std::optional<compositionengine::LayerFE::LayerSettings> BufferLayer::prepareCli return result; } if (CC_UNLIKELY(mBufferInfo.mBuffer == 0)) { // the texture has not been created yet, this Layer has // in fact never been drawn into. This happens frequently with // SurfaceView because the WindowManager can't know when the client // has drawn the first time. // If there is nothing under us, we paint the screen in black, otherwise // we just skip this update. // figure out if there is something below us Region under; bool finished = false; mFlinger->mDrawingState.traverseInZOrder([&](Layer* layer) { if (finished || layer == static_cast<BufferLayer const*>(this)) { finished = true; return; } under.orSelf(layer->getScreenBounds()); }); // if not everything below us is covered, we plug the holes! Region holes(targetSettings.clip.subtract(under)); if (!holes.isEmpty()) { targetSettings.clearRegion.orSelf(holes); } if (mSidebandStream != nullptr) { if (CC_UNLIKELY(mBufferInfo.mBuffer == 0) && mSidebandStream != nullptr) { // For surfaceview of tv sideband, there is no activeBuffer // in bufferqueue, we need return LayerSettings. return result; } else { return std::nullopt; } } const bool blackOutLayer = (isProtected() && !targetSettings.supportsProtectedContent) || ((isSecure() || isProtected()) && !targetSettings.isSecure); Loading