Loading services/surfaceflinger/CompositionEngine/src/LayerFECompositionState.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,20 @@ void LayerFECompositionState::dump(std::string& out) const { dumpVal(out, "stretchEffect", stretchEffect); } if (!blurRegions.empty()) { out.append("\n blurRegions {"); for (const auto& region : blurRegions) { out.append("\n "); base::StringAppendF(&out, "{radius=%du, cornerRadii=[%f, %f, %f, %f], alpha=%f, rect=[%d, " "%d, %d, %d]", region.blurRadius, region.cornerRadiusTL, region.cornerRadiusTR, region.cornerRadiusBL, region.cornerRadiusBR, region.alpha, region.left, region.top, region.right, region.bottom); } out.append("\n }\n "); } if (!metadata.empty()) { out.append("\n metadata {"); for (const auto& [key, entry] : metadata) { Loading services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -367,7 +367,12 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer, if (outputDependentState.overrideInfo.buffer != nullptr) { displayFrame = outputDependentState.overrideInfo.displayFrame; sourceCrop = displayFrame.toFloatRect(); sourceCrop = FloatRect(0.f, 0.f, static_cast<float>(outputDependentState.overrideInfo.buffer->getBuffer() ->getWidth()), static_cast<float>(outputDependentState.overrideInfo.buffer->getBuffer() ->getHeight())); } ALOGV("Writing display frame [%d, %d, %d, %d]", displayFrame.left, displayFrame.top, Loading services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ #include <gtest/gtest.h> #include <log/log.h> #include <renderengine/mock/RenderEngine.h> #include <ui/PixelFormat.h> #include "MockHWC2.h" #include "MockHWComposer.h" #include "RegionMatcher.h" #include "renderengine/mock/RenderEngine.h" namespace android::compositionengine { namespace { Loading Loading @@ -707,6 +708,7 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const half4 kColor; static const Rect kDisplayFrame; static const Rect kOverrideDisplayFrame; static const FloatRect kOverrideSourceCrop; static const Region kOutputSpaceVisibleRegion; static const Region kOverrideVisibleRegion; static const mat4 kColorTransform; Loading @@ -715,7 +717,7 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const HdrMetadata kHdrMetadata; static native_handle_t* kSidebandStreamHandle; static const sp<GraphicBuffer> kBuffer; std::shared_ptr<renderengine::ExternalTexture> kOverrideBuffer; static const sp<GraphicBuffer> kOverrideBuffer; static const sp<Fence> kFence; static const sp<Fence> kOverrideFence; static const std::string kLayerGenericMetadata1Key; Loading @@ -724,11 +726,6 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const std::vector<uint8_t> kLayerGenericMetadata2Value; OutputLayerWriteStateToHWCTest() { kOverrideBuffer = std::make_shared< renderengine::ExternalTexture>(new GraphicBuffer(), mRenderEngine, renderengine::ExternalTexture::Usage::READABLE | renderengine::ExternalTexture::Usage:: WRITEABLE); auto& outputLayerState = mOutputLayer.editState(); outputLayerState.hwc = impl::OutputLayerCompositionState::Hwc(mHwcLayer); Loading Loading @@ -768,7 +765,11 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { void includeOverrideInfo() { auto& overrideInfo = mOutputLayer.editState().overrideInfo; overrideInfo.buffer = kOverrideBuffer; overrideInfo.buffer = std::make_shared< renderengine::ExternalTexture>(kOverrideBuffer, mRenderEngine, renderengine::ExternalTexture::Usage::READABLE | renderengine::ExternalTexture::Usage:: WRITEABLE); overrideInfo.acquireFence = kOverrideFence; overrideInfo.displayFrame = kOverrideDisplayFrame; overrideInfo.dataspace = kOverrideDataspace; Loading Loading @@ -850,6 +851,7 @@ const half4 OutputLayerWriteStateToHWCTest::kColor{81.f / 255.f, 82.f / 255.f, 8 84.f / 255.f}; const Rect OutputLayerWriteStateToHWCTest::kDisplayFrame{1001, 1002, 1003, 10044}; const Rect OutputLayerWriteStateToHWCTest::kOverrideDisplayFrame{1002, 1003, 1004, 20044}; const FloatRect OutputLayerWriteStateToHWCTest::kOverrideSourceCrop{0.f, 0.f, 4.f, 5.f}; const Region OutputLayerWriteStateToHWCTest::kOutputSpaceVisibleRegion{ Rect{1005, 1006, 1007, 1008}}; const Region OutputLayerWriteStateToHWCTest::kOverrideVisibleRegion{Rect{1006, 1007, 1008, 1009}}; Loading @@ -863,6 +865,10 @@ const HdrMetadata OutputLayerWriteStateToHWCTest::kHdrMetadata{{/* LightFlattena native_handle_t* OutputLayerWriteStateToHWCTest::kSidebandStreamHandle = reinterpret_cast<native_handle_t*>(1031); const sp<GraphicBuffer> OutputLayerWriteStateToHWCTest::kBuffer; const sp<GraphicBuffer> OutputLayerWriteStateToHWCTest::kOverrideBuffer = new GraphicBuffer(4, 5, PIXEL_FORMAT_RGBA_8888, AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN | AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN); const sp<Fence> OutputLayerWriteStateToHWCTest::kFence; const sp<Fence> OutputLayerWriteStateToHWCTest::kOverrideFence = new Fence(); const std::string OutputLayerWriteStateToHWCTest::kLayerGenericMetadata1Key = Loading Loading @@ -1050,11 +1056,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideDisplayFrame.toFloatRect(), kOverrideBufferTransform, kOverrideBlendMode, kOverrideAlpha); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, kOverrideBlendMode, kOverrideAlpha); expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer->getBuffer(), kOverrideFence); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer, kOverrideFence); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); Loading Loading
services/surfaceflinger/CompositionEngine/src/LayerFECompositionState.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,20 @@ void LayerFECompositionState::dump(std::string& out) const { dumpVal(out, "stretchEffect", stretchEffect); } if (!blurRegions.empty()) { out.append("\n blurRegions {"); for (const auto& region : blurRegions) { out.append("\n "); base::StringAppendF(&out, "{radius=%du, cornerRadii=[%f, %f, %f, %f], alpha=%f, rect=[%d, " "%d, %d, %d]", region.blurRadius, region.cornerRadiusTL, region.cornerRadiusTR, region.cornerRadiusBL, region.cornerRadiusBR, region.alpha, region.left, region.top, region.right, region.bottom); } out.append("\n }\n "); } if (!metadata.empty()) { out.append("\n metadata {"); for (const auto& [key, entry] : metadata) { Loading
services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -367,7 +367,12 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer, if (outputDependentState.overrideInfo.buffer != nullptr) { displayFrame = outputDependentState.overrideInfo.displayFrame; sourceCrop = displayFrame.toFloatRect(); sourceCrop = FloatRect(0.f, 0.f, static_cast<float>(outputDependentState.overrideInfo.buffer->getBuffer() ->getWidth()), static_cast<float>(outputDependentState.overrideInfo.buffer->getBuffer() ->getHeight())); } ALOGV("Writing display frame [%d, %d, %d, %d]", displayFrame.left, displayFrame.top, Loading
services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ #include <gtest/gtest.h> #include <log/log.h> #include <renderengine/mock/RenderEngine.h> #include <ui/PixelFormat.h> #include "MockHWC2.h" #include "MockHWComposer.h" #include "RegionMatcher.h" #include "renderengine/mock/RenderEngine.h" namespace android::compositionengine { namespace { Loading Loading @@ -707,6 +708,7 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const half4 kColor; static const Rect kDisplayFrame; static const Rect kOverrideDisplayFrame; static const FloatRect kOverrideSourceCrop; static const Region kOutputSpaceVisibleRegion; static const Region kOverrideVisibleRegion; static const mat4 kColorTransform; Loading @@ -715,7 +717,7 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const HdrMetadata kHdrMetadata; static native_handle_t* kSidebandStreamHandle; static const sp<GraphicBuffer> kBuffer; std::shared_ptr<renderengine::ExternalTexture> kOverrideBuffer; static const sp<GraphicBuffer> kOverrideBuffer; static const sp<Fence> kFence; static const sp<Fence> kOverrideFence; static const std::string kLayerGenericMetadata1Key; Loading @@ -724,11 +726,6 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { static const std::vector<uint8_t> kLayerGenericMetadata2Value; OutputLayerWriteStateToHWCTest() { kOverrideBuffer = std::make_shared< renderengine::ExternalTexture>(new GraphicBuffer(), mRenderEngine, renderengine::ExternalTexture::Usage::READABLE | renderengine::ExternalTexture::Usage:: WRITEABLE); auto& outputLayerState = mOutputLayer.editState(); outputLayerState.hwc = impl::OutputLayerCompositionState::Hwc(mHwcLayer); Loading Loading @@ -768,7 +765,11 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { void includeOverrideInfo() { auto& overrideInfo = mOutputLayer.editState().overrideInfo; overrideInfo.buffer = kOverrideBuffer; overrideInfo.buffer = std::make_shared< renderengine::ExternalTexture>(kOverrideBuffer, mRenderEngine, renderengine::ExternalTexture::Usage::READABLE | renderengine::ExternalTexture::Usage:: WRITEABLE); overrideInfo.acquireFence = kOverrideFence; overrideInfo.displayFrame = kOverrideDisplayFrame; overrideInfo.dataspace = kOverrideDataspace; Loading Loading @@ -850,6 +851,7 @@ const half4 OutputLayerWriteStateToHWCTest::kColor{81.f / 255.f, 82.f / 255.f, 8 84.f / 255.f}; const Rect OutputLayerWriteStateToHWCTest::kDisplayFrame{1001, 1002, 1003, 10044}; const Rect OutputLayerWriteStateToHWCTest::kOverrideDisplayFrame{1002, 1003, 1004, 20044}; const FloatRect OutputLayerWriteStateToHWCTest::kOverrideSourceCrop{0.f, 0.f, 4.f, 5.f}; const Region OutputLayerWriteStateToHWCTest::kOutputSpaceVisibleRegion{ Rect{1005, 1006, 1007, 1008}}; const Region OutputLayerWriteStateToHWCTest::kOverrideVisibleRegion{Rect{1006, 1007, 1008, 1009}}; Loading @@ -863,6 +865,10 @@ const HdrMetadata OutputLayerWriteStateToHWCTest::kHdrMetadata{{/* LightFlattena native_handle_t* OutputLayerWriteStateToHWCTest::kSidebandStreamHandle = reinterpret_cast<native_handle_t*>(1031); const sp<GraphicBuffer> OutputLayerWriteStateToHWCTest::kBuffer; const sp<GraphicBuffer> OutputLayerWriteStateToHWCTest::kOverrideBuffer = new GraphicBuffer(4, 5, PIXEL_FORMAT_RGBA_8888, AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN | AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN); const sp<Fence> OutputLayerWriteStateToHWCTest::kFence; const sp<Fence> OutputLayerWriteStateToHWCTest::kOverrideFence = new Fence(); const std::string OutputLayerWriteStateToHWCTest::kLayerGenericMetadata1Key = Loading Loading @@ -1050,11 +1056,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideDisplayFrame.toFloatRect(), kOverrideBufferTransform, kOverrideBlendMode, kOverrideAlpha); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, kOverrideBlendMode, kOverrideAlpha); expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer->getBuffer(), kOverrideFence); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer, kOverrideFence); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); Loading