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..34c819e0c2b0644444ae97db6068c7f5fb1d1c10 100644 |
| --- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| +++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/bind.h" |
| #include "base/command_line.h" |
| #include "base/cpu.h" |
| +#include "base/linux_util.h" |
|
Tom Anderson
2017/05/23 22:12:13
Guard this include with #if defined(OS_LINUX) && !
timbrown
2017/05/24 00:40:55
Ah, I missed those sections. Done.
|
| #include "base/macros.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/metrics/sparse_histogram.h" |
| @@ -60,6 +61,22 @@ |
| namespace { |
| +enum UMALinuxDistro { |
|
Tom Anderson
2017/05/23 22:12:13
Please follow the practices here:
https://chromium
timbrown
2017/05/24 00:40:55
Done.
|
| + UMA_LINUX_DISTRO_UNKNOWN, |
| + UMA_LINUX_DISTRO_UBUNTU_OTHER, |
| + UMA_LINUX_DISTRO_UBUNTU_14_04, |
| + UMA_LINUX_DISTRO_UBUNTU_16_04, |
| + UMA_LINUX_DISTRO_UBUNTU_16_10, |
| + UMA_LINUX_DISTRO_UBUNTU_17_04, |
| + UMA_LINUX_DISTRO_DEBIAN_OTHER, |
| + UMA_LINUX_DISTRO_DEBIAN_8, |
| + UMA_LINUX_DISTRO_OPENSUSE_OTHER, |
| + UMA_LINUX_DISTRO_OPENSUSE_LEAP_42_2, |
| + UMA_LINUX_DISTRO_FEDORA_OTHER, |
| + UMA_LINUX_DISTRO_FEDORA_24, |
| + UMA_LINUX_DISTRO_FEDORA_25, |
| +}; |
| + |
| enum UMALinuxGlibcVersion { |
| UMA_LINUX_GLIBC_NOT_PARSEABLE, |
| UMA_LINUX_GLIBC_UNKNOWN, |
| @@ -172,6 +189,58 @@ void RecordStartupMetricsOnBlockingPool() { |
| shell_integration::NUM_DEFAULT_STATES); |
| } |
| +void RecordLinuxDistro() { |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| + const std::string distro = base::GetLinuxDistro(); |
|
Tom Anderson
2017/05/23 22:12:13
Does this call block? (GetLinuxDistro caches its
timbrown
2017/05/24 00:40:55
Good catch. GetLinuxDistro() is called previously,
|
| + |
| + UMALinuxDistro distro_result = UMA_LINUX_DISTRO_UNKNOWN; |
| + |
| + const char ubuntu[] = "Ubuntu "; |
|
Tom Anderson
2017/05/23 22:12:13
constants should have a k prefix and should be nam
timbrown
2017/05/24 00:40:55
Acknowledged.
|
| + const char openSuse[] = "openSUSE "; |
| + const char debian[] = "Debian GNU/Linux "; |
| + const char fedora[] = "Fedora release "; |
| + if (distro.compare(0, strlen(ubuntu), ubuntu) == 0) { |
|
Tom Anderson
2017/05/23 22:12:13
I think it's better to use base::SplitString() on
timbrown
2017/05/24 00:40:55
Good idea. It's a little longer now with guards on
|
| + // Ubuntu uses point releases for the same version, so we need to do |
| + // prefix matching. |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_OTHER; |
| + const std::string version = distro.substr(strlen(ubuntu), 5); |
| + if (version == "14.04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_14_04; |
| + } else if (version == "16.04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_16_04; |
| + } else if (version == "16.10") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_16_10; |
| + } else if (version == "17.04") { |
| + distro_result = UMA_LINUX_DISTRO_UBUNTU_17_04; |
| + } |
| + } else if (distro.compare(0, strlen(openSuse), openSuse) == 0) { |
| + distro_result = UMA_LINUX_DISTRO_OPENSUSE_OTHER; |
| + const std::string version = distro.substr(strlen(openSuse)); |
| + if (version == "Leap 42.2") { |
| + distro_result = UMA_LINUX_DISTRO_OPENSUSE_LEAP_42_2; |
| + } |
| + } else if (distro.compare(0, strlen(debian), debian) == 0) { |
| + // Debian uses point releases for the same version, so we need to do |
| + // prefix matching. |
| + distro_result = UMA_LINUX_DISTRO_DEBIAN_OTHER; |
| + const std::string version = distro.substr(strlen(debian)); |
| + if (version[0] == '8') { |
| + distro_result = UMA_LINUX_DISTRO_DEBIAN_8; |
| + } |
| + } else if (distro.compare(0, strlen(fedora), fedora) == 0) { |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_OTHER; |
| + const std::string version = distro.substr(strlen(debian)); |
| + if (version == "24") { |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_24; |
| + } else if (distro == "25") { |
| + distro_result = UMA_LINUX_DISTRO_FEDORA_25; |
| + } |
| + } |
| + |
| + UMA_HISTOGRAM_SPARSE_SLOWLY("Linux.Distro", distro_result); |
|
Tom Anderson
2017/05/23 22:12:13
UMA_HISTOGRAM_SPARSE_SLOWLY => UMA_HISTOGRAM_ENUME
timbrown
2017/05/24 00:40:55
rkaplow: Do you agree? From the comments here http
|
| +#endif |
| +} |
| + |
| void RecordLinuxGlibcVersion() { |
| #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| base::Version version(gnu_get_libc_version()); |
| @@ -377,6 +446,7 @@ void ChromeBrowserMainExtraPartsMetrics::PreBrowserStart() { |
| } |
| void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() { |
| + RecordLinuxDistro(); |
| RecordLinuxGlibcVersion(); |
| #if defined(USE_X11) && !defined(OS_CHROMEOS) |
| UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager", |