• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/metrics/debug/metrics_internals_utils.h"
6 
7 #include <string_view>
8 
9 #include "components/metrics/metrics_pref_names.h"
10 #include "components/variations/client_filterable_state.h"
11 #include "components/variations/proto/study.pb.h"
12 #include "components/variations/service/variations_service.h"
13 
14 namespace metrics {
15 namespace {
16 
ChannelToString(variations::Study::Channel channel)17 std::string ChannelToString(variations::Study::Channel channel) {
18   switch (channel) {
19     case variations::Study::UNKNOWN:
20       return "Unknown";
21     case variations::Study::CANARY:
22       return "Canary";
23     case variations::Study::DEV:
24       return "Dev";
25     case variations::Study::BETA:
26       return "Beta";
27     case variations::Study::STABLE:
28       return "Stable";
29   }
30   NOTREACHED();
31 }
32 
PlatformToString(variations::Study::Platform platform)33 std::string PlatformToString(variations::Study::Platform platform) {
34   switch (platform) {
35     case variations::Study::PLATFORM_WINDOWS:
36       return "Windows";
37     case variations::Study::PLATFORM_MAC:
38       return "Mac";
39     case variations::Study::PLATFORM_LINUX:
40       return "Linux";
41     case variations::Study::PLATFORM_CHROMEOS:
42       return "ChromeOS";
43     case variations::Study::PLATFORM_ANDROID:
44       return "Android";
45     case variations::Study::PLATFORM_IOS:
46       return "iOS";
47     case variations::Study::PLATFORM_ANDROID_WEBVIEW:
48       return "WebView";
49     case variations::Study::PLATFORM_FUCHSIA:
50       return "Fuchsia";
51     case variations::Study::PLATFORM_ANDROID_WEBLAYER:
52       return "WebLayer";
53     case variations::Study::PLATFORM_CHROMEOS_LACROS:
54       return "ChromeOS Lacros";
55   }
56   NOTREACHED();
57 }
58 
CpuArchitectureToString(variations::Study::CpuArchitecture cpu_architecture)59 std::string CpuArchitectureToString(
60     variations::Study::CpuArchitecture cpu_architecture) {
61   switch (cpu_architecture) {
62     case variations::Study::X86_64:
63       return "x86_64";
64     case variations::Study::ARM64:
65       return "arm64";
66     case variations::Study::X86_32:
67       return "x86_32";
68     case variations::Study::ARM32:
69       return "arm32";
70     case variations::Study::TRANSLATED_X86_64:
71       return "translated_x86_64";
72   }
73   NOTREACHED();
74 }
75 
FormFactorToString(variations::Study::FormFactor form_factor)76 std::string FormFactorToString(variations::Study::FormFactor form_factor) {
77   switch (form_factor) {
78     case variations::Study::DESKTOP:
79       return "Desktop";
80     case variations::Study::PHONE:
81       return "Phone";
82     case variations::Study::TABLET:
83       return "Tablet";
84     case variations::Study::KIOSK:
85       return "Kiosk";
86     case variations::Study::MEET_DEVICE:
87       return "Meet Device";
88     case variations::Study::TV:
89       return "TV";
90     case variations::Study::AUTOMOTIVE:
91       return "Automotive";
92     case variations::Study::FOLDABLE:
93       return "Foldable";
94   }
95   NOTREACHED();
96 }
97 
BoolToString(bool val)98 std::string BoolToString(bool val) {
99   return val ? "Yes" : "No";
100 }
101 
CreateKeyValueDict(std::string_view key,std::string_view value)102 base::Value::Dict CreateKeyValueDict(std::string_view key,
103                                      std::string_view value) {
104   base::Value::Dict dict;
105   dict.Set("key", key);
106   dict.Set("value", value);
107   return dict;
108 }
109 
110 }  // namespace
111 
GetUmaSummary(MetricsService * metrics_service)112 base::Value::List GetUmaSummary(MetricsService* metrics_service) {
113   base::Value::List list;
114   list.Append(CreateKeyValueDict("Client ID", metrics_service->GetClientId()));
115   // TODO(crbug.com/40238818): Add the server-side client ID.
116   list.Append(CreateKeyValueDict(
117       "Metrics Reporting Enabled",
118       BoolToString(metrics_service->IsMetricsReportingEnabled())));
119   list.Append(
120       CreateKeyValueDict("Currently Recording",
121                          BoolToString(metrics_service->recording_active())));
122   list.Append(
123       CreateKeyValueDict("Currently Reporting",
124                          BoolToString(metrics_service->reporting_active())));
125   return list;
126 }
127 
GetVariationsSummary(metrics_services_manager::MetricsServicesManager * metrics_service_manager)128 base::Value::List GetVariationsSummary(
129     metrics_services_manager::MetricsServicesManager* metrics_service_manager) {
130   base::Value::List list;
131   std::unique_ptr<variations::ClientFilterableState> state =
132       metrics_service_manager->GetVariationsService()
133           ->GetClientFilterableStateForVersion();
134   list.Append(CreateKeyValueDict("Channel", ChannelToString(state->channel)));
135   list.Append(CreateKeyValueDict("Version", state->version.GetString()));
136   list.Append(
137       CreateKeyValueDict("Platform", PlatformToString(state->platform)));
138   list.Append(CreateKeyValueDict("OS Version", state->os_version.GetString()));
139   list.Append(CreateKeyValueDict(
140       "CPU Architecture", CpuArchitectureToString(state->cpu_architecture)));
141   list.Append(CreateKeyValueDict("Hardware Class", state->hardware_class));
142   list.Append(CreateKeyValueDict("Form Factor",
143                                  FormFactorToString(state->form_factor)));
144   list.Append(CreateKeyValueDict("Low End Device",
145                                  BoolToString(state->is_low_end_device)));
146   list.Append(CreateKeyValueDict("Country (Session Consistency)",
147                                  state->session_consistency_country));
148   list.Append(CreateKeyValueDict("Country (Permanent Consistency)",
149                                  state->permanent_consistency_country));
150   list.Append(CreateKeyValueDict("Locale", state->locale));
151   list.Append(
152       CreateKeyValueDict("Enterprise", BoolToString(state->IsEnterprise())));
153   return list;
154 }
155 
156 }  // namespace metrics
157