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