|  | // Copyright 2023 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef COMPONENTS_PAGE_IMAGE_SERVICE_METRICS_UTIL_H_ | 
|  | #define COMPONENTS_PAGE_IMAGE_SERVICE_METRICS_UTIL_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/metrics/histogram_functions.h" | 
|  | #include "components/page_image_service/mojom/page_image_service.mojom.h" | 
|  |  | 
|  | namespace page_image_service { | 
|  |  | 
|  | constexpr char kBackendHistogramName[] = "PageImageService.Backend"; | 
|  | constexpr char kBackendOptimizationGuideResultHistogramName[] = | 
|  | "PageImageService.Backend.OptimizationGuide.Result"; | 
|  | constexpr char kBackendSuggestResultHistogramName[] = | 
|  | "PageImageService.Backend.Suggest.Result"; | 
|  | constexpr char kConsentStatusHistogramName[] = "PageImageService.ConsentStatus"; | 
|  |  | 
|  | // Used in UMA. Must not be renumbered, and must be kept in sync with enums.xml. | 
|  | enum class PageImageServiceBackend { | 
|  | kNoValidBackend = 0, | 
|  | kSuggest = 1, | 
|  | kOptimizationGuide = 2, | 
|  | kMaxValue = kOptimizationGuide, | 
|  | }; | 
|  |  | 
|  | // Used in UMA. Must not be renumbered, and must be kept in sync with enums.xml. | 
|  | enum class PageImageServiceResult { | 
|  | kSuccess = 0, | 
|  | kResponseMissing = 1, | 
|  | kNoImage = 2, | 
|  | kResponseMalformed = 3, | 
|  | kMaxValue = kResponseMalformed, | 
|  | }; | 
|  |  | 
|  | // Used in UMA. Must not be renumbered, and must be kept in sync with enums.xml. | 
|  | enum class PageImageServiceConsentStatus { | 
|  | kSuccess = 0, | 
|  | kFailure = 1, | 
|  | kTimedOut = 2, | 
|  | kMaxValue = kTimedOut, | 
|  | }; | 
|  |  | 
|  | // Returns a string for each `client_id`. Always returns a non-empty string. | 
|  | // The returned string doesn't have a period prefixing it. | 
|  | std::string ClientIdToString(mojom::ClientId client_id); | 
|  |  | 
|  | template <typename T> | 
|  | void UmaHistogramEnumerationForClient(const std::string& name, | 
|  | T sample, | 
|  | mojom::ClientId client_id) { | 
|  | // Record it in the unsliced histogram. | 
|  | base::UmaHistogramEnumeration(name, sample); | 
|  |  | 
|  | // Now record it for the sliced by client equivalent. | 
|  | std::string client_suffix = ClientIdToString(client_id); | 
|  | DCHECK(!client_suffix.empty()); | 
|  | base::UmaHistogramEnumeration(name + "." + client_suffix, sample); | 
|  | } | 
|  |  | 
|  | }  // namespace page_image_service | 
|  |  | 
|  | #endif  // COMPONENTS_PAGE_IMAGE_SERVICE_METRICS_UTIL_H_ |