|  | // Copyright 2014 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 "base/metrics/metrics_hashes.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/md5.h" | 
|  | #include "base/sys_byteorder.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Converts the 8-byte prefix of an MD5 hash into a uint64_t value. | 
|  | inline uint64_t DigestToUInt64(const base::MD5Digest& digest) { | 
|  | uint64_t value; | 
|  | DCHECK_GE(sizeof(digest.a), sizeof(value)); | 
|  | memcpy(&value, digest.a, sizeof(value)); | 
|  | return base::NetToHost64(value); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | uint64_t HashMetricName(base::StringPiece name) { | 
|  | base::MD5Digest digest; | 
|  | base::MD5Sum(name.data(), name.size(), &digest); | 
|  | return DigestToUInt64(digest); | 
|  | } | 
|  |  | 
|  | }  // namespace metrics |