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

Commit d7445495 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

SF: Temporarily expose primary display id

WM needs to know the address of the primary display in order to
consume ro.surface_flinger.primary_display_orientation correctly.
This path will be removed in the future once we support per
display install orientations.

Bug: 196167822
Test: check initial buffer transforms on displays with a different
install orientation

Merged-In: I2b0a92196a8a1f05f7d99b531775b9979f07af98
Change-Id: I2b0a92196a8a1f05f7d99b531775b9979f07af98
parent 4541ab50
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -292,6 +292,17 @@ public:
        return {};
    }

    status_t getPrimaryPhysicalDisplayId(PhysicalDisplayId* displayId) const override {
        Parcel data, reply;
        SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor());
        SAFE_PARCEL(remote()->transact, BnSurfaceComposer::GET_PRIMARY_PHYSICAL_DISPLAY_ID, data,
                    &reply);
        uint64_t rawId;
        SAFE_PARCEL(reply.readUint64, &rawId);
        *displayId = PhysicalDisplayId(rawId);
        return NO_ERROR;
    }

    sp<IBinder> getPhysicalDisplayToken(PhysicalDisplayId displayId) const override {
        Parcel data, reply;
        data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
@@ -1730,6 +1741,16 @@ status_t BnSurfaceComposer::onTransact(
                           [](PhysicalDisplayId id) { return id.value; });
            return reply->writeUint64Vector(rawIds);
        }
        case GET_PRIMARY_PHYSICAL_DISPLAY_ID: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            PhysicalDisplayId id;
            status_t result = getPrimaryPhysicalDisplayId(&id);
            if (result != NO_ERROR) {
                ALOGE("getPrimaryPhysicalDisplayId: Failed to get id");
                return result;
            }
            return reply->writeUint64(id.value);
        }
        case ADD_REGION_SAMPLING_LISTENER: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            Rect samplingArea;
+4 −0
Original line number Diff line number Diff line
@@ -937,6 +937,10 @@ std::vector<PhysicalDisplayId> SurfaceComposerClient::getPhysicalDisplayIds() {
    return ComposerService::getComposerService()->getPhysicalDisplayIds();
}

status_t SurfaceComposerClient::getPrimaryPhysicalDisplayId(PhysicalDisplayId* id) {
    return ComposerService::getComposerService()->getPrimaryPhysicalDisplayId(id);
}

std::optional<PhysicalDisplayId> SurfaceComposerClient::getInternalDisplayId() {
    return ComposerService::getComposerService()->getInternalDisplayId();
}
+3 −0
Original line number Diff line number Diff line
@@ -141,6 +141,8 @@ public:
     */
    virtual std::vector<PhysicalDisplayId> getPhysicalDisplayIds() const = 0;

    virtual status_t getPrimaryPhysicalDisplayId(PhysicalDisplayId*) const = 0;

    // TODO(b/74619554): Remove this stopgap once the framework is display-agnostic.
    std::optional<PhysicalDisplayId> getInternalDisplayId() const {
        const auto displayIds = getPhysicalDisplayIds();
@@ -632,6 +634,7 @@ public:
        REMOVE_TUNNEL_MODE_ENABLED_LISTENER,
        ADD_WINDOW_INFOS_LISTENER,
        REMOVE_WINDOW_INFOS_LISTENER,
        GET_PRIMARY_PHYSICAL_DISPLAY_ID,
        // Always append new enum to the end.
    };

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

    //! Get stable IDs for connected physical displays
    static std::vector<PhysicalDisplayId> getPhysicalDisplayIds();
    static status_t getPrimaryPhysicalDisplayId(PhysicalDisplayId*);
    static std::optional<PhysicalDisplayId> getInternalDisplayId();

    //! Get token for a physical display given its stable ID
+1 −0
Original line number Diff line number Diff line
@@ -694,6 +694,7 @@ public:
            bool /*secure*/) override { return nullptr; }
    void destroyDisplay(const sp<IBinder>& /*display */) override {}
    std::vector<PhysicalDisplayId> getPhysicalDisplayIds() const override { return {}; }
    status_t getPrimaryPhysicalDisplayId(PhysicalDisplayId*) const override { return NO_ERROR; }
    sp<IBinder> getPhysicalDisplayToken(PhysicalDisplayId) const override { return nullptr; }
    status_t setTransactionState(const FrameTimelineInfo& /*frameTimelineInfo*/,
                                 const Vector<ComposerState>& /*state*/,
Loading