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

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

Issue 1182303005: Fixed the Touchscreen.TouchEventsEnabled histogram to record the correct values on X11 and Ozone ba… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created gfx::test::TestScreen and addressed other comments. Created 5 years, 5 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
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 3680ad957d6ce1a913d5c6a374e9ab86f5a7d0dd..ce5be1645d12729f33131361628f8f2e6b8926d3 100644
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -39,6 +39,11 @@
#endif
#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
+#if defined(USE_OZONE) || defined(USE_X11)
+#include "ui/events/devices/device_data_manager.h"
+#include "ui/events/devices/input_device_event_observer.h"
+#endif // defined(USE_OZONE) || defined(USE_X11)
+
#if defined(OS_WIN)
#include "chrome/installer/util/google_update_settings.h"
#endif // defined(OS_WIN)
@@ -241,6 +246,38 @@ void RecordTouchEventState() {
UMA_TOUCH_EVENTS_STATE_COUNT);
}
+#if defined(USE_OZONE) || defined(USE_X11)
+
+// Asynchronously records the touch event state when the ui::DeviceDataManager
+// completes a device scan.
+class AsynchronousTouchEventStateRecorder
+ : public ui::InputDeviceEventObserver {
+ public:
+ AsynchronousTouchEventStateRecorder();
+ ~AsynchronousTouchEventStateRecorder() override;
+
+ // ui::InputDeviceEventObserver overrides.
+ void OnDeviceListsComplete() override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AsynchronousTouchEventStateRecorder);
+};
+
+AsynchronousTouchEventStateRecorder::AsynchronousTouchEventStateRecorder() {
+ ui::DeviceDataManager::GetInstance()->AddObserver(this);
+}
+
+AsynchronousTouchEventStateRecorder::~AsynchronousTouchEventStateRecorder() {
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
+}
+
+void AsynchronousTouchEventStateRecorder::OnDeviceListsComplete() {
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
+ RecordTouchEventState();
+}
+
+#endif // defined(USE_OZONE) || defined(USE_X11)
+
} // namespace
ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics()
@@ -269,7 +306,20 @@ void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() {
GetLinuxWindowManager(),
UMA_LINUX_WINDOW_MANAGER_COUNT);
#endif
+
+#if defined(USE_OZONE) || defined(USE_X11)
+ // The touch event state for X11 and Ozone based event sub-systems are based
+ // on device scans that happen asynchronously. So we may need to attach an
+ // observer to wait until these scans complete.
+ if (ui::DeviceDataManager::GetInstance()->device_lists_complete()) {
+ RecordTouchEventState();
+ } else {
+ input_device_event_observer_.reset(
+ new AsynchronousTouchEventStateRecorder());
+ }
+#else
RecordTouchEventState();
+#endif // defined(USE_OZONE) || defined(USE_X11)
#if defined(OS_MACOSX) && !defined(OS_IOS)
RecordMacMetrics();

Powered by Google App Engine
This is Rietveld 408576698