15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_info.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace { 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void EnumerateGPUDevice(gpu::GPUInfo::Enumerator* enumerator, 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const gpu::GPUInfo::GPUDevice& device) { 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->BeginGPUDevice(); 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddInt("vendorId", device.vendor_id); 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddInt("deviceId", device.device_id); 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch enumerator->AddBool("active", device.active); 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("vendorString", device.vendor_string); 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("deviceString", device.device_string); 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->EndGPUDevice(); 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace gpu { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GPUInfo::GPUDevice::GPUDevice() 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : vendor_id(0), 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch device_id(0), 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch active(false) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GPUInfo::GPUDevice::~GPUDevice() { } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GPUInfo::GPUInfo() 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : finalized(false), 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optimus(false), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) amd_switchable(false), 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) lenovo_dcute(false), 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) adapter_luid(0), 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gl_reset_notification_strategy(0), 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) can_lose_context(false), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) software_rendering(false), 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch direct_rendering(true), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sandboxed(false) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GPUInfo::~GPUInfo() { } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void GPUInfo::EnumerateFields(Enumerator* enumerator) const { 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) struct GPUInfoKnownFields { 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool finalized; 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::TimeDelta initialization_time; 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool optimus; 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool amd_switchable; 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool lenovo_dcute; 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Version display_link_version; 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GPUDevice gpu; 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<GPUDevice> secondary_gpus; 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) uint64 adapter_luid; 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string driver_vendor; 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string driver_version; 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string driver_date; 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string pixel_shader_version; 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string vertex_shader_version; 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string machine_model_name; 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string machine_model_version; 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_version_string; 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_vendor; 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_renderer; 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_extensions; 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_ws_vendor; 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_ws_version; 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string gl_ws_extensions; 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) uint32 gl_reset_notification_strategy; 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool can_lose_context; 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GpuPerformanceStats performance_stats; 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool software_rendering; 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool direct_rendering; 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool sandboxed; 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#if defined(OS_WIN) 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DxDiagNode dx_diagnostics; 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // If this assert fails then most likely something below needs to be updated. 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Note that this assert is only approximate. If a new field is added to 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // GPUInfo which fits within the current padding then it will not be caught. 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) COMPILE_ASSERT( 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) sizeof(GPUInfo) == sizeof(GPUInfoKnownFields), 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Fields_Have_Changed_In_GPUInfo_So_Update_Below); 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Required fields (according to DevTools protocol) first. 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch enumerator->AddString("machineModelName", machine_model_name); 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch enumerator->AddString("machineModelVersion", machine_model_version); 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EnumerateGPUDevice(enumerator, gpu); 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (size_t ii = 0; ii < secondary_gpus.size(); ++ii) { 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EnumerateGPUDevice(enumerator, secondary_gpus[ii]); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->BeginAuxAttributes(); 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("finalized", finalized); 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddTimeDeltaInSecondsF("initializationTime", 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) initialization_time); 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("optimus", optimus); 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("amdSwitchable", amd_switchable); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("lenovoDcute", lenovo_dcute); 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (display_link_version.IsValid()) { 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("displayLinkVersion", 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) display_link_version.GetString()); 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddInt64("adapterLuid", adapter_luid); 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("driverVendor", driver_vendor); 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("driverVersion", driver_version); 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("driverDate", driver_date); 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("pixelShaderVersion", pixel_shader_version); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("vertexShaderVersion", vertex_shader_version); 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glVersion", gl_version); 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glVendor", gl_vendor); 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glRenderer", gl_renderer); 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glExtensions", gl_extensions); 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glWsVendor", gl_ws_vendor); 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glWsVersion", gl_ws_version); 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddString("glWsExtensions", gl_ws_extensions); 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddInt( 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "glResetNotificationStrategy", 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static_cast<int>(gl_reset_notification_strategy)); 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("can_lose_context", can_lose_context); 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(kbr): add performance_stats. 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("softwareRendering", software_rendering); 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enumerator->AddBool("directRendering", direct_rendering); 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->AddBool("sandboxed", sandboxed); 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(kbr): add dx_diagnostics on Windows. 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) enumerator->EndAuxAttributes(); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace gpu 135