chromium/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers_metric_utils.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_HANDLERS_METRIC_UTILS_H_
#define CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_HANDLERS_METRIC_UTILS_H_

#include <optional>
#include <string>

#include "ash/webui/common/mojom/sea_pen.mojom.h"
#include "base/time/time.h"
#include "components/manta/manta_status.h"

namespace wallpaper_handlers {

// Enumeration of Google Photos API endpoints.
enum class GooglePhotosApi {
  kGetAlbum,
  kGetAlbums,
  kGetEnabled,
  kGetPhoto,
  kGetPhotos,
  kGetSharedAlbums,
};

// Records the following on Google Photos API response parsing completion:
// * Ash.Wallpaper.GooglePhotos.Api.{Api}.ResponseTime.[Success|Failure]
// * Ash.Wallpaper.GooglePhotos.Api.{Api}.Result
// * Ash.Wallpaper.GooglePhotos.Api.{Api}.Result.Count
// NOTE: success/failure is assumed by the presence/absence of `result_count`.
void RecordGooglePhotosApiResponseParsed(GooglePhotosApi api,
                                         base::TimeDelta response_time,
                                         std::optional<size_t> result_count);

// Records Ash.Wallpaper.GooglePhotos.Api.{Api}.RefreshCount metric.
void RecordGooglePhotosApiRefreshCount(GooglePhotosApi api, int refresh_count);

// Used to record metrics for SeaPen initial thumbnails request and SeaPen
// upscale request. Keep in sync with histograms.xml variant SeaPenApiType.
enum class SeaPenApiType {
  kThumbnails,
  kWallpaper,
};

// Records the client side latency of an API request. Only record if the request
// completed successfully and did not timeout.
void RecordSeaPenLatency(
    ash::personalization_app::mojom::SeaPenQuery::Tag query_tag,
    base::TimeDelta elapsed_time,
    SeaPenApiType sea_pen_sea_pen_api_type);

// Records the status code of an API request before any client side modification
// (e.g. client changes status code to kGenericError if the response is missing
// images).
void RecordSeaPenMantaStatusCode(
    ash::personalization_app::mojom::SeaPenQuery::Tag query_tag,
    manta::MantaStatusCode status_code,
    SeaPenApiType sea_pen_sea_pen_api_type);

// Records whether the request timed out.
void RecordSeaPenTimeout(
    ash::personalization_app::mojom::SeaPenQuery::Tag query_tag,
    bool hit_timeout,
    SeaPenApiType sea_pen_sea_pen_api_type);

// Records the number of thumbnails returned. Only recorded if the request
// completed successfully. Expected to be in bounds [0,
// kNumThumbnailsRequested].
void RecordSeaPenThumbnailsCount(
    ash::personalization_app::mojom::SeaPenQuery::Tag query_tag,
    size_t thumbnails_count);

// Records whether at least one image exists on the response for full size
// wallpaper image. Only recorded if the request completed successfully.
void RecordSeaPenWallpaperHasImage(
    ash::personalization_app::mojom::SeaPenQuery::Tag query_tag,
    bool has_image);

}  // namespace wallpaper_handlers

#endif  // CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_HANDLERS_METRIC_UTILS_H_