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

Commit c28b4632 authored by Gil Dekel's avatar Gil Dekel Committed by Android (Google) Code Review
Browse files

Merge changes from topic "make-displayid-opaque" into main

* changes:
  SF: Remove PhysicalDisplayId::getPort()
  SF: Remove *DisplayId::tryCast and DisplayId::isVirtual()
  SF: Remove *DisplayId::tryCast usage from ScreenCaptureOutput
  SF: Remove *DisplayId::tryCast usage from VirtualDisplaySurface
  SF: Remove *DisplayId::tryCast usage from Output
parents 961b0183 9897d79b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2546,6 +2546,7 @@ status_t SurfaceComposerClient::getStaticDisplayInfo(int64_t displayId,
    if (status.isOk()) {
        // convert gui::StaticDisplayInfo to ui::StaticDisplayInfo
        outInfo->connectionType = static_cast<ui::DisplayConnectionType>(ginfo.connectionType);
        outInfo->port = ginfo.port;
        outInfo->density = ginfo.density;
        outInfo->secure = ginfo.secure;
        outInfo->installOrientation = static_cast<ui::Rotation>(ginfo.installOrientation);
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.gui.Rotation;
/** @hide */
parcelable StaticDisplayInfo {
    DisplayConnectionType connectionType = DisplayConnectionType.Internal;
    int port = -1;
    float density;
    boolean secure;
    @nullable DeviceProductInfo deviceProductInfo;
+42 −39
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 {
@@ -36,7 +37,6 @@ struct DisplayId {
    DisplayId& operator=(const DisplayId&) = default;

    static constexpr DisplayId fromValue(uint64_t value) { return DisplayId(value); }
    constexpr bool isVirtual() const { return value & FLAG_VIRTUAL; }

    uint64_t value;

@@ -66,13 +66,6 @@ struct PhysicalDisplayId : DisplayId {
    // TODO: b/162612135 - Remove default constructor.
    PhysicalDisplayId() = default;

    static constexpr ftl::Optional<PhysicalDisplayId> tryCast(DisplayId id) {
        if (id.isVirtual()) {
            return std::nullopt;
        }
        return PhysicalDisplayId(id);
    }

    // Returns a stable ID based on EDID and port information.
    static constexpr PhysicalDisplayId fromEdid(uint8_t port, uint16_t manufacturerId,
                                                uint32_t modelHash) {
@@ -90,8 +83,6 @@ struct PhysicalDisplayId : DisplayId {
        return PhysicalDisplayId(value);
    }

    constexpr uint8_t getPort() const { return static_cast<uint8_t>(value); }

private:
    // Flag indicating that the ID is stable across reboots.
    static constexpr uint64_t FLAG_STABLE = 1ULL << 62;
@@ -112,13 +103,6 @@ struct VirtualDisplayId : DisplayId {
    // Flag indicating that this virtual display is backed by the GPU.
    static constexpr uint64_t FLAG_GPU = 1ULL << 61;

    static constexpr std::optional<VirtualDisplayId> tryCast(DisplayId id) {
        if (id.isVirtual()) {
            return VirtualDisplayId(id);
        }
        return std::nullopt;
    }

    static constexpr VirtualDisplayId fromValue(uint64_t value) {
        return VirtualDisplayId(SkipVirtualFlag{}, value);
    }
@@ -134,13 +118,6 @@ protected:
struct HalVirtualDisplayId : VirtualDisplayId {
    explicit constexpr HalVirtualDisplayId(BaseId baseId) : VirtualDisplayId(baseId) {}

    static constexpr std::optional<HalVirtualDisplayId> tryCast(DisplayId id) {
        if (id.isVirtual() && !(id.value & FLAG_GPU)) {
            return HalVirtualDisplayId(id);
        }
        return std::nullopt;
    }

    static constexpr HalVirtualDisplayId fromValue(uint64_t value) {
        return HalVirtualDisplayId(SkipVirtualFlag{}, value);
    }
@@ -152,13 +129,6 @@ private:
struct GpuVirtualDisplayId : VirtualDisplayId {
    explicit constexpr GpuVirtualDisplayId(BaseId baseId) : VirtualDisplayId(FLAG_GPU | baseId) {}

    static constexpr std::optional<GpuVirtualDisplayId> tryCast(DisplayId id) {
        if (id.isVirtual() && (id.value & FLAG_GPU)) {
            return GpuVirtualDisplayId(id);
        }
        return std::nullopt;
    }

    static constexpr GpuVirtualDisplayId fromValue(uint64_t value) {
        return GpuVirtualDisplayId(SkipVirtualFlag{}, value);
    }
@@ -172,14 +142,6 @@ private:
struct HalDisplayId : DisplayId {
    constexpr HalDisplayId(HalVirtualDisplayId other) : DisplayId(other) {}
    constexpr HalDisplayId(PhysicalDisplayId other) : DisplayId(other) {}

    static constexpr std::optional<HalDisplayId> tryCast(DisplayId id) {
        if (GpuVirtualDisplayId::tryCast(id)) {
            return std::nullopt;
        }
        return HalDisplayId(id);
    }

    static constexpr HalDisplayId fromValue(uint64_t value) { return HalDisplayId(value); }

private:
@@ -187,6 +149,47 @@ private:
    explicit constexpr HalDisplayId(DisplayId other) : DisplayId(other) {}
};

using DisplayIdVariant = std::variant<PhysicalDisplayId, GpuVirtualDisplayId, HalVirtualDisplayId>;
using VirtualDisplayIdVariant = std::variant<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 asVirtualDisplayId(DisplayIdVariant variant) -> ftl::Optional<VirtualDisplayId> {
    return ftl::match(
            variant,
            [](GpuVirtualDisplayId id) -> ftl::Optional<VirtualDisplayId> {
                return ftl::Optional(static_cast<VirtualDisplayId>(id));
            },
            [](HalVirtualDisplayId id) -> ftl::Optional<VirtualDisplayId> {
                return ftl::Optional(static_cast<VirtualDisplayId>(id));
            },
            [](auto) -> ftl::Optional<VirtualDisplayId> { return std::nullopt; });
}

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));
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ enum class DisplayConnectionType { Internal, External, ftl_last = External };
// Immutable information about physical display.
struct StaticDisplayInfo {
    DisplayConnectionType connectionType = DisplayConnectionType::Internal;
    uint8_t port;
    float density = 0.f;
    bool secure = false;
    std::optional<DeviceProductInfo> deviceProductInfo;
+0 −10
Original line number Diff line number Diff line
@@ -44,16 +44,6 @@ cc_test {
    ],
}

cc_test {
    name: "DisplayId_test",
    shared_libs: ["libui"],
    srcs: ["DisplayId_test.cpp"],
    cflags: [
        "-Wall",
        "-Werror",
    ],
}

cc_test {
    name: "DisplayIdentification_test",
    shared_libs: ["libui"],
Loading