Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Unified Diff: chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc

Issue 2902853002: Add UMA metrics for the linux distro. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/metrics/histograms/enums.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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",
« no previous file with comments | « no previous file | tools/metrics/histograms/enums.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698