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

Side by Side Diff: chrome/browser/metrics/metrics_log.cc

Issue 291163006: Create GPUMetricsProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move the Windows-specific call Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/metrics_log.h" 5 #include "chrome/browser/metrics/metrics_log.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 26 matching lines...) Expand all
37 #include "chrome/browser/profiles/profile_manager.h" 37 #include "chrome/browser/profiles/profile_manager.h"
38 #include "chrome/common/chrome_version_info.h" 38 #include "chrome/common/chrome_version_info.h"
39 #include "chrome/common/pref_names.h" 39 #include "chrome/common/pref_names.h"
40 #include "chrome/installer/util/google_update_settings.h" 40 #include "chrome/installer/util/google_update_settings.h"
41 #include "components/metrics/metrics_data_provider.h" 41 #include "components/metrics/metrics_data_provider.h"
42 #include "components/metrics/proto/omnibox_event.pb.h" 42 #include "components/metrics/proto/omnibox_event.pb.h"
43 #include "components/metrics/proto/profiler_event.pb.h" 43 #include "components/metrics/proto/profiler_event.pb.h"
44 #include "components/metrics/proto/system_profile.pb.h" 44 #include "components/metrics/proto/system_profile.pb.h"
45 #include "components/nacl/common/nacl_process_type.h" 45 #include "components/nacl/common/nacl_process_type.h"
46 #include "components/variations/active_field_trials.h" 46 #include "components/variations/active_field_trials.h"
47 #include "content/public/browser/gpu_data_manager.h"
48 #include "content/public/common/content_client.h" 47 #include "content/public/common/content_client.h"
49 #include "content/public/common/webplugininfo.h" 48 #include "content/public/common/webplugininfo.h"
50 #include "gpu/config/gpu_info.h"
51 #include "ui/gfx/screen.h"
52 #include "url/gurl.h" 49 #include "url/gurl.h"
53 50
54 #if defined(OS_ANDROID) 51 #if defined(OS_ANDROID)
55 #include "base/android/build_info.h" 52 #include "base/android/build_info.h"
56 #endif 53 #endif
57 54
58 #if defined(OS_WIN) 55 #if defined(OS_WIN)
59 #include "base/win/metro.h" 56 #include "base/win/metro.h"
60 57
61 // http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx 58 // http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx
62 extern "C" IMAGE_DOS_HEADER __ImageBase; 59 extern "C" IMAGE_DOS_HEADER __ImageBase;
63 #endif 60 #endif
64 61
65 #if defined(OS_CHROMEOS) 62 #if defined(OS_CHROMEOS)
66 #include "chrome/browser/metrics/metrics_log_chromeos.h" 63 #include "chrome/browser/metrics/metrics_log_chromeos.h"
67 #endif // OS_CHROMEOS 64 #endif // OS_CHROMEOS
68 65
69 using content::GpuDataManager;
70 using metrics::MetricsLogBase; 66 using metrics::MetricsLogBase;
71 using metrics::OmniboxEventProto; 67 using metrics::OmniboxEventProto;
72 using metrics::ProfilerEventProto; 68 using metrics::ProfilerEventProto;
73 using metrics::SystemProfileProto; 69 using metrics::SystemProfileProto;
74 using tracked_objects::ProcessDataSnapshot; 70 using tracked_objects::ProcessDataSnapshot;
75 typedef variations::ActiveGroupId ActiveGroupId; 71 typedef variations::ActiveGroupId ActiveGroupId;
76 typedef SystemProfileProto::GoogleUpdate::ProductInfo ProductInfo; 72 typedef SystemProfileProto::GoogleUpdate::ProductInfo ProductInfo;
77 73
78 namespace { 74 namespace {
79 75
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 product_data.last_success.ToTimeT()); 336 product_data.last_success.ToTimeT());
341 product_info->set_last_error(product_data.last_error_code); 337 product_info->set_last_error(product_data.last_error_code);
342 product_info->set_last_extra_error(product_data.last_extra_code); 338 product_info->set_last_extra_error(product_data.last_extra_code);
343 if (ProductInfo::InstallResult_IsValid(product_data.last_result)) { 339 if (ProductInfo::InstallResult_IsValid(product_data.last_result)) {
344 product_info->set_last_result( 340 product_info->set_last_result(
345 static_cast<ProductInfo::InstallResult>(product_data.last_result)); 341 static_cast<ProductInfo::InstallResult>(product_data.last_result));
346 } 342 }
347 } 343 }
348 #endif 344 #endif
349 345
350 #if defined(OS_WIN)
351 struct ScreenDPIInformation {
352 double max_dpi_x;
353 double max_dpi_y;
354 };
355
356 // Called once for each connected monitor.
357 BOOL CALLBACK GetMonitorDPICallback(HMONITOR, HDC hdc, LPRECT, LPARAM dwData) {
358 const double kMillimetersPerInch = 25.4;
359 ScreenDPIInformation* screen_info =
360 reinterpret_cast<ScreenDPIInformation*>(dwData);
361 // Size of screen, in mm.
362 DWORD size_x = GetDeviceCaps(hdc, HORZSIZE);
363 DWORD size_y = GetDeviceCaps(hdc, VERTSIZE);
364 double dpi_x = (size_x > 0) ?
365 GetDeviceCaps(hdc, HORZRES) / (size_x / kMillimetersPerInch) : 0;
366 double dpi_y = (size_y > 0) ?
367 GetDeviceCaps(hdc, VERTRES) / (size_y / kMillimetersPerInch) : 0;
368 screen_info->max_dpi_x = std::max(dpi_x, screen_info->max_dpi_x);
369 screen_info->max_dpi_y = std::max(dpi_y, screen_info->max_dpi_y);
370 return TRUE;
371 }
372
373 void WriteScreenDPIInformationProto(SystemProfileProto::Hardware* hardware) {
374 HDC desktop_dc = GetDC(NULL);
375 if (desktop_dc) {
376 ScreenDPIInformation si = {0, 0};
377 if (EnumDisplayMonitors(desktop_dc, NULL, GetMonitorDPICallback,
378 reinterpret_cast<LPARAM>(&si))) {
379 hardware->set_max_dpi_x(si.max_dpi_x);
380 hardware->set_max_dpi_y(si.max_dpi_y);
381 }
382 ReleaseDC(GetDesktopWindow(), desktop_dc);
383 }
384 }
385
386 #endif // defined(OS_WIN)
387
388 // Round a timestamp measured in seconds since epoch to one with a granularity 346 // Round a timestamp measured in seconds since epoch to one with a granularity
389 // of an hour. This can be used before uploaded potentially sensitive 347 // of an hour. This can be used before uploaded potentially sensitive
390 // timestamps. 348 // timestamps.
391 int64 RoundSecondsToHour(int64 time_in_seconds) { 349 int64 RoundSecondsToHour(int64 time_in_seconds) {
392 return 3600 * (time_in_seconds / 3600); 350 return 3600 * (time_in_seconds / 3600);
393 } 351 }
394 352
395 } // namespace 353 } // namespace
396 354
397 GoogleUpdateMetrics::GoogleUpdateMetrics() : is_system_install(false) {} 355 GoogleUpdateMetrics::GoogleUpdateMetrics() : is_system_install(false) {}
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 void MetricsLog::RecordGeneralMetrics( 470 void MetricsLog::RecordGeneralMetrics(
513 const std::vector<metrics::MetricsDataProvider*>& data_providers) { 471 const std::vector<metrics::MetricsDataProvider*>& data_providers) {
514 for (size_t i = 0; i < data_providers.size(); ++i) 472 for (size_t i = 0; i < data_providers.size(); ++i)
515 data_providers[i]->ProvideGeneralMetrics(uma_proto()); 473 data_providers[i]->ProvideGeneralMetrics(uma_proto());
516 } 474 }
517 475
518 PrefService* MetricsLog::GetPrefService() { 476 PrefService* MetricsLog::GetPrefService() {
519 return g_browser_process->local_state(); 477 return g_browser_process->local_state();
520 } 478 }
521 479
522 gfx::Size MetricsLog::GetScreenSize() const {
523 return gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().GetSizeInPixel();
524 }
525
526 float MetricsLog::GetScreenDeviceScaleFactor() const {
527 return gfx::Screen::GetNativeScreen()->
528 GetPrimaryDisplay().device_scale_factor();
529 }
530
531 int MetricsLog::GetScreenCount() const {
532 // TODO(scottmg): NativeScreen maybe wrong. http://crbug.com/133312
533 return gfx::Screen::GetNativeScreen()->GetNumDisplays();
534 }
535
536 void MetricsLog::GetFieldTrialIds( 480 void MetricsLog::GetFieldTrialIds(
537 std::vector<ActiveGroupId>* field_trial_ids) const { 481 std::vector<ActiveGroupId>* field_trial_ids) const {
538 variations::GetFieldTrialActiveGroupIds(field_trial_ids); 482 variations::GetFieldTrialActiveGroupIds(field_trial_ids);
539 } 483 }
540 484
541 bool MetricsLog::HasEnvironment() const { 485 bool MetricsLog::HasEnvironment() const {
542 return uma_proto()->system_profile().has_uma_enabled_date(); 486 return uma_proto()->system_profile().has_uma_enabled_date();
543 } 487 }
544 488
545 bool MetricsLog::HasStabilityMetrics() const { 489 bool MetricsLog::HasStabilityMetrics() const {
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 #if defined(OS_ANDROID) 706 #if defined(OS_ANDROID)
763 os->set_fingerprint( 707 os->set_fingerprint(
764 base::android::BuildInfo::GetInstance()->android_build_fp()); 708 base::android::BuildInfo::GetInstance()->android_build_fp());
765 #endif 709 #endif
766 710
767 base::CPU cpu_info; 711 base::CPU cpu_info;
768 SystemProfileProto::Hardware::CPU* cpu = hardware->mutable_cpu(); 712 SystemProfileProto::Hardware::CPU* cpu = hardware->mutable_cpu();
769 cpu->set_vendor_name(cpu_info.vendor_name()); 713 cpu->set_vendor_name(cpu_info.vendor_name());
770 cpu->set_signature(cpu_info.signature()); 714 cpu->set_signature(cpu_info.signature());
771 715
772 const gpu::GPUInfo& gpu_info =
773 GpuDataManager::GetInstance()->GetGPUInfo();
774 SystemProfileProto::Hardware::Graphics* gpu = hardware->mutable_gpu();
775 gpu->set_vendor_id(gpu_info.gpu.vendor_id);
776 gpu->set_device_id(gpu_info.gpu.device_id);
777 gpu->set_driver_version(gpu_info.driver_version);
778 gpu->set_driver_date(gpu_info.driver_date);
779 SystemProfileProto::Hardware::Graphics::PerformanceStatistics*
780 gpu_performance = gpu->mutable_performance_statistics();
781 gpu_performance->set_graphics_score(gpu_info.performance_stats.graphics);
782 gpu_performance->set_gaming_score(gpu_info.performance_stats.gaming);
783 gpu_performance->set_overall_score(gpu_info.performance_stats.overall);
784 gpu->set_gl_vendor(gpu_info.gl_vendor);
785 gpu->set_gl_renderer(gpu_info.gl_renderer);
786
787 const gfx::Size display_size = GetScreenSize();
788 hardware->set_primary_screen_width(display_size.width());
789 hardware->set_primary_screen_height(display_size.height());
790 hardware->set_primary_screen_scale_factor(GetScreenDeviceScaleFactor());
791 hardware->set_screen_count(GetScreenCount());
792
793 #if defined(OS_WIN)
794 WriteScreenDPIInformationProto(hardware);
795 #endif
796
797 WriteGoogleUpdateProto(google_update_metrics); 716 WriteGoogleUpdateProto(google_update_metrics);
798 717
799 WritePluginList(plugin_list); 718 WritePluginList(plugin_list);
800 extension_metrics_.WriteExtensionList(uma_proto()->mutable_system_profile()); 719 extension_metrics_.WriteExtensionList(uma_proto()->mutable_system_profile());
801 720
802 std::vector<ActiveGroupId> field_trial_ids; 721 std::vector<ActiveGroupId> field_trial_ids;
803 GetFieldTrialIds(&field_trial_ids); 722 GetFieldTrialIds(&field_trial_ids);
804 WriteFieldTrials(field_trial_ids, system_profile); 723 WriteFieldTrials(field_trial_ids, system_profile);
805 WriteFieldTrials(synthetic_trials, system_profile); 724 WriteFieldTrials(synthetic_trials, system_profile);
806 725
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 ProductDataToProto(google_update_metrics.google_update_data, 875 ProductDataToProto(google_update_metrics.google_update_data,
957 google_update->mutable_google_update_status()); 876 google_update->mutable_google_update_status());
958 } 877 }
959 878
960 if (!google_update_metrics.product_data.version.empty()) { 879 if (!google_update_metrics.product_data.version.empty()) {
961 ProductDataToProto(google_update_metrics.product_data, 880 ProductDataToProto(google_update_metrics.product_data,
962 google_update->mutable_client_status()); 881 google_update->mutable_client_status());
963 } 882 }
964 #endif // defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) 883 #endif // defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN)
965 } 884 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698