Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8da2ca2 authored by Gil Dekel's avatar Gil Dekel
Browse files

SF: Remove *DisplayId::tryCast usage from Output

Work towards DisplayId opaqueness by eliminating call-sites to APIs that
parse the display ID values directly. One such site is
compositionengine::Output and its implementers, such as
compositionengine::Display.

Replace all calls to *DisplayId::tryCast with local calls to cached
display state at the time of Output creation.

Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids
Bug: 390690584
Test: libcompositionengine_test && libsurfaceflinger_unittest
Change-Id: I5524928e839e683184a878d08c2515e3d9d0593d
parent 0864e4f9
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <ostream>
#include <string>

#include <ftl/match.h>
#include <ftl/optional.h>

namespace android {
@@ -187,6 +188,34 @@ private:
    explicit constexpr HalDisplayId(DisplayId other) : DisplayId(other) {}
};

using DisplayIdVariant = std::variant<PhysicalDisplayId, GpuVirtualDisplayId, HalVirtualDisplayId>;

template <typename DisplayIdType>
inline auto asDisplayIdOfType(DisplayIdVariant variant) -> ftl::Optional<DisplayIdType> {
    return ftl::match(
            variant,
            [](DisplayIdType id) -> ftl::Optional<DisplayIdType> { return ftl::Optional(id); },
            [](auto) -> ftl::Optional<DisplayIdType> { return std::nullopt; });
}

template <typename Variant>
inline auto asHalDisplayId(Variant variant) -> ftl::Optional<HalDisplayId> {
    return ftl::match(
            variant,
            [](GpuVirtualDisplayId) -> ftl::Optional<HalDisplayId> { return std::nullopt; },
            [](auto id) -> ftl::Optional<HalDisplayId> {
                return ftl::Optional(static_cast<HalDisplayId>(id));
            });
}

inline auto asPhysicalDisplayId(DisplayIdVariant variant) -> ftl::Optional<PhysicalDisplayId> {
    return asDisplayIdOfType<PhysicalDisplayId>(variant);
}

inline auto asDisplayId(DisplayIdVariant variant) -> DisplayId {
    return ftl::match(variant, [](auto id) -> DisplayId { return static_cast<DisplayId>(id); });
}

static_assert(sizeof(DisplayId) == sizeof(uint64_t));
static_assert(sizeof(HalDisplayId) == sizeof(uint64_t));
static_assert(sizeof(VirtualDisplayId) == sizeof(uint64_t));
+3 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ class CompositionEngine;
 * A parameter object for creating Display instances
 */
struct DisplayCreationArgs {
    DisplayId id;
    DisplayIdVariant idVariant;

    // Size of the display in pixels
    ui::Size pixels = ui::kInvalidSize;
@@ -68,8 +68,8 @@ class DisplayCreationArgsBuilder {
public:
    DisplayCreationArgs build() { return std::move(mArgs); }

    DisplayCreationArgsBuilder& setId(DisplayId id) {
        mArgs.id = id;
    DisplayCreationArgsBuilder& setId(DisplayIdVariant idVariant) {
        mArgs.idVariant = idVariant;
        return *this;
    }

+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@ public:

    // Returns the DisplayId the output represents, if it has one
    virtual ftl::Optional<DisplayId> getDisplayId() const = 0;
    virtual ftl::Optional<DisplayIdVariant> getDisplayIdVariant() const = 0;

    // Enables (or disables) composition on this output
    virtual void setCompositionEnabled(bool) = 0;
+5 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ public:

    // compositionengine::Output overrides
    ftl::Optional<DisplayId> getDisplayId() const override;
    ftl::Optional<DisplayIdVariant> getDisplayIdVariant() const override;
    bool isValid() const override;
    void dump(std::string&) const override;
    using compositionengine::impl::Output::setReleasedLayers;
@@ -104,8 +105,11 @@ private:
            override;
    bool hasPictureProcessing() const override;
    int32_t getMaxLayerPictureProfiles() const override;
    bool isGpuVirtualDisplay() const {
        return std::holds_alternative<GpuVirtualDisplayId>(mIdVariant);
    }

    DisplayId mId;
    DisplayIdVariant mIdVariant;
    bool mIsDisconnected = false;
    adpf::PowerAdvisor* mPowerAdvisor = nullptr;
    bool mHasPictureProcessing = false;
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public:
    // compositionengine::Output overrides
    bool isValid() const override;
    ftl::Optional<DisplayId> getDisplayId() const override;
    ftl::Optional<DisplayIdVariant> getDisplayIdVariant() const override;
    void setCompositionEnabled(bool) override;
    void setLayerCachingEnabled(bool) override;
    void setLayerCachingTexturePoolEnabled(bool) override;
Loading