blob: 205480ae3dcfbedcdd712790c65663e82a88d5bf [file] [log] [blame]
// Copyright 2019 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 "services/image_annotation/image_annotation_metrics.h"
#include <map>
#include <string>
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/no_destructor.h"
#include "base/strings/strcat.h"
#include "base/strings/stringprintf.h"
namespace image_annotation {
using namespace metrics_internal;
void ReportCacheHit(const bool cache_hit) {
UMA_HISTOGRAM_BOOLEAN(kCacheHit, cache_hit);
}
void ReportJsonParseSuccess(const bool success) {
UMA_HISTOGRAM_BOOLEAN(kJsonParseSuccess, success);
}
void ReportPixelFetchSuccess(const bool success) {
UMA_HISTOGRAM_BOOLEAN(kPixelFetchSuccess, success);
}
void ReportOcrAnnotation(const double confidence, const bool empty) {
const int confidence_percent = static_cast<int>(std::round(confidence * 100));
UMA_HISTOGRAM_PERCENTAGE(base::StringPrintf(kAnnotationConfidence, "Ocr"),
confidence_percent);
UMA_HISTOGRAM_BOOLEAN(base::StringPrintf(kAnnotationEmpty, "Ocr"), empty);
}
void ReportDescAnnotation(const mojom::AnnotationType type,
const double confidence,
const bool empty) {
static const base::NoDestructor<std::map<mojom::AnnotationType, std::string>>
kTypeNames({{mojom::AnnotationType::kOcr, "Ocr"},
{mojom::AnnotationType::kLabel, "Label"},
{mojom::AnnotationType::kCaption, "Caption"}});
const auto lookup = kTypeNames->find(type);
const std::string type_name = base::StrCat(
{"Desc", lookup == kTypeNames->end() ? "Unknown" : lookup->second});
const int confidence_percent = static_cast<int>(std::round(confidence * 100));
// We use function variants here since our histogram name is not a "runtime
// constant".
base::UmaHistogramPercentage(
base::StringPrintf(kAnnotationConfidence, type_name.c_str()),
confidence_percent);
base::UmaHistogramBoolean(
base::StringPrintf(kAnnotationEmpty, type_name.c_str()), empty);
UMA_HISTOGRAM_ENUMERATION(kDescType, type);
}
void ReportDescFailure(const DescFailureReason reason) {
UMA_HISTOGRAM_ENUMERATION(kDescFailure, reason);
}
void ReportServerNetError(const int code) {
base::UmaHistogramSparse(kServerNetError, code);
}
void ReportServerResponseCode(const int code) {
base::UmaHistogramSparse(kServerHttpResponseCode, code);
}
void ReportServerLatency(const base::TimeDelta latency) {
// Use a custom time histogram with ~10 buckets per order of magnitude between
// 1ms and 30sec.
UMA_HISTOGRAM_CUSTOM_TIMES(kServerLatency, latency,
base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromSeconds(30), 50);
}
void ReportImageRequestIncludesDesc(const bool includes_desc) {
UMA_HISTOGRAM_BOOLEAN(kImageRequestIncludesDesc, includes_desc);
}
void ReportServerRequestSizeKB(const size_t size_kb) {
// Use a custom memory histogram with ~10 buckets per order of magnitude
// between 1KB and 30MB.
UMA_HISTOGRAM_CUSTOM_COUNTS(kServerRequestSize, size_kb, 1, 30000, 50);
}
void ReportServerResponseSizeBytes(const size_t size_bytes) {
// Use a custom memory histogram with ~10 buckets per order of magnitude
// between 1byte and 1MB (at which point we stop downloading).
UMA_HISTOGRAM_CUSTOM_COUNTS(kServerResponseSize, size_bytes, 1, 1000000, 70);
}
void ReportOcrStatus(const int status) {
base::UmaHistogramSparse(base::StringPrintf(kAnnotationStatus, "Ocr"),
status);
}
void ReportDescStatus(const int status) {
base::UmaHistogramSparse(base::StringPrintf(kAnnotationStatus, "Desc"),
status);
}
void ReportEngineKnown(const bool known) {
UMA_HISTOGRAM_BOOLEAN(kEngineKnown, known);
}
void ReportSourcePixelCount(const size_t pixel_count) {
// Use a custom memory histogram with ~10 buckets per order of magnitude
// 1x1 and 8K image resolution.
UMA_HISTOGRAM_CUSTOM_COUNTS(kSourcePixelCount, pixel_count, 1, 7680 * 4320,
80);
}
void ReportEncodedJpegSize(const size_t size_bytes) {
// Use a custom memory histogram with ~10 buckets per order of magnitude
// between 1byte and 1MB.
UMA_HISTOGRAM_CUSTOM_COUNTS(kEncodedJpegSize, size_bytes, 1, 1000000, 70);
}
void ReportClientResult(const ClientResult result) {
UMA_HISTOGRAM_ENUMERATION(kClientResult, result);
}
} // namespace image_annotation