Chromium Code Reviews| Index: chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| index 9be497ed78fe9e1b116e1177a63150ac28562ccf..52fa6c04297f6ffb3865c929422c59c8e16ddbfb 100644 |
| --- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| +++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| @@ -40,6 +40,9 @@ |
| #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| #include <gnu/libc-version.h> |
| +#include "base/linux_util.h" |
| +#include "base/strings/string_split.h" |
| +#include "base/task_scheduler/post_task.h" |
| #include "base/version.h" |
| #if defined(USE_X11) |
| #include "ui/base/x/x11_util.h" |
| @@ -60,6 +63,26 @@ |
| namespace { |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
|
Tom Anderson
2017/05/24 01:19:13
nit: I don't think the include guards here are nec
timbrown
2017/05/24 17:35:41
Done.
|
| +// These values are written to logs. New enum values can be added, but existing |
| +// enums must never be renumbered or deleted and reused. |
| +enum UMALinuxDistro { |
| + UMA_LINUX_DISTRO_UNKNOWN = 0, |
| + UMA_LINUX_DISTRO_UBUNTU_OTHER = 1, |
| + UMA_LINUX_DISTRO_UBUNTU_14_04 = 2, |
| + UMA_LINUX_DISTRO_UBUNTU_16_04 = 3, |
| + UMA_LINUX_DISTRO_UBUNTU_16_10 = 4, |
| + UMA_LINUX_DISTRO_UBUNTU_17_04 = 5, |
| + UMA_LINUX_DISTRO_DEBIAN_OTHER = 6, |
| + UMA_LINUX_DISTRO_DEBIAN_8 = 7, |
| + UMA_LINUX_DISTRO_OPENSUSE_OTHER = 8, |
| + UMA_LINUX_DISTRO_OPENSUSE_LEAP_42_2 = 9, |
| + UMA_LINUX_DISTRO_FEDORA_OTHER = 10, |
| + UMA_LINUX_DISTRO_FEDORA_24 = 11, |
| + UMA_LINUX_DISTRO_FEDORA_25 = 12, |
| +}; |
| +#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| + |
| enum UMALinuxGlibcVersion { |
| UMA_LINUX_GLIBC_NOT_PARSEABLE, |
| UMA_LINUX_GLIBC_UNKNOWN, |
| @@ -163,7 +186,7 @@ void RecordStartupMetricsOnBlockingPool() { |
| UMA_HISTOGRAM_ENUMERATION("OSX.BluetoothAvailability", |
| availability, |
| bluetooth_utility::BLUETOOTH_AVAILABILITY_COUNT); |
| -#endif // defined(OS_MACOSX) |
| +#endif // defined(OS_MACOSX) |
| // Record whether Chrome is the default browser or not. |
| shell_integration::DefaultWebClientState default_state = |
| @@ -172,6 +195,60 @@ void RecordStartupMetricsOnBlockingPool() { |
| shell_integration::NUM_DEFAULT_STATES); |
| } |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| +void RecordLinuxDistro() { |
| + UMALinuxDistro distro_result = UMA_LINUX_DISTRO_UNKNOWN; |
| + |
| + std::vector<std::string> distro_tokens = |
| + base::SplitString(base::GetLinuxDistro(), " .", base::TRIM_WHITESPACE, |
|
Tom Anderson
2017/05/24 01:19:13
Instead of using " ." as the separators, use base:
timbrown
2017/05/24 17:35:41
Done.
|
| + base::SPLIT_WANT_NONEMPTY); |
| + if (distro_tokens.size() > 0) { |
| + if (distro_tokens[0] == "Ubuntu") { |
| + // Format: Ubuntu YY.MM.P [LTS] |
| + // We are only concerned with release (YY.MM) not the patch (P). |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_OTHER; |
| + if (distro_tokens.size() >= 3) { |
|
Tom Anderson
2017/05/24 01:19:13
Use base::Version for distro versions.
You can co
timbrown
2017/05/24 17:35:41
Done.
I also changed the debian check, since it u
|
| + if (distro_tokens[1] == "14" && distro_tokens[2] == "04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_14_04; |
| + } else if (distro_tokens[1] == "16" && distro_tokens[2] == "04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_16_04; |
| + } else if (distro_tokens[1] == "16" && distro_tokens[2] == "10") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_16_10; |
| + } else if (distro_tokens[1] == "17" && distro_tokens[2] == "04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_17_04; |
| + } |
| + } |
| + } else if (distro_tokens[0] == "openSUSE") { |
| + // Format: openSUSE Leap RR.R |
| + distro_result = UMA_LINUX_DISTRO_OPENSUSE_OTHER; |
| + if (distro_tokens.size() >= 4 && distro_tokens[1] == "Leap" && |
| + distro_tokens[2] == "42" && distro_tokens[3] == "2") { |
| + distro_result = UMA_LINUX_DISTRO_OPENSUSE_LEAP_42_2; |
| + } |
| + } else if (distro_tokens[0] == "Debian") { |
| + // Format: Debian GNU/Linux R.P (<codename>) |
| + // We are only concerned with the release (R) not the patch (P). |
| + distro_result = UMA_LINUX_DISTRO_DEBIAN_OTHER; |
| + if (distro_tokens.size() >= 3 && distro_tokens[2][0] == '8') { |
| + distro_result = UMA_LINUX_DISTRO_DEBIAN_8; |
| + } |
| + } else if (distro_tokens[0] == "Fedora") { |
| + // Format: Fedora release RR (<codename>) |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_OTHER; |
| + if (distro_tokens.size() >= 3) { |
| + if (distro_tokens[2] == "24") { |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_24; |
| + } else if (distro_tokens[2] == "25") { |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_25; |
| + } |
| + } |
| + } |
| + } |
| + |
| + UMA_HISTOGRAM_SPARSE_SLOWLY("Linux.Distro", distro_result); |
| +} |
| +#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| + |
| void RecordLinuxGlibcVersion() { |
| #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| base::Version version(gnu_get_libc_version()); |
| @@ -382,6 +459,9 @@ void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() { |
| UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager", |
| GetLinuxWindowManager(), |
| UMA_LINUX_WINDOW_MANAGER_COUNT); |
| + base::PostTaskWithTraits( |
| + FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, |
| + base::BindOnce(base::IgnoreResult(&RecordLinuxDistro))); |
|
Tom Anderson
2017/05/24 01:19:13
RecordLinuxDistro doesn't return anything, so you
timbrown
2017/05/24 17:35:41
Done.
|
| #endif |
| #if defined(USE_OZONE) || defined(USE_X11) |