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..240eeb6be8d46bfd870041b5990d5aeabd2b78e2 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" |
@@ -236,7 +237,6 @@ void RecordTouchEventState() { |
NOTREACHED(); |
return; |
} |
Ilya Sherman
2015/06/24 23:46:50
nit: Please revert the change to this line (i.e. r
bruthig
2015/06/25 17:26:52
Done.
|
- |
UMA_HISTOGRAM_ENUMERATION("Touchscreen.TouchEventsEnabled", state, |
UMA_TOUCH_EVENTS_STATE_COUNT); |
} |
@@ -250,6 +250,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); |
Ilya Sherman
2015/06/24 23:46:50
Is it safe to call RemoveObserver() even if |this|
bruthig
2015/06/25 17:26:51
That path is executed by the tests so I assume it
|
+#endif // defined(USE_OZONE) || defined(USE_X11) |
} |
void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() { |
@@ -269,7 +272,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 +325,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_) { |