diff options
author | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-18 23:20:34 +0000 |
---|---|---|
committer | cpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-18 23:20:34 +0000 |
commit | 965087284e07e1fe0add70ee1855aaea8719925c (patch) | |
tree | 313cae8cdbabc24beb7ca5c44d6bf2f360632716 /content/gpu | |
parent | dc80c651db52a42dc3b71bd5d34287951a5f2f36 (diff) | |
download | chromium_src-965087284e07e1fe0add70ee1855aaea8719925c.zip chromium_src-965087284e07e1fe0add70ee1855aaea8719925c.tar.gz chromium_src-965087284e07e1fe0add70ee1855aaea8719925c.tar.bz2 |
Wire the AMD switchable videcard detection
So we don't bucket all AMD cards as crappy.
BUG=117371
Review URL: https://chromiumcodereview.appspot.com/10790060
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/gpu')
-rw-r--r-- | content/gpu/gpu_info_collector.h | 11 | ||||
-rw-r--r-- | content/gpu/gpu_info_collector_win.cc | 23 |
2 files changed, 27 insertions, 7 deletions
diff --git a/content/gpu/gpu_info_collector.h b/content/gpu/gpu_info_collector.h index 10cf2bf..6a5fa43 100644 --- a/content/gpu/gpu_info_collector.h +++ b/content/gpu/gpu_info_collector.h @@ -41,7 +41,7 @@ CONTENT_EXPORT bool CollectDriverInfoD3D(const std::wstring& device_id, // Collect the DirectX Disagnostics information about the attached displays. bool GetDxDiagnostics(content::DxDiagNode* output); -#endif +#endif // OS_WIN // All platforms have a GL version for collecting information CONTENT_EXPORT bool CollectGraphicsInfoGL(content::GPUInfo* gpu_info); @@ -55,6 +55,15 @@ bool CollectVideoCardInfo(content::GPUInfo* gpu_info); // Each platform stores the driver version on the GL_VERSION string differently bool CollectDriverInfoGL(content::GPUInfo* gpu_info); +// Advanced Micro Devices has interesting configurations on laptops were +// there are two videocards that can alternatively a given process output. +enum AMDVideoCardType { + UNKNOWN, + STANDALONE, + INTEGRATED, + SWITCHABLE +}; + } // namespace gpu_info_collector #endif // CONTENT_GPU_GPU_INFO_COLLECTOR_H_ diff --git a/content/gpu/gpu_info_collector_win.cc b/content/gpu/gpu_info_collector_win.cc index 6e28b51..fed4347 100644 --- a/content/gpu/gpu_info_collector_win.cc +++ b/content/gpu/gpu_info_collector_win.cc @@ -153,6 +153,16 @@ content::GpuPerformanceStats RetrieveGpuPerformanceStats() { namespace gpu_info_collector { +#if !defined(OFFICIAL_BUILD) +AMDVideoCardType GetAMDVideocardType() { + return UNKNOWN; +} +#else +// This function has a real implementation for official builds that can +// be found in src/third_party/amd. +AMDVideoCardType GetAMDVideocardType(); +#endif + bool CollectGraphicsInfo(content::GPUInfo* gpu_info) { TRACE_EVENT0("gpu", "CollectGraphicsInfo"); @@ -344,12 +354,13 @@ bool CollectDriverInfoD3D(const std::wstring& device_id, reinterpret_cast<LPBYTE>(value), &dwcb_data); if (result == ERROR_SUCCESS) { driver_vendor = WideToASCII(std::wstring(value)); - // If it's an Intel GPU with a driver provided by AMD then it's - // probably AMD's Dynamic Switchable Graphics. - // TODO: detect only AMD switchable - gpu_info->amd_switchable = - driver_vendor == "Advanced Micro Devices, Inc." || - driver_vendor == "ATI Technologies Inc."; + if (driver_vendor == "Advanced Micro Devices, Inc." || + driver_vendor == "ATI Technologies Inc.") { + // We are conservative and assume that in the absense of a clear + // signal the videocard is assumed to be switchable. + AMDVideoCardType amd_card_type = GetAMDVideocardType(); + gpu_info->amd_switchable = (amd_card_type != STANDALONE); + } } gpu_info->driver_vendor = driver_vendor; |