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

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

Issue 2902853002: Add UMA metrics for the linux distro. (Closed)
Patch Set: Make review comment changes. 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..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)
« 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