// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/game_dashboard/game_dashboard_metrics.h"
#include <cstdint>
#include "ash/game_dashboard/game_dashboard_controller.h"
#include "base/metrics/histogram_functions.h"
#include "base/notreached.h"
#include "base/strings/string_util.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
namespace ash {
namespace {
constexpr char kGameDashboardHistogramNameRoot[] = "Ash.GameDashboard";
constexpr char kGameDashboardHistogramUkmNameRoot[] = "GameDashboard";
} // namespace
ASH_EXPORT std::string BuildGameDashboardHistogramName(
const std::string& name) {
return base::JoinString(
std::vector<std::string>{kGameDashboardHistogramNameRoot, name},
kGameDashboardHistogramSeparator);
}
ASH_EXPORT std::string BuildGameDashboardUkmEventName(const std::string& name) {
return base::JoinString(
std::vector<std::string>{kGameDashboardHistogramUkmNameRoot, name},
kGameDashboardHistogramSeparator);
}
void RecordGameDashboardToggleMainMenu(
const std::string& app_id,
GameDashboardMainMenuToggleMethod toggled_method,
bool toggled_on) {
base::UmaHistogramEnumeration(
BuildGameDashboardHistogramName(kGameDashboardToggleMainMenuHistogram)
.append(kGameDashboardHistogramSeparator)
.append(toggled_on ? kGameDashboardHistogramOn
: kGameDashboardHistogramOff),
toggled_method);
ukm::builders::GameDashboard_ToggleMainMenu(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetToggleOn(toggled_on)
.SetToggleMethod(static_cast<int64_t>(toggled_method))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardToolbarToggleState(const std::string& app_id,
bool toggled_on) {
base::UmaHistogramBoolean(BuildGameDashboardHistogramName(
kGameDashboardToolbarToggleStateHistogram),
toggled_on);
ukm::builders::GameDashboard_ToolbarToggleState(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetToggleOn(toggled_on)
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardRecordingStartSource(const std::string& app_id,
GameDashboardMenu menu) {
base::UmaHistogramEnumeration(
BuildGameDashboardHistogramName(
kGameDashboardRecordingStartSourceHistogram),
menu);
ukm::builders::GameDashboard_RecordingStartSource(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetSource(static_cast<int64_t>(menu))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardScreenshotTakeSource(const std::string& app_id,
GameDashboardMenu menu) {
base::UmaHistogramEnumeration(
BuildGameDashboardHistogramName(
kGameDashboardScreenshotTakeSourceHistogram),
menu);
ukm::builders::GameDashboard_ScreenshotTakeSource(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetSource(static_cast<int64_t>(menu))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardEditControlsWithEmptyState(const std::string& app_id,
bool is_setup) {
base::UmaHistogramBoolean(
BuildGameDashboardHistogramName(
kGameDashboardEditControlsWithEmptyStateHistogram),
is_setup);
ukm::builders::GameDashboard_EditControlsWithEmptyState(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetEmpty(is_setup)
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardToolbarClickToExpandState(const std::string& app_id,
bool is_expanded) {
base::UmaHistogramBoolean(
BuildGameDashboardHistogramName(
kGameDashboardToolbarClickToExpandStateHistogram),
is_expanded);
ukm::builders::GameDashboard_ToolbarClickToExpandState(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetExpanded(is_expanded)
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardToolbarNewLocation(
const std::string& app_id,
GameDashboardToolbarSnapLocation location) {
base::UmaHistogramEnumeration(BuildGameDashboardHistogramName(
kGameDashboardToolbarNewLocationHistogram),
location);
ukm::builders::GameDashboard_ToolbarNewLocation(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetLocation(static_cast<int64_t>(location))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardFunctionTriggered(const std::string& app_id,
GameDashboardFunction function) {
base::UmaHistogramEnumeration(
BuildGameDashboardHistogramName(kGameDashboardFunctionTriggeredHistogram),
function);
ukm::builders::GameDashboard_FunctionTriggered(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetFunction(static_cast<int64_t>(function))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardWelcomeDialogNotificationToggleState(
const std::string& app_id,
bool toggled_on) {
base::UmaHistogramBoolean(
BuildGameDashboardHistogramName(
kGameDashboardWelcomeDialogNotificationToggleStateHistogram),
toggled_on);
ukm::builders::GameDashboard_WelcomeDialogNotificationToggleState(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetToggleOn(toggled_on)
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardControlsHintToggleSource(const std::string& app_id,
GameDashboardMenu menu,
bool toggled_on) {
base::UmaHistogramEnumeration(
BuildGameDashboardHistogramName(
kGameDashboardControlsHintToggleSourceHistogram)
.append(kGameDashboardHistogramSeparator)
.append(toggled_on ? kGameDashboardHistogramOn
: kGameDashboardHistogramOff),
menu);
ukm::builders::GameDashboard_ControlsHintToggleSource(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetToggleOn(toggled_on)
.SetSource(static_cast<int64_t>(menu))
.Record(ukm::UkmRecorder::Get());
}
void RecordGameDashboardControlsFeatureToggleState(const std::string& app_id,
bool toggled_on) {
base::UmaHistogramBoolean(
BuildGameDashboardHistogramName(
kGameDashboardControlsFeatureToggleStateHistogram),
toggled_on);
ukm::builders::GameDashboard_ControlsFeatureToggleState(
GameDashboardController::Get()->GetUkmSourceId(app_id))
.SetToggleOn(toggled_on)
.Record(ukm::UkmRecorder::Get());
}
} // namespace ash