| OLD | NEW |
| 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 "content/gpu/gpu_info_collector.h" | 5 #include "content/gpu/gpu_info_collector.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <d3d9.h> | 8 #include <d3d9.h> |
| 9 #include <setupapi.h> | 9 #include <setupapi.h> |
| 10 | 10 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 UMA_HISTOGRAM_TIMES("GPU.WinSAT.ReadResultsFileTime", | 146 UMA_HISTOGRAM_TIMES("GPU.WinSAT.ReadResultsFileTime", |
| 147 base::TimeTicks::Now() - start_time); | 147 base::TimeTicks::Now() - start_time); |
| 148 | 148 |
| 149 return stats; | 149 return stats; |
| 150 } | 150 } |
| 151 | 151 |
| 152 } // namespace anonymous | 152 } // namespace anonymous |
| 153 | 153 |
| 154 namespace gpu_info_collector { | 154 namespace gpu_info_collector { |
| 155 | 155 |
| 156 #if !defined(OFFICIAL_BUILD) | |
| 157 AMDVideoCardType GetAMDVideocardType() { | |
| 158 return UNKNOWN; | |
| 159 } | |
| 160 #else | |
| 161 // This function has a real implementation for official builds that can | |
| 162 // be found in src/third_party/amd. | |
| 163 AMDVideoCardType GetAMDVideocardType(); | |
| 164 #endif | |
| 165 | |
| 166 bool CollectGraphicsInfo(content::GPUInfo* gpu_info) { | 156 bool CollectGraphicsInfo(content::GPUInfo* gpu_info) { |
| 167 TRACE_EVENT0("gpu", "CollectGraphicsInfo"); | 157 TRACE_EVENT0("gpu", "CollectGraphicsInfo"); |
| 168 | 158 |
| 169 DCHECK(gpu_info); | 159 DCHECK(gpu_info); |
| 170 | 160 |
| 171 content::GpuPerformanceStats stats = RetrieveGpuPerformanceStats(); | 161 content::GpuPerformanceStats stats = RetrieveGpuPerformanceStats(); |
| 172 UMA_HISTOGRAM_BOOLEAN( | 162 UMA_HISTOGRAM_BOOLEAN( |
| 173 "GPU.WinSAT.HasResults", | 163 "GPU.WinSAT.HasResults", |
| 174 stats.overall != 0.0 && stats.graphics != 0.0 && stats.gaming != 0.0); | 164 stats.overall != 0.0 && stats.graphics != 0.0 && stats.gaming != 0.0); |
| 175 gpu_info->performance_stats = stats; | 165 gpu_info->performance_stats = stats; |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 if (result == ERROR_SUCCESS) | 337 if (result == ERROR_SUCCESS) |
| 348 driver_date = WideToASCII(std::wstring(value)); | 338 driver_date = WideToASCII(std::wstring(value)); |
| 349 | 339 |
| 350 std::string driver_vendor; | 340 std::string driver_vendor; |
| 351 dwcb_data = sizeof(value); | 341 dwcb_data = sizeof(value); |
| 352 result = RegQueryValueExW( | 342 result = RegQueryValueExW( |
| 353 key, L"ProviderName", NULL, NULL, | 343 key, L"ProviderName", NULL, NULL, |
| 354 reinterpret_cast<LPBYTE>(value), &dwcb_data); | 344 reinterpret_cast<LPBYTE>(value), &dwcb_data); |
| 355 if (result == ERROR_SUCCESS) { | 345 if (result == ERROR_SUCCESS) { |
| 356 driver_vendor = WideToASCII(std::wstring(value)); | 346 driver_vendor = WideToASCII(std::wstring(value)); |
| 357 if (driver_vendor == "Advanced Micro Devices, Inc." || | 347 // If it's an Intel GPU with a driver provided by AMD then it's |
| 358 driver_vendor == "ATI Technologies Inc.") { | 348 // probably AMD's Dynamic Switchable Graphics. |
| 359 // We are conservative and assume that in the absense of a clear | 349 // TODO: detect only AMD switchable |
| 360 // signal the videocard is assumed to be switchable. | 350 gpu_info->amd_switchable = |
| 361 AMDVideoCardType amd_card_type = GetAMDVideocardType(); | 351 driver_vendor == "Advanced Micro Devices, Inc." || |
| 362 gpu_info->amd_switchable = (amd_card_type != STANDALONE); | 352 driver_vendor == "ATI Technologies Inc."; |
| 363 } | |
| 364 } | 353 } |
| 365 | 354 |
| 366 gpu_info->driver_vendor = driver_vendor; | 355 gpu_info->driver_vendor = driver_vendor; |
| 367 gpu_info->driver_version = driver_version; | 356 gpu_info->driver_version = driver_version; |
| 368 gpu_info->driver_date = driver_date; | 357 gpu_info->driver_date = driver_date; |
| 369 found = true; | 358 found = true; |
| 370 RegCloseKey(key); | 359 RegCloseKey(key); |
| 371 break; | 360 break; |
| 372 } | 361 } |
| 373 } | 362 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 388 | 377 |
| 389 size_t pos = gl_version_string.find_last_not_of("0123456789."); | 378 size_t pos = gl_version_string.find_last_not_of("0123456789."); |
| 390 if (pos != std::string::npos && pos < gl_version_string.length() - 1) { | 379 if (pos != std::string::npos && pos < gl_version_string.length() - 1) { |
| 391 gpu_info->driver_version = gl_version_string.substr(pos + 1); | 380 gpu_info->driver_version = gl_version_string.substr(pos + 1); |
| 392 return true; | 381 return true; |
| 393 } | 382 } |
| 394 return false; | 383 return false; |
| 395 } | 384 } |
| 396 | 385 |
| 397 } // namespace gpu_info_collector | 386 } // namespace gpu_info_collector |
| OLD | NEW |