summaryrefslogtreecommitdiff
path: root/libs/ui/DisplayIdentification.cpp
AgeCommit message (Collapse)Author
2025-02-05SF: Turn DisplayId::fromValue to an explicit wrapper Gil Dekel
Currently, fromValue() would run a tryCast() check before returning an object, otherwise returning a nullopt. This is now an issue because tryCast() is reading the bits in the ID value, which is something we are trying to eliminate. Remove the tryCast() checks from fromValue(), thus relaxing it and turning it into a simple wrapper. Since fromValue() can no longer fail, make it always return the requested type. It is now up to SF to validate given DisplayIds via its different APIs. Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 393193354 Test: Display{Id | Identification}Test && libsurfaceflinger_unittest Change-Id: I0858567a1769bd94609919bd64bc471f4310ae55
2025-01-28SF: Add EDID-ID Fabrication Logic Gil Dekel
Adds logic to fabricate a display ID that is based solely on a given, pre-parsed EDID data. It does so by concatenating the EDID's generic fields, such as manufacturer ID, product ID, etc. as a string, and hash-combine them with the hashed values of the display serial numbers. All hash functions are stable in order to consistently reproduce display IDs when the same information is fed via the EDID blob. Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 366042891 Test: N/A Change-Id: I7693d4b0ca9fee5ed190c3530a69300a8a530cd2
2025-01-23libs/ui: Remove getManufacturerId() from DisplayId Gil Dekel
There are currently no clients of DisplayId who use getManufacturerId(). This CL removes the parsing and serving of the manufacturer's ID from DisplayID's API, together with the only client getPnpId(PhysicalDisplayId), which also isn't use in real use cases (only tests). See: go/edid-display-ids-al13 Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 390689046 Test: Display{Id|Identification} & libsurfaceflinger_unittest Change-Id: I03db2f6d71b32fcb387e99d9bc2730ab21760012
2024-12-02SF: Cache display port in DisplayIdentification on onHotplugConnect Gil Dekel
In order to be able to remove direct dependencies on a DisplayId's int value, we have to find alternatives for the API it provides. One such piece of data is a display port, which is encoded directly in the ID int value. Cache the port as it is retrieved from HWC into DisplayIdentification so it can be served later via alternative ISurfaceComposer APIs. Bug: 374163881 Bug: 377307639 Flag: EXEMPT refactor Test: libsurfaceflinger_unittest Change-Id: If255418ed4047531417004c4a1fd710061d93685
2024-11-16SF: Hash and cache descriptor block serial number Gil Dekel
More EDID fields are required as a part of migrating to EDID-based display IDs. This CL parses the device's serial number from the serial number descriptor bloc, (depicted by the FF marker), hashes it using a stable hash, and serves it as a part of the Edid struct. Later, amongst others, this value will be used to fabricate a unique display ID that is based on the display's EDID. See: 1. EDID spec: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf 2. https://en.wikipedia.org/wiki/Extended_Display_Identification_Data#Structure,_version_1.4 Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 378923759 Test: DisplayIdentification_test Change-Id: If9c9358b0d0850337496740d15419fd0ed330a02
2024-11-16SF: Parse, hash, and cache block 0 serial number Gil Dekel
More EDID fields are required as a part of migrating to EDID-based display IDs. This CL parses the device's serial number from bytes 12-15 of block 0 in the EDID blob, hashes it using a stable hash, and serves it as a part of the Edid struct. Later, amongst others, this value will be used to fabricate a unique display ID that is based on the display's EDID. See: 1. EDID spec: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf 2. https://en.wikipedia.org/wiki/Extended_Display_Identification_Data#Structure,_version_1.4 Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 378923334 Test: DisplayIdentification_test Change-Id: I8e5c79f2f51c2fd2085dfaba7f5c45fbc698cbcb
2024-11-16SF: Parse Physical display size in framework Gil Dekel
More EDID fields are required as a part of migrating to EDID-based display IDs. This CL parses the physical display size in CM from bytes 21-22 of block 0 in the EDID blob and serves it as a part of the Edid struct. Later, amongst others, this value will be used to fabricate a unique display ID that is based on the display's EDID. See: 1. EDID spec: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf 2. https://en.wikipedia.org/wiki/Extended_Display_Identification_Data#Structure,_version_1.4 Flag: com.android.graphics.surfaceflinger.flags.stable_edid_ids Bug: 378922658 Test: DisplayIdentification_test Change-Id: I0bb27f267421941aa56f6147082a05ea3b13f33f
2024-09-12SF: parsing Detailed Timing Descriptor in the framework Lucas Berthou
The first DTD in an edid is the preferred timing which allows to get a more precise and more often correct physical size for a display. This can be used to estimate or correct the dpi in case the edid reports the wrong size and hwc is not providing the right value. See edid spec: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf Flag: com.android.graphics.surfaceflinger.flags.correct_dpi_with_display_size Bug: 361413340 Test: DisplayIdentification_test Test: HWComposerTest Test: manual - see bug and doc Change-Id: I0bb85dcf8039f923f1ac892c4a1d6bda771dbf4f
2024-05-24Merge "Differentiate between empty and unrecognizable display identification ↵ Brian Lindahl
data" into main am: c683bc5b94 am: 7685c4073f Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/3101643 Change-Id: Ia40ad82c648cdf318ac04d55d820983cb7b656a9 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2024-05-24Differentiate between empty and unrecognizable display identification Brian Lindahl
data Test: system boots with no display identification error logs Bug: 220045335 Change-Id: I6efa1daf523b17ea56f4a4b9e842d663804e1c15
2024-05-03ui: Refactor DisplayIdentification to use ftl::stable_hash Alan Ding
Replace cityHash64Len0To16 with ftl::stable_hash which can handle up to 64 bytes string instead of just up to 16. Bug: 185536303 Bug: 194863377 Test: DisplayIdentification_test Change-Id: I90056145033ed5798dd5f5d99884028749d5d879
2024-02-20Turn off integer overflow UBSAN checks for hash functions Yi Kong
These functions intentionally overflows integers. The upcoming compiler update, clang-r522817, will start complaining about these overflows. Test: boot with new compiler Bug: 325934863 Change-Id: I5e83a55e880f4e78a7de5a7b01ee99e64f601ca7
2024-02-12ui: use std::span instead of std::basic_string_view<uint8_t> Ryan Prichard
The string classes are only defined for character types, and std::basic_string_view<uint8_t> has been removed now. See https://discourse.llvm.org/t/deprecating-std-string-t-for-non-character-t/66779. Cast std::span<T>::size() to size_t because the WIP std::span::size() has a ptrdiff_t return type instead of size_t. Bug: 175635923 Test: m MODULES-IN-frameworks-native-libs-ui Change-Id: I156f1032191c74cc7c3f6b0cdb7dc0393e9e906f
2022-01-19Move DisplayIdentification parsing to libui Alec Mouri
This is so that the logic can be shared with VTS, as stable display IDs are generated from edid information or port information. Bug: 213493262 Test: VtsHalGraphicsComposer3_TargetTest Change-Id: Id74a2c646558d61bb1a8ae80b038f7108e54e636