diff options
Diffstat (limited to 'libs/gui/ISurfaceComposer.cpp')
-rw-r--r-- | libs/gui/ISurfaceComposer.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index 3bf63062f6..3c8289fe2a 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -297,6 +297,20 @@ 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); + if (const auto id = DisplayId::fromValue<PhysicalDisplayId>(rawId)) { + *displayId = *id; + return NO_ERROR; + } + return NAME_NOT_FOUND; + } + sp<IBinder> getPhysicalDisplayToken(PhysicalDisplayId displayId) const override { Parcel data, reply; data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); @@ -1738,6 +1752,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; |