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)#ifndef GPU_CONFIG_GPU_INFO_H_ 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define GPU_CONFIG_GPU_INFO_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provides access to the GPU information for the system 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on which chrome is currently running. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/version.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/dx_diag_node.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/config/gpu_performance_stats.h" 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/gpu_export.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace gpu { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct GPU_EXPORT GPUInfo { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) struct GPU_EXPORT GPUDevice { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GPUDevice(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~GPUDevice(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The DWORD (uint32) representing the graphics card vendor id. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 vendor_id; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The DWORD (uint32) representing the graphics card device id. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Device ids are unique to vendor, not to one another. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 device_id; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The strings that describe the GPU. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In Linux these strings are obtained through libpci. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In Win/MacOSX, these two strings are not filled at the moment. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string vendor_string; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string device_string; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GPUInfo(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~GPUInfo(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether more GPUInfo fields might be collected in the future. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool finalized; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The amount of time taken to get from the process starting to the message 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loop being pumped. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta initialization_time; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computer has NVIDIA Optimus 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool optimus; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Computer has AMD Dynamic Switchable Graphics 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool amd_switchable; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Lenovo dCute is installed. http://crbug.com/181665. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool lenovo_dcute; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Version of DisplayLink driver installed. Zero if not installed. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // http://crbug.com/177611. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Version display_link_version; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Primary GPU, for exmaple, the discrete GPU in a dual GPU machine. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GPUDevice gpu; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Secondary GPUs, for example, the integrated GPU in a dual GPU machine. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<GPUDevice> secondary_gpus; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // On Windows, the unique identifier of the adapter the GPU process uses. 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The default is zero, which makes the browser process create its D3D device 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // on the primary adapter. Note that the primary adapter can change at any 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // time so it is better to specify a particular LUID. Note that valid LUIDs 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // are always non-zero. 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) uint64 adapter_luid; 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The vendor of the graphics driver currently installed. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string driver_vendor; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The version of the graphics driver currently installed. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string driver_version; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The date of the graphics driver currently installed. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string driver_date; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The version of the pixel/fragment shader used by the gpu. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string pixel_shader_version; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The version of the vertex shader used by the gpu. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string vertex_shader_version; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The machine model identifier with format "name major.minor". 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Name should not contain any whitespaces. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string machine_model; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The version of OpenGL we are using. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(zmo): should be able to tell if it's GL or GLES. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gl_version; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GL_VERSION string. "" if we are not using OpenGL. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gl_version_string; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GL_VENDOR string. "" if we are not using OpenGL. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gl_vendor; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GL_RENDERER string. "" if we are not using OpenGL. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gl_renderer; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GL_EXTENSIONS string. "" if we are not using OpenGL. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gl_extensions; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // GL window system binding vendor. "" if not available. 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string gl_ws_vendor; 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // GL window system binding version. "" if not available. 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string gl_ws_version; 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // GL window system binding extensions. "" if not available. 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string gl_ws_extensions; 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // GL reset notification strategy as defined by GL_ARB_robustness. 0 if GPU 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // reset detection or notification not available. 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint32 gl_reset_notification_strategy; 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The device semantics, i.e. whether the Vista and Windows 7 specific 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // semantics are available. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_lose_context; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // By default all values are 0. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuPerformanceStats performance_stats; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool software_rendering; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the gpu process is running in a sandbox. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool sandboxed; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The information returned by the DirectX Diagnostics Tool. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DxDiagNode dx_diagnostics; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace gpu 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // GPU_CONFIG_GPU_INFO_H_ 148