diff options
author | 2024-03-20 21:59:06 +0000 | |
---|---|---|
committer | 2024-03-20 22:03:49 +0000 | |
commit | bbf362d24642ed22fd7d19f428125c8bd9e3f170 (patch) | |
tree | c249896f7b04f1d099c30c56f1d084a450b8cd3f | |
parent | 00853e597203520f2dc92d5991d8bbb15a21f0c0 (diff) |
Delete border rendering code from SurfaceFlinger.
Removed code is never used and drawing borders is done instead
by Window Manager Service. Changes revert ag/16980603 and
ag/17496275.
Bug: b/227656283
Test: presubmit
Test: SurfaceFlinger_test
Change-Id: Ib5c8bf74ad6764d65536dc60cc3c458edde86b3f
19 files changed, 3 insertions, 575 deletions
diff --git a/libs/gui/LayerState.cpp b/libs/gui/LayerState.cpp index 1e0aacddab..0a2879975b 100644 --- a/libs/gui/LayerState.cpp +++ b/libs/gui/LayerState.cpp @@ -90,7 +90,6 @@ layer_state_t::layer_state_t() fixedTransformHint(ui::Transform::ROT_INVALID), autoRefresh(false), isTrustedOverlay(false), - borderEnabled(false), bufferCrop(Rect::INVALID_RECT), destinationFrame(Rect::INVALID_RECT), dropInputMode(gui::DropInputMode::NONE) { @@ -122,12 +121,6 @@ status_t layer_state_t::write(Parcel& output) const SAFE_PARCEL(output.write, transparentRegion); SAFE_PARCEL(output.writeUint32, bufferTransform); SAFE_PARCEL(output.writeBool, transformToDisplayInverse); - SAFE_PARCEL(output.writeBool, borderEnabled); - SAFE_PARCEL(output.writeFloat, borderWidth); - SAFE_PARCEL(output.writeFloat, borderColor.r); - SAFE_PARCEL(output.writeFloat, borderColor.g); - SAFE_PARCEL(output.writeFloat, borderColor.b); - SAFE_PARCEL(output.writeFloat, borderColor.a); SAFE_PARCEL(output.writeUint32, static_cast<uint32_t>(dataspace)); SAFE_PARCEL(output.write, hdrMetadata); SAFE_PARCEL(output.write, surfaceDamageRegion); @@ -238,17 +231,6 @@ status_t layer_state_t::read(const Parcel& input) SAFE_PARCEL(input.read, transparentRegion); SAFE_PARCEL(input.readUint32, &bufferTransform); SAFE_PARCEL(input.readBool, &transformToDisplayInverse); - SAFE_PARCEL(input.readBool, &borderEnabled); - SAFE_PARCEL(input.readFloat, &tmpFloat); - borderWidth = tmpFloat; - SAFE_PARCEL(input.readFloat, &tmpFloat); - borderColor.r = tmpFloat; - SAFE_PARCEL(input.readFloat, &tmpFloat); - borderColor.g = tmpFloat; - SAFE_PARCEL(input.readFloat, &tmpFloat); - borderColor.b = tmpFloat; - SAFE_PARCEL(input.readFloat, &tmpFloat); - borderColor.a = tmpFloat; uint32_t tmpUint32 = 0; SAFE_PARCEL(input.readUint32, &tmpUint32); @@ -659,12 +641,6 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eShadowRadiusChanged; shadowRadius = other.shadowRadius; } - if (other.what & eRenderBorderChanged) { - what |= eRenderBorderChanged; - borderEnabled = other.borderEnabled; - borderWidth = other.borderWidth; - borderColor = other.borderColor; - } if (other.what & eDefaultFrameRateCompatibilityChanged) { what |= eDefaultFrameRateCompatibilityChanged; defaultFrameRateCompatibility = other.defaultFrameRateCompatibility; @@ -794,7 +770,6 @@ uint64_t layer_state_t::diff(const layer_state_t& other) const { CHECK_DIFF2(diff, eBackgroundColorChanged, other, bgColor, bgColorDataspace); if (other.what & eMetadataChanged) diff |= eMetadataChanged; CHECK_DIFF(diff, eShadowRadiusChanged, other, shadowRadius); - CHECK_DIFF3(diff, eRenderBorderChanged, other, borderEnabled, borderWidth, borderColor); CHECK_DIFF(diff, eDefaultFrameRateCompatibilityChanged, other, defaultFrameRateCompatibility); CHECK_DIFF(diff, eFrameRateSelectionPriority, other, frameRateSelectionPriority); CHECK_DIFF3(diff, eFrameRateChanged, other, frameRate, frameRateCompatibility, diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 4f1356bebb..1d2ea3ea02 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -2250,23 +2250,6 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setDropI return *this; } -SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::enableBorder( - const sp<SurfaceControl>& sc, bool shouldEnable, float width, const half4& color) { - layer_state_t* s = getLayerState(sc); - if (!s) { - mStatus = BAD_INDEX; - return *this; - } - - s->what |= layer_state_t::eRenderBorderChanged; - s->borderEnabled = shouldEnable; - s->borderWidth = width; - s->borderColor = color; - - registerSurfaceControlForCallback(sc); - return *this; -} - // --------------------------------------------------------------------------- DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) { diff --git a/libs/gui/include/gui/LayerState.h b/libs/gui/include/gui/LayerState.h index 0fedea7b9e..ca7acf9be4 100644 --- a/libs/gui/include/gui/LayerState.h +++ b/libs/gui/include/gui/LayerState.h @@ -179,7 +179,6 @@ struct layer_state_t { eCachingHintChanged = 0x00000200, eDimmingEnabledChanged = 0x00000400, eShadowRadiusChanged = 0x00000800, - eRenderBorderChanged = 0x00001000, eBufferCropChanged = 0x00002000, eRelativeLayerChanged = 0x00004000, eReparent = 0x00008000, @@ -258,8 +257,8 @@ struct layer_state_t { layer_state_t::eBlurRegionsChanged | layer_state_t::eColorChanged | layer_state_t::eColorSpaceAgnosticChanged | layer_state_t::eColorTransformChanged | layer_state_t::eCornerRadiusChanged | layer_state_t::eDimmingEnabledChanged | - layer_state_t::eHdrMetadataChanged | layer_state_t::eRenderBorderChanged | - layer_state_t::eShadowRadiusChanged | layer_state_t::eStretchChanged; + layer_state_t::eHdrMetadataChanged | layer_state_t::eShadowRadiusChanged | + layer_state_t::eStretchChanged; // Changes which invalidates the layer's visible region in CE. static constexpr uint64_t CONTENT_DIRTY = layer_state_t::CONTENT_CHANGES | @@ -388,11 +387,6 @@ struct layer_state_t { // should be trusted for input occlusion detection purposes bool isTrustedOverlay; - // Flag to indicate if border needs to be enabled on the layer - bool borderEnabled; - float borderWidth; - half4 borderColor; - // Stretch effect to be applied to this layer StretchEffect stretchEffect; diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index 288882695a..79224e6782 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -744,9 +744,6 @@ public: const Rect& destinationFrame); Transaction& setDropInputMode(const sp<SurfaceControl>& sc, gui::DropInputMode mode); - Transaction& enableBorder(const sp<SurfaceControl>& sc, bool shouldEnable, float width, - const half4& color); - status_t setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); diff --git a/libs/renderengine/include/renderengine/BorderRenderInfo.h b/libs/renderengine/include/renderengine/BorderRenderInfo.h deleted file mode 100644 index 0ee6661f33..0000000000 --- a/libs/renderengine/include/renderengine/BorderRenderInfo.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once -#include <math/mat4.h> -#include <ui/Region.h> - -namespace android { -namespace renderengine { - -struct BorderRenderInfo { - float width = 0; - half4 color; - Region combinedRegion; - - bool operator==(const BorderRenderInfo& rhs) const { - return (width == rhs.width && color == rhs.color && - combinedRegion.hasSameRects(rhs.combinedRegion)); - } -}; - -} // namespace renderengine -} // namespace android
\ No newline at end of file diff --git a/libs/renderengine/include/renderengine/DisplaySettings.h b/libs/renderengine/include/renderengine/DisplaySettings.h index 8d7c13cb18..deb62534a5 100644 --- a/libs/renderengine/include/renderengine/DisplaySettings.h +++ b/libs/renderengine/include/renderengine/DisplaySettings.h @@ -22,7 +22,6 @@ #include <math/mat4.h> #include <renderengine/PrintMatrix.h> -#include <renderengine/BorderRenderInfo.h> #include <ui/DisplayId.h> #include <ui/GraphicTypes.h> #include <ui/Rect.h> @@ -87,8 +86,6 @@ struct DisplaySettings { // Configures the rendering intent of the output display. This is used for tonemapping. aidl::android::hardware::graphics::composer3::RenderIntent renderIntent = aidl::android::hardware::graphics::composer3::RenderIntent::TONE_MAP_COLORIMETRIC; - - std::vector<renderengine::BorderRenderInfo> borderInfoList; }; static inline bool operator==(const DisplaySettings& lhs, const DisplaySettings& rhs) { @@ -100,8 +97,7 @@ static inline bool operator==(const DisplaySettings& lhs, const DisplaySettings& lhs.deviceHandlesColorTransform == rhs.deviceHandlesColorTransform && lhs.orientation == rhs.orientation && lhs.targetLuminanceNits == rhs.targetLuminanceNits && - lhs.dimmingStage == rhs.dimmingStage && lhs.renderIntent == rhs.renderIntent && - lhs.borderInfoList == rhs.borderInfoList; + lhs.dimmingStage == rhs.dimmingStage && lhs.renderIntent == rhs.renderIntent; } static const char* orientation_to_string(uint32_t orientation) { diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp index 9e8fe6802d..c12c119bfd 100644 --- a/libs/renderengine/skia/SkiaRenderEngine.cpp +++ b/libs/renderengine/skia/SkiaRenderEngine.cpp @@ -1127,25 +1127,6 @@ void SkiaRenderEngine::drawLayersInternal( skgpu::ganesh::Flush(activeSurface); } } - for (const auto& borderRenderInfo : display.borderInfoList) { - SkPaint p; - p.setColor(SkColor4f{borderRenderInfo.color.r, borderRenderInfo.color.g, - borderRenderInfo.color.b, borderRenderInfo.color.a}); - p.setAntiAlias(true); - p.setStyle(SkPaint::kStroke_Style); - p.setStrokeWidth(borderRenderInfo.width); - SkRegion sk_region; - SkPath path; - - // Construct a final SkRegion using Regions - for (const auto& r : borderRenderInfo.combinedRegion) { - sk_region.op({r.left, r.top, r.right, r.bottom}, SkRegion::kUnion_Op); - } - - sk_region.getBoundaryPath(&path); - canvas->drawPath(path, p); - path.close(); - } surfaceAutoSaveRestore.restore(); mCapture->endCapture(); diff --git a/libs/renderengine/tests/RenderEngineTest.cpp b/libs/renderengine/tests/RenderEngineTest.cpp index 7b8eb8470f..3a07205ea6 100644 --- a/libs/renderengine/tests/RenderEngineTest.cpp +++ b/libs/renderengine/tests/RenderEngineTest.cpp @@ -2490,51 +2490,6 @@ TEST_P(RenderEngineTest, testDisableBlendingBuffer) { expectBufferColor(rect, 0, 128, 0, 128); } -TEST_P(RenderEngineTest, testBorder) { - if (!GetParam()->apiSupported()) { - GTEST_SKIP(); - } - - initializeRenderEngine(); - - const ui::Dataspace dataspace = ui::Dataspace::V0_SRGB; - - const auto displayRect = Rect(1080, 2280); - renderengine::DisplaySettings display{ - .physicalDisplay = displayRect, - .clip = displayRect, - .outputDataspace = dataspace, - }; - display.borderInfoList.clear(); - renderengine::BorderRenderInfo info; - info.combinedRegion = Region(Rect(99, 99, 199, 199)); - info.width = 20.0f; - info.color = half4{1.0f, 128.0f / 255.0f, 0.0f, 1.0f}; - display.borderInfoList.emplace_back(info); - - const auto greenBuffer = allocateAndFillSourceBuffer(1, 1, ubyte4(0, 255, 0, 255)); - const renderengine::LayerSettings greenLayer{ - .geometry.boundaries = FloatRect(0.f, 0.f, 1.f, 1.f), - .source = - renderengine::PixelSource{ - .buffer = - renderengine::Buffer{ - .buffer = greenBuffer, - .usePremultipliedAlpha = true, - }, - }, - .alpha = 1.0f, - .sourceDataspace = dataspace, - .whitePointNits = 200.f, - }; - - std::vector<renderengine::LayerSettings> layers; - layers.emplace_back(greenLayer); - invokeDraw(display, layers); - - expectBufferColor(Rect(99, 99, 101, 101), 255, 128, 0, 255, 1); -} - TEST_P(RenderEngineTest, testDimming) { if (!GetParam()->apiSupported()) { GTEST_SKIP(); diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h index 843b5c5c82..dd0f985e1c 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h @@ -34,12 +34,6 @@ namespace android::compositionengine { using Layers = std::vector<sp<compositionengine::LayerFE>>; using Outputs = std::vector<std::shared_ptr<compositionengine::Output>>; -struct BorderRenderInfo { - float width = 0; - half4 color; - std::vector<int32_t> layerIds; -}; - // Interface of composition engine power hint callback. struct ICEPowerCallback { virtual void notifyCpuLoadUp() = 0; @@ -101,8 +95,6 @@ struct CompositionRefreshArgs { // TODO (b/255601557): Calculate per display. std::optional<std::chrono::steady_clock::time_point> scheduledFrameTime; - std::vector<BorderRenderInfo> borderInfoList; - bool hasTrustedPresentationListener = false; ICEPowerCallback* powerCallback = nullptr; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h index 911d67b5ed..b2ef9191ba 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h @@ -162,7 +162,6 @@ protected: private: void dirtyEntireOutput(); - void updateCompositionStateForBorder(const compositionengine::CompositionRefreshArgs&); compositionengine::OutputLayer* findLayerRequestingBackgroundComposition() const; void finishPrepareFrame(); ui::Dataspace getBestDataspace(ui::Dataspace*, bool*) const; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h index 6b1c318d1c..f8ffde1e51 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h @@ -34,7 +34,6 @@ #include <compositionengine/CompositionRefreshArgs.h> #include <compositionengine/ProjectionSpace.h> -#include <renderengine/BorderRenderInfo.h> #include <ui/LayerStack.h> #include <ui/Rect.h> #include <ui/Region.h> @@ -166,8 +165,6 @@ struct OutputCompositionState { bool treat170mAsSrgb = false; - std::vector<renderengine::BorderRenderInfo> borderInfoList; - uint64_t lastOutputLayerHash = 0; uint64_t outputLayerHash = 0; diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp index 921e05dfb2..0935a67f9b 100644 --- a/services/surfaceflinger/CompositionEngine/src/Output.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp @@ -818,44 +818,6 @@ void Output::updateCompositionState(const compositionengine::CompositionRefreshA forceClientComposition = false; } } - - updateCompositionStateForBorder(refreshArgs); -} - -void Output::updateCompositionStateForBorder( - const compositionengine::CompositionRefreshArgs& refreshArgs) { - std::unordered_map<int32_t, const Region*> layerVisibleRegionMap; - // Store a map of layerId to their computed visible region. - for (auto* layer : getOutputLayersOrderedByZ()) { - int layerId = (layer->getLayerFE()).getSequence(); - layerVisibleRegionMap[layerId] = &((layer->getState()).visibleRegion); - } - OutputCompositionState& outputCompositionState = editState(); - outputCompositionState.borderInfoList.clear(); - bool clientComposeTopLayer = false; - for (const auto& borderInfo : refreshArgs.borderInfoList) { - renderengine::BorderRenderInfo info; - for (const auto& id : borderInfo.layerIds) { - info.combinedRegion.orSelf(*(layerVisibleRegionMap[id])); - } - - if (!info.combinedRegion.isEmpty()) { - info.width = borderInfo.width; - info.color = borderInfo.color; - outputCompositionState.borderInfoList.emplace_back(std::move(info)); - clientComposeTopLayer = true; - } - } - - // In this situation we must client compose the top layer instead of using hwc - // because we want to draw the border above all else. - // This could potentially cause a bit of a performance regression if the top - // layer would have been rendered using hwc originally. - // TODO(b/227656283): Measure system's performance before enabling the border feature - if (clientComposeTopLayer) { - auto topLayer = getOutputLayerOrderedByZByIndex(getOutputLayerCount() - 1); - (topLayer->editState()).forceClientComposition = true; - } } void Output::planComposition() { @@ -1443,13 +1405,6 @@ renderengine::DisplaySettings Output::generateClientCompositionDisplaySettings( // Compute the global color transform matrix. clientCompositionDisplay.colorTransform = outputState.colorTransformMatrix; - for (auto& info : outputState.borderInfoList) { - renderengine::BorderRenderInfo borderInfo; - borderInfo.width = info.width; - borderInfo.color = info.color; - borderInfo.combinedRegion = info.combinedRegion; - clientCompositionDisplay.borderInfoList.emplace_back(std::move(borderInfo)); - } clientCompositionDisplay.deviceHandlesColorTransform = outputState.usesDeviceComposition || getSkipColorTransform(); return clientCompositionDisplay; diff --git a/services/surfaceflinger/CompositionEngine/src/OutputCompositionState.cpp b/services/surfaceflinger/CompositionEngine/src/OutputCompositionState.cpp index 39cf67165a..6683e67029 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputCompositionState.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputCompositionState.cpp @@ -67,11 +67,6 @@ void OutputCompositionState::dump(std::string& out) const { out.append("\n "); dumpVal(out, "treat170mAsSrgb", treat170mAsSrgb); - - out.append("\n"); - for (const auto& borderRenderInfo : borderInfoList) { - dumpVal(out, "borderRegion", borderRenderInfo.combinedRegion); - } out.append("\n"); } diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 736fec6fb2..4606e43691 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -150,7 +150,6 @@ Layer::Layer(const surfaceflinger::LayerCreationArgs& args) mWindowType(static_cast<WindowInfo::Type>( args.metadata.getInt32(gui::METADATA_WINDOW_TYPE, 0))), mLayerCreationFlags(args.flags), - mBorderEnabled(false), mLegacyLayerFE(args.flinger->getFactory().createLayerFE(mName)) { ALOGV("Creating Layer %s", getDebugName()); @@ -1235,28 +1234,6 @@ StretchEffect Layer::getStretchEffect() const { return StretchEffect{}; } -bool Layer::enableBorder(bool shouldEnable, float width, const half4& color) { - if (mBorderEnabled == shouldEnable && mBorderWidth == width && mBorderColor == color) { - return false; - } - mBorderEnabled = shouldEnable; - mBorderWidth = width; - mBorderColor = color; - return true; -} - -bool Layer::isBorderEnabled() { - return mBorderEnabled; -} - -float Layer::getBorderWidth() { - return mBorderWidth; -} - -const half4& Layer::getBorderColor() { - return mBorderColor; -} - bool Layer::propagateFrameRateForLayerTree(FrameRate parentFrameRate, bool overrideChildren, bool* transactionNeeded) { // Gets the frame rate to propagate to children. diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 0ceecec7ec..b5d7075574 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -874,10 +874,6 @@ public: bool setStretchEffect(const StretchEffect& effect); StretchEffect getStretchEffect() const; - bool enableBorder(bool shouldEnable, float width, const half4& color); - bool isBorderEnabled(); - float getBorderWidth(); - const half4& getBorderColor(); bool setBufferCrop(const Rect& /* bufferCrop */); bool setDestinationFrame(const Rect& /* destinationFrame */); @@ -1238,10 +1234,6 @@ private: bool findInHierarchy(const sp<Layer>&); - bool mBorderEnabled = false; - float mBorderWidth; - half4 mBorderColor; - void setTransformHintLegacy(ui::Transform::RotationFlags); void releasePreviousBuffer(); void resetDrawingStateBufferInfo(); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 9d07671232..b1bb576586 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -167,10 +167,6 @@ #define NO_THREAD_SAFETY_ANALYSIS \ _Pragma("GCC error \"Prefer <ftl/fake_guard.h> or MutexUtils.h helpers.\"") -// To enable layer borders in the system, change the below flag to true. -#undef DOES_CONTAIN_BORDER -#define DOES_CONTAIN_BORDER false - namespace android { using namespace std::chrono_literals; using namespace std::string_literals; @@ -2702,21 +2698,6 @@ CompositeResultsPerDisplay SurfaceFlinger::composite( mLayerMetadataSnapshotNeeded = false; } - if (DOES_CONTAIN_BORDER) { - refreshArgs.borderInfoList.clear(); - mDrawingState.traverse([&refreshArgs](Layer* layer) { - if (layer->isBorderEnabled()) { - compositionengine::BorderRenderInfo info; - info.width = layer->getBorderWidth(); - info.color = layer->getBorderColor(); - layer->traverse(LayerVector::StateSet::Drawing, [&info](Layer* ilayer) { - info.layerIds.push_back(ilayer->getSequence()); - }); - refreshArgs.borderInfoList.emplace_back(std::move(info)); - } - }); - } - refreshArgs.bufferIdsToUncache = std::move(mBufferIdsToUncache); refreshArgs.layersWithQueuedFrames.reserve(mLayersWithQueuedFrames.size()); @@ -5461,11 +5442,6 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime if (what & layer_state_t::eBlurRegionsChanged) { if (layer->setBlurRegions(s.blurRegions)) flags |= eTraversalNeeded; } - if (what & layer_state_t::eRenderBorderChanged) { - if (layer->enableBorder(s.borderEnabled, s.borderWidth, s.borderColor)) { - flags |= eTraversalNeeded; - } - } if (what & layer_state_t::eLayerStackChanged) { ssize_t idx = mCurrentState.layersSortedByZ.indexOf(layer); // We only allow setting layer stacks for top level layers, diff --git a/services/surfaceflinger/tests/Android.bp b/services/surfaceflinger/tests/Android.bp index 1fd7ae06c0..988d26926d 100644 --- a/services/surfaceflinger/tests/Android.bp +++ b/services/surfaceflinger/tests/Android.bp @@ -42,7 +42,6 @@ cc_test { "EffectLayer_test.cpp", "HdrSdrRatioOverlay_test.cpp", "InvalidHandles_test.cpp", - "LayerBorder_test.cpp", "LayerCallback_test.cpp", "LayerRenderTypeTransaction_test.cpp", "LayerState_test.cpp", diff --git a/services/surfaceflinger/tests/LayerBorder_test.cpp b/services/surfaceflinger/tests/LayerBorder_test.cpp deleted file mode 100644 index 00e134b4d2..0000000000 --- a/services/surfaceflinger/tests/LayerBorder_test.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// TODO(b/129481165): remove the #pragma below and fix conversion issues -// TODO: Amend all tests when screenshots become fully reworked for borders -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wconversion" - -#include <chrono> // std::chrono::seconds -#include <thread> // std::this_thread::sleep_for -#include "LayerTransactionTest.h" - -namespace android { - -class LayerBorderTest : public LayerTransactionTest { -protected: - virtual void SetUp() { - LayerTransactionTest::SetUp(); - ASSERT_EQ(NO_ERROR, mClient->initCheck()); - - toHalf3 = ColorTransformHelper::toHalf3; - toHalf4 = ColorTransformHelper::toHalf4; - - const auto ids = SurfaceComposerClient::getPhysicalDisplayIds(); - ASSERT_FALSE(ids.empty()); - const auto display = SurfaceComposerClient::getPhysicalDisplayToken(ids.front()); - ASSERT_FALSE(display == nullptr); - mColorOrange = toHalf4({255, 140, 0, 255}); - mParentLayer = createColorLayer("Parent layer", Color::RED); - - mContainerLayer = mClient->createSurface(String8("Container Layer"), 0 /* width */, - 0 /* height */, PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceContainer | - ISurfaceComposerClient::eNoColorFill, - mParentLayer->getHandle()); - EXPECT_NE(nullptr, mContainerLayer.get()) << "failed to create container layer"; - - mEffectLayer1 = mClient->createSurface(String8("Effect Layer"), 0 /* width */, - 0 /* height */, PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceEffect | - ISurfaceComposerClient::eNoColorFill, - mContainerLayer->getHandle()); - EXPECT_NE(nullptr, mEffectLayer1.get()) << "failed to create effect layer 1"; - - mEffectLayer2 = mClient->createSurface(String8("Effect Layer"), 0 /* width */, - 0 /* height */, PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceEffect | - ISurfaceComposerClient::eNoColorFill, - mContainerLayer->getHandle()); - - EXPECT_NE(nullptr, mEffectLayer2.get()) << "failed to create effect layer 2"; - - asTransaction([&](Transaction& t) { - t.setDisplayLayerStack(display, ui::DEFAULT_LAYER_STACK); - t.setLayer(mParentLayer, INT32_MAX - 20).show(mParentLayer); - t.setFlags(mParentLayer, layer_state_t::eLayerOpaque, layer_state_t::eLayerOpaque); - - t.setColor(mEffectLayer1, toHalf3(Color::BLUE)); - - t.setColor(mEffectLayer2, toHalf3(Color::GREEN)); - }); - } - - virtual void TearDown() { - // Uncomment the line right below when running any of the tests - // std::this_thread::sleep_for (std::chrono::seconds(30)); - LayerTransactionTest::TearDown(); - mParentLayer = 0; - } - - std::function<half3(Color)> toHalf3; - std::function<half4(Color)> toHalf4; - sp<SurfaceControl> mParentLayer, mContainerLayer, mEffectLayer1, mEffectLayer2; - half4 mColorOrange; -}; - -TEST_F(LayerBorderTest, OverlappingVisibleRegions) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, PartiallyCoveredVisibleRegion) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - - t.enableBorder(mEffectLayer1, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, NonOverlappingVisibleRegion) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 200, 200)); - t.setCrop(mEffectLayer2, Rect(400, 400, 600, 600)); - - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, EmptyVisibleRegion) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(200, 200, 400, 400)); - t.setCrop(mEffectLayer2, Rect(0, 0, 600, 600)); - - t.enableBorder(mEffectLayer1, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, ZOrderAdjustment) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - t.setLayer(mParentLayer, 10); - t.setLayer(mEffectLayer1, 30); - t.setLayer(mEffectLayer2, 20); - - t.enableBorder(mEffectLayer1, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, GrandChildHierarchy) { - sp<SurfaceControl> containerLayer2 = - mClient->createSurface(String8("Container Layer"), 0 /* width */, 0 /* height */, - PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceContainer | - ISurfaceComposerClient::eNoColorFill, - mContainerLayer->getHandle()); - EXPECT_NE(nullptr, containerLayer2.get()) << "failed to create container layer 2"; - - sp<SurfaceControl> effectLayer3 = - mClient->createSurface(String8("Effect Layer"), 0 /* width */, 0 /* height */, - PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceEffect | - ISurfaceComposerClient::eNoColorFill, - containerLayer2->getHandle()); - - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - t.setCrop(effectLayer3, Rect(400, 400, 800, 800)); - t.setColor(effectLayer3, toHalf3(Color::BLUE)); - - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(effectLayer3); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, TransparentAlpha) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - t.setAlpha(mEffectLayer1, 0.0f); - - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, SemiTransparentAlpha) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - t.setAlpha(mEffectLayer2, 0.5f); - - t.enableBorder(mEffectLayer2, true, 20, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, InvisibleLayers) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - t.hide(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, LayerWithBuffer) { - asTransaction([&](Transaction& t) { - t.hide(mEffectLayer1); - t.hide(mEffectLayer2); - t.show(mContainerLayer); - - sp<SurfaceControl> layer = - mClient->createSurface(String8("BufferState"), 0 /* width */, 0 /* height */, - PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceBufferState, - mContainerLayer->getHandle()); - - sp<GraphicBuffer> buffer = - sp<GraphicBuffer>::make(400u, 400u, PIXEL_FORMAT_RGBA_8888, 1u, - BufferUsage::CPU_READ_OFTEN | BufferUsage::CPU_WRITE_OFTEN | - BufferUsage::COMPOSER_OVERLAY | - BufferUsage::GPU_TEXTURE, - "test"); - TransactionUtils::fillGraphicBufferColor(buffer, Rect(0, 0, 200, 200), Color::GREEN); - TransactionUtils::fillGraphicBufferColor(buffer, Rect(200, 200, 400, 400), Color::BLUE); - - t.setBuffer(layer, buffer); - t.setPosition(layer, 100, 100); - t.show(layer); - t.enableBorder(mContainerLayer, true, 20, mColorOrange); - }); -} - -TEST_F(LayerBorderTest, CustomWidth) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - - t.enableBorder(mContainerLayer, true, 50, mColorOrange); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, CustomColor) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 400, 400)); - t.setCrop(mEffectLayer2, Rect(200, 200, 600, 600)); - - t.enableBorder(mContainerLayer, true, 20, toHalf4({255, 0, 255, 255})); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -TEST_F(LayerBorderTest, CustomWidthAndColorAndOpacity) { - asTransaction([&](Transaction& t) { - t.setCrop(mEffectLayer1, Rect(0, 0, 200, 200)); - t.setCrop(mEffectLayer2, Rect(400, 400, 600, 600)); - - t.enableBorder(mContainerLayer, true, 40, toHalf4({255, 255, 0, 128})); - t.show(mEffectLayer1); - t.show(mEffectLayer2); - t.show(mContainerLayer); - }); -} - -} // namespace android - -// TODO(b/129481165): remove the #pragma below and fix conversion issues -#pragma clang diagnostic pop // ignored "-Wconversion" diff --git a/services/surfaceflinger/tests/utils/ColorUtils.h b/services/surfaceflinger/tests/utils/ColorUtils.h index 38c422a26d..07916b60a7 100644 --- a/services/surfaceflinger/tests/utils/ColorUtils.h +++ b/services/surfaceflinger/tests/utils/ColorUtils.h @@ -33,10 +33,6 @@ struct Color { static const Color WHITE; static const Color BLACK; static const Color TRANSPARENT; - - half3 toHalf3() { return half3{r / 255.0f, g / 255.0f, b / 255.0f}; } - - half4 toHalf4() { return half4{r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f}; } }; const Color Color::RED{255, 0, 0, 255}; @@ -85,14 +81,6 @@ public: } color = ret; } - - static half3 toHalf3(const Color& color) { - return half3{color.r / 255.0f, color.g / 255.0f, color.b / 255.0f}; - } - - static half4 toHalf4(const Color& color) { - return half4{color.r / 255.0f, color.g / 255.0f, color.b / 255.0f, color.a / 255.0f}; - } }; } // namespace } // namespace android |