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

Side by Side 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 unified diff | Download patch
OLDNEW
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
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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 state = UMA_TOUCH_EVENTS_DISABLED; 239 state = UMA_TOUCH_EVENTS_DISABLED;
235 } else { 240 } else {
236 NOTREACHED(); 241 NOTREACHED();
237 return; 242 return;
238 } 243 }
239 244
240 UMA_HISTOGRAM_ENUMERATION("Touchscreen.TouchEventsEnabled", state, 245 UMA_HISTOGRAM_ENUMERATION("Touchscreen.TouchEventsEnabled", state,
241 UMA_TOUCH_EVENTS_STATE_COUNT); 246 UMA_TOUCH_EVENTS_STATE_COUNT);
242 } 247 }
243 248
249 #if defined(USE_OZONE) || defined(USE_X11)
250
251 // Asynchronously records the touch event state when the ui::DeviceDataManager
252 // completes a device scan.
253 class AsynchronousTouchEventStateRecorder
254 : public ui::InputDeviceEventObserver {
255 public:
256 AsynchronousTouchEventStateRecorder();
257 ~AsynchronousTouchEventStateRecorder() override;
258
259 // ui::InputDeviceEventObserver overrides.
260 void OnDeviceListsComplete() override;
261
262 private:
263 DISALLOW_COPY_AND_ASSIGN(AsynchronousTouchEventStateRecorder);
264 };
265
266 AsynchronousTouchEventStateRecorder::AsynchronousTouchEventStateRecorder() {
267 ui::DeviceDataManager::GetInstance()->AddObserver(this);
268 }
269
270 AsynchronousTouchEventStateRecorder::~AsynchronousTouchEventStateRecorder() {
271 ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
272 }
273
274 void AsynchronousTouchEventStateRecorder::OnDeviceListsComplete() {
275 ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
276 RecordTouchEventState();
277 }
278
279 #endif // defined(USE_OZONE) || defined(USE_X11)
280
244 } // namespace 281 } // namespace
245 282
246 ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics() 283 ChromeBrowserMainExtraPartsMetrics::ChromeBrowserMainExtraPartsMetrics()
247 : display_count_(0), is_screen_observer_(false) { 284 : display_count_(0), is_screen_observer_(false) {
248 } 285 }
249 286
250 ChromeBrowserMainExtraPartsMetrics::~ChromeBrowserMainExtraPartsMetrics() { 287 ChromeBrowserMainExtraPartsMetrics::~ChromeBrowserMainExtraPartsMetrics() {
251 if (is_screen_observer_) 288 if (is_screen_observer_)
252 gfx::Screen::GetNativeScreen()->RemoveObserver(this); 289 gfx::Screen::GetNativeScreen()->RemoveObserver(this);
253 } 290 }
254 291
255 void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() { 292 void ChromeBrowserMainExtraPartsMetrics::PreProfileInit() {
256 RecordMicroArchitectureStats(); 293 RecordMicroArchitectureStats();
257 } 294 }
258 295
259 void ChromeBrowserMainExtraPartsMetrics::PreBrowserStart() { 296 void ChromeBrowserMainExtraPartsMetrics::PreBrowserStart() {
260 about_flags::PrefServiceFlagsStorage flags_storage_( 297 about_flags::PrefServiceFlagsStorage flags_storage_(
261 g_browser_process->local_state()); 298 g_browser_process->local_state());
262 about_flags::RecordUMAStatistics(&flags_storage_); 299 about_flags::RecordUMAStatistics(&flags_storage_);
263 } 300 }
264 301
265 void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() { 302 void ChromeBrowserMainExtraPartsMetrics::PostBrowserStart() {
266 RecordLinuxGlibcVersion(); 303 RecordLinuxGlibcVersion();
267 #if defined(USE_X11) && !defined(OS_CHROMEOS) 304 #if defined(USE_X11) && !defined(OS_CHROMEOS)
268 UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager", 305 UMA_HISTOGRAM_ENUMERATION("Linux.WindowManager",
269 GetLinuxWindowManager(), 306 GetLinuxWindowManager(),
270 UMA_LINUX_WINDOW_MANAGER_COUNT); 307 UMA_LINUX_WINDOW_MANAGER_COUNT);
271 #endif 308 #endif
309
310 #if defined(USE_OZONE) || defined(USE_X11)
311 // The touch event state for X11 and Ozone based event sub-systems are based
312 // on device scans that happen asynchronously. So we may need to attach an
313 // observer to wait until these scans complete.
314 if (ui::DeviceDataManager::GetInstance()->device_lists_complete()) {
315 RecordTouchEventState();
316 } else {
317 input_device_event_observer_.reset(
318 new AsynchronousTouchEventStateRecorder());
319 }
320 #else
272 RecordTouchEventState(); 321 RecordTouchEventState();
322 #endif // defined(USE_OZONE) || defined(USE_X11)
273 323
274 #if defined(OS_MACOSX) && !defined(OS_IOS) 324 #if defined(OS_MACOSX) && !defined(OS_IOS)
275 RecordMacMetrics(); 325 RecordMacMetrics();
276 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 326 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
277 327
278 const int kStartupMetricsGatheringDelaySeconds = 45; 328 const int kStartupMetricsGatheringDelaySeconds = 45;
279 content::BrowserThread::GetBlockingPool()->PostDelayedTask( 329 content::BrowserThread::GetBlockingPool()->PostDelayedTask(
280 FROM_HERE, 330 FROM_HERE,
281 base::Bind(&RecordStartupMetricsOnBlockingPool), 331 base::Bind(&RecordStartupMetricsOnBlockingPool),
282 base::TimeDelta::FromSeconds(kStartupMetricsGatheringDelaySeconds)); 332 base::TimeDelta::FromSeconds(kStartupMetricsGatheringDelaySeconds));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } 369 }
320 } 370 }
321 371
322 namespace chrome { 372 namespace chrome {
323 373
324 void AddMetricsExtraParts(ChromeBrowserMainParts* main_parts) { 374 void AddMetricsExtraParts(ChromeBrowserMainParts* main_parts) {
325 main_parts->AddParts(new ChromeBrowserMainExtraPartsMetrics()); 375 main_parts->AddParts(new ChromeBrowserMainExtraPartsMetrics());
326 } 376 }
327 377
328 } // namespace chrome 378 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698