123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ash/components/proximity_auth/metrics.h"
- #include <stdint.h>
- #include <algorithm>
- #include "base/check_op.h"
- #include "base/cxx17_backports.h"
- #include "base/hash/md5.h"
- #include "base/metrics/histogram_functions.h"
- #include "base/metrics/histogram_macros.h"
- #include "base/sys_byteorder.h"
- namespace proximity_auth {
- namespace metrics {
- namespace {
- // Converts the 4-byte prefix of an MD5 hash into a int32_t value.
- int32_t DigestToInt32(const base::MD5Digest& digest) {
- // First, copy to a uint32_t, since byte swapping and endianness conversions
- // expect unsigned integers.
- uint32_t unsigned_value;
- DCHECK_GE(std::size(digest.a), sizeof(unsigned_value));
- memcpy(&unsigned_value, digest.a, sizeof(unsigned_value));
- unsigned_value = base::ByteSwap(base::HostToNet32(unsigned_value));
- // Then copy the resulting bit pattern to an int32_t to match the datatype
- // that histograms expect.
- int32_t value;
- memcpy(&value, &unsigned_value, sizeof(value));
- return value;
- }
- // Returns a hash of the given |name|, encoded as a 32-bit signed integer.
- int32_t HashDeviceModelName(const std::string& name) {
- base::MD5Digest digest;
- base::MD5Sum(name.c_str(), name.size(), &digest);
- return DigestToInt32(digest);
- }
- } // namespace
- const char kUnknownDeviceModel[] = "Unknown";
- const int kUnknownProximityValue = 127;
- void RecordAuthProximityRollingRssi(int rolling_rssi) {
- if (rolling_rssi != kUnknownProximityValue)
- rolling_rssi = base::clamp(rolling_rssi, -100, 50);
- base::UmaHistogramSparse("EasyUnlock.AuthProximity.RollingRssi",
- rolling_rssi);
- }
- void RecordAuthProximityRemoteDeviceModelHash(const std::string& device_model) {
- base::UmaHistogramSparse("EasyUnlock.AuthProximity.RemoteDeviceModelHash",
- HashDeviceModelName(device_model));
- }
- void RecordRemoteSecuritySettingsState(RemoteSecuritySettingsState state) {
- DCHECK(state < RemoteSecuritySettingsState::COUNT);
- UMA_HISTOGRAM_ENUMERATION(
- "EasyUnlock.RemoteLockScreenState", static_cast<int>(state),
- static_cast<int>(RemoteSecuritySettingsState::COUNT));
- }
- } // namespace metrics
- } // namespace proximity_auth
|