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..827ea25c8108f4d1771217242aeeb5c5d02c46a9 100644 |
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc |
@@ -23,6 +23,7 @@ |
#include "content/public/browser/browser_thread.h" |
#include "ui/base/touch/touch_device.h" |
#include "ui/base/ui_base_switches.h" |
+#include "ui/events/devices/device_data_manager.h" |
#include "ui/events/event_switches.h" |
#include "ui/gfx/screen.h" |
@@ -250,6 +251,9 @@ ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics() |
ChromeBrowserMainExtraPartsMetrics::~ChromeBrowserMainExtraPartsMetrics() { |
if (is_screen_observer_) |
gfx::Screen::GetNativeScreen()->RemoveObserver(this); |
+#if defined(USE_OZONE) || defined(USE_X11) |
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
+#endif // defined(USE_OZONE) || defined(USE_X11) |
} |
void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() { |
@@ -269,7 +273,18 @@ 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()) |
+ OnDeviceListsComplete(); |
+ else |
+ ui::DeviceDataManager::GetInstance()->AddObserver(this); |
+#else |
RecordTouchEventState(); |
+#endif // defined(USE_OZONE) || defined(USE_X11) |
#if defined(OS_MACOSX) && !defined(OS_IOS) |
RecordMacMetrics(); |
@@ -311,6 +326,11 @@ void ChromeBrowserMainExtraPartsMetrics::ProfilerFinishedCollectingMetrics() { |
first_web_contents_profiler_.reset(); |
} |
+void ChromeBrowserMainExtraPartsMetrics::OnDeviceListsComplete() { |
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
+ RecordTouchEventState(); |
+} |
+ |
void ChromeBrowserMainExtraPartsMetrics::EmitDisplaysChangedMetric() { |
int display_count = gfx::Screen::GetNativeScreen()->GetNumDisplays(); |
if (display_count != display_count_) { |