diff options
| author | 2024-09-07 01:13:29 +0000 | |
|---|---|---|
| committer | 2024-09-07 01:13:29 +0000 | |
| commit | 9f4086816e2002ce3c96b11288bb12f05e054d15 (patch) | |
| tree | b7c20ba3622d861a20585319db41de019b4668d5 /libs/ui/DisplayIdentification.cpp | |
| parent | 5a473e26703f8b8b90c8a352caf7faed3d896a45 (diff) | |
| parent | 60d226fc1fff9274bbb33d9c7c8a3f1b3724e832 (diff) | |
Merge "Merge 24Q3 to AOSP main" into main
Diffstat (limited to 'libs/ui/DisplayIdentification.cpp')
| -rw-r--r-- | libs/ui/DisplayIdentification.cpp | 67 | 
1 files changed, 2 insertions, 65 deletions
| diff --git a/libs/ui/DisplayIdentification.cpp b/libs/ui/DisplayIdentification.cpp index ed7f1930aa..e5af7406ed 100644 --- a/libs/ui/DisplayIdentification.cpp +++ b/libs/ui/DisplayIdentification.cpp @@ -23,67 +23,13 @@  #include <optional>  #include <span> +#include <ftl/hash.h>  #include <log/log.h> -  #include <ui/DisplayIdentification.h>  namespace android {  namespace { -template <class T> -inline T load(const void* p) { -    static_assert(std::is_integral<T>::value, "T must be integral"); - -    T r; -    std::memcpy(&r, p, sizeof(r)); -    return r; -} - -uint64_t rotateByAtLeast1(uint64_t val, uint8_t shift) { -    return (val >> shift) | (val << (64 - shift)); -} - -uint64_t shiftMix(uint64_t val) { -    return val ^ (val >> 47); -} - -__attribute__((no_sanitize("unsigned-integer-overflow"))) -uint64_t hash64Len16(uint64_t u, uint64_t v) { -    constexpr uint64_t kMul = 0x9ddfea08eb382d69; -    uint64_t a = (u ^ v) * kMul; -    a ^= (a >> 47); -    uint64_t b = (v ^ a) * kMul; -    b ^= (b >> 47); -    b *= kMul; -    return b; -} - -__attribute__((no_sanitize("unsigned-integer-overflow"))) -uint64_t hash64Len0To16(const char* s, uint64_t len) { -    constexpr uint64_t k2 = 0x9ae16a3b2f90404f; -    constexpr uint64_t k3 = 0xc949d7c7509e6557; - -    if (len > 8) { -        const uint64_t a = load<uint64_t>(s); -        const uint64_t b = load<uint64_t>(s + len - 8); -        return hash64Len16(a, rotateByAtLeast1(b + len, static_cast<uint8_t>(len))) ^ b; -    } -    if (len >= 4) { -        const uint32_t a = load<uint32_t>(s); -        const uint32_t b = load<uint32_t>(s + len - 4); -        return hash64Len16(len + (a << 3), b); -    } -    if (len > 0) { -        const unsigned char a = static_cast<unsigned char>(s[0]); -        const unsigned char b = static_cast<unsigned char>(s[len >> 1]); -        const unsigned char c = static_cast<unsigned char>(s[len - 1]); -        const uint32_t y = static_cast<uint32_t>(a) + (static_cast<uint32_t>(b) << 8); -        const uint32_t z = static_cast<uint32_t>(len) + (static_cast<uint32_t>(c) << 2); -        return shiftMix(y * k2 ^ z * k3) * k2; -    } -    return k2; -} -  using byte_view = std::span<const uint8_t>;  constexpr size_t kEdidBlockSize = 128; @@ -320,7 +266,7 @@ std::optional<Edid> parseEdid(const DisplayIdentificationData& edid) {      // Hash model string instead of using product code or (integer) serial number, since the latter      // have been observed to change on some displays with multiple inputs. Use a stable hash instead      // of std::hash which is only required to be same within a single execution of a program. -    const uint32_t modelHash = static_cast<uint32_t>(cityHash64Len0To16(modelString)); +    const uint32_t modelHash = static_cast<uint32_t>(*ftl::stable_hash(modelString));      // Parse extension blocks.      std::optional<Cea861ExtensionBlock> cea861Block; @@ -399,13 +345,4 @@ PhysicalDisplayId getVirtualDisplayId(uint32_t id) {      return PhysicalDisplayId::fromEdid(0, kVirtualEdidManufacturerId, id);  } -uint64_t cityHash64Len0To16(std::string_view sv) { -    auto len = sv.length(); -    if (len > 16) { -        ALOGE("%s called with length %zu. Only hashing the first 16 chars", __FUNCTION__, len); -        len = 16; -    } -    return hash64Len0To16(sv.data(), len); -} -  } // namespace android |