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