OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" | 5 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 33 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
34 #include <gnu/libc-version.h> | 34 #include <gnu/libc-version.h> |
35 | 35 |
36 #include "base/version.h" | 36 #include "base/version.h" |
37 #if defined(USE_X11) | 37 #if defined(USE_X11) |
38 #include "ui/base/x/x11_util.h" | 38 #include "ui/base/x/x11_util.h" |
39 #endif | 39 #endif |
40 #endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) | 40 #endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) |
41 | 41 |
| 42 #if defined(USE_OZONE) || defined(USE_X11) |
| 43 #include "ui/events/devices/device_data_manager.h" |
| 44 #include "ui/events/devices/input_device_event_observer.h" |
| 45 #endif // defined(USE_OZONE) || defined(USE_X11) |
| 46 |
42 #if defined(OS_WIN) | 47 #if defined(OS_WIN) |
43 #include "chrome/installer/util/google_update_settings.h" | 48 #include "chrome/installer/util/google_update_settings.h" |
44 #endif // defined(OS_WIN) | 49 #endif // defined(OS_WIN) |
45 | 50 |
46 namespace { | 51 namespace { |
47 | 52 |
48 enum UMALinuxGlibcVersion { | 53 enum UMALinuxGlibcVersion { |
49 UMA_LINUX_GLIBC_NOT_PARSEABLE, | 54 UMA_LINUX_GLIBC_NOT_PARSEABLE, |
50 UMA_LINUX_GLIBC_UNKNOWN, | 55 UMA_LINUX_GLIBC_UNKNOWN, |
51 UMA_LINUX_GLIBC_2_11, | 56 UMA_LINUX_GLIBC_2_11, |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 state = UMA_TOUCH_EVENTS_DISABLED; | 245 state = UMA_TOUCH_EVENTS_DISABLED; |
241 } else { | 246 } else { |
242 NOTREACHED(); | 247 NOTREACHED(); |
243 return; | 248 return; |
244 } | 249 } |
245 | 250 |
246 UMA_HISTOGRAM_ENUMERATION("Touchscreen.TouchEventsEnabled", state, | 251 UMA_HISTOGRAM_ENUMERATION("Touchscreen.TouchEventsEnabled", state, |
247 UMA_TOUCH_EVENTS_STATE_COUNT); | 252 UMA_TOUCH_EVENTS_STATE_COUNT); |
248 } | 253 } |
249 | 254 |
| 255 #if defined(USE_OZONE) || defined(USE_X11) |
| 256 |
| 257 // Asynchronously records the touch event state when the ui::DeviceDataManager |
| 258 // completes a device scan. |
| 259 class AsynchronousTouchEventStateRecorder |
| 260 : public ui::InputDeviceEventObserver { |
| 261 public: |
| 262 AsynchronousTouchEventStateRecorder(); |
| 263 ~AsynchronousTouchEventStateRecorder() override; |
| 264 |
| 265 // ui::InputDeviceEventObserver overrides. |
| 266 void OnDeviceListsComplete() override; |
| 267 |
| 268 private: |
| 269 DISALLOW_COPY_AND_ASSIGN(AsynchronousTouchEventStateRecorder); |
| 270 }; |
| 271 |
| 272 AsynchronousTouchEventStateRecorder::AsynchronousTouchEventStateRecorder() { |
| 273 ui::DeviceDataManager::GetInstance()->AddObserver(this); |
| 274 } |
| 275 |
| 276 AsynchronousTouchEventStateRecorder::~AsynchronousTouchEventStateRecorder() { |
| 277 ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
| 278 } |
| 279 |
| 280 void AsynchronousTouchEventStateRecorder::OnDeviceListsComplete() { |
| 281 ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
| 282 RecordTouchEventState(); |
| 283 } |
| 284 |
| 285 #endif // defined(USE_OZONE) || defined(USE_X11) |
| 286 |
250 } // namespace | 287 } // namespace |
251 | 288 |
252 ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics() | 289 ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics() |
253 : display_count_(0), is_screen_observer_(false) { | 290 : display_count_(0), is_screen_observer_(false) { |
254 } | 291 } |
255 | 292 |
256 ChromeBrowserMainExtraPartsMetrics::~ChromeBrowserMainExtraPartsMetrics() { | 293 ChromeBrowserMainExtraPartsMetrics::~ChromeBrowserMainExtraPartsMetrics() { |
257 if (is_screen_observer_) | 294 if (is_screen_observer_) |
258 gfx::Screen::GetNativeScreen()->RemoveObserver(this); | 295 gfx::Screen::GetNativeScreen()->RemoveObserver(this); |
259 } | 296 } |
260 | 297 |
261 void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() { | 298 void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() { |
262 RecordMicroArchitectureStats(); | 299 RecordMicroArchitectureStats(); |
263 } | 300 } |
264 | 301 |
265 void ChromeBrowserMainExtraPartsMetrics::PreBrowserStart() { | 302 void ChromeBrowserMainExtraPartsMetrics::PreBrowserStart() { |
266 about_flags::PrefServiceFlagsStorage flags_storage_( | 303 about_flags::PrefServiceFlagsStorage flags_storage_( |
267 g_browser_process->local_state()); | 304 g_browser_process->local_state()); |
268 about_flags::RecordUMAStatistics(&flags_storage_); | 305 about_flags::RecordUMAStatistics(&flags_storage_); |
269 } | 306 } |
270 | 307 |
271 void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() { | 308 void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() { |
272 RecordLinuxGlibcVersion(); | 309 RecordLinuxGlibcVersion(); |
273 #if defined(USE_X11) && !defined(OS_CHROMEOS) | 310 #if defined(USE_X11) && !defined(OS_CHROMEOS) |
274 UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager", | 311 UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager", |
275 GetLinuxWindowManager(), | 312 GetLinuxWindowManager(), |
276 UMA_LINUX_WINDOW_MANAGER_COUNT); | 313 UMA_LINUX_WINDOW_MANAGER_COUNT); |
277 #endif | 314 #endif |
| 315 |
| 316 #if defined(USE_OZONE) || defined(USE_X11) |
| 317 // The touch event state for X11 and Ozone based event sub-systems are based |
| 318 // on device scans that happen asynchronously. So we may need to attach an |
| 319 // observer to wait until these scans complete. |
| 320 if (ui::DeviceDataManager::GetInstance()->device_lists_complete()) { |
| 321 RecordTouchEventState(); |
| 322 } else { |
| 323 input_device_event_observer_.reset( |
| 324 new AsynchronousTouchEventStateRecorder()); |
| 325 } |
| 326 #else |
278 RecordTouchEventState(); | 327 RecordTouchEventState(); |
| 328 #endif // defined(USE_OZONE) || defined(USE_X11) |
279 | 329 |
280 #if defined(OS_MACOSX) && !defined(OS_IOS) | 330 #if defined(OS_MACOSX) && !defined(OS_IOS) |
281 RecordMacMetrics(); | 331 RecordMacMetrics(); |
282 #endif // defined(OS_MACOSX) && !defined(OS_IOS) | 332 #endif // defined(OS_MACOSX) && !defined(OS_IOS) |
283 | 333 |
284 const int kStartupMetricsGatheringDelaySeconds = 45; | 334 const int kStartupMetricsGatheringDelaySeconds = 45; |
285 content::BrowserThread::GetBlockingPool()->PostDelayedTask( | 335 content::BrowserThread::GetBlockingPool()->PostDelayedTask( |
286 FROM_HERE, | 336 FROM_HERE, |
287 base::Bind(&RecordStartupMetricsOnBlockingPool), | 337 base::Bind(&RecordStartupMetricsOnBlockingPool), |
288 base::TimeDelta::FromSeconds(kStartupMetricsGatheringDelaySeconds)); | 338 base::TimeDelta::FromSeconds(kStartupMetricsGatheringDelaySeconds)); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 } | 375 } |
326 } | 376 } |
327 | 377 |
328 namespace chrome { | 378 namespace chrome { |
329 | 379 |
330 void AddMetricsExtraParts(ChromeBrowserMainParts* main_parts) { | 380 void AddMetricsExtraParts(ChromeBrowserMainParts* main_parts) { |
331 main_parts->AddParts(new ChromeBrowserMainExtraPartsMetrics()); | 381 main_parts->AddParts(new ChromeBrowserMainExtraPartsMetrics()); |
332 } | 382 } |
333 | 383 |
334 } // namespace chrome | 384 } // namespace chrome |
OLD | NEW |