Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4637)

Unified Diff: chrome/gpu/gpu_info_collector_win.cc

Issue 6346007: Refactor and improve gpu_info_collector: collect information on linux;... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: This should turn three trybots green Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/gpu/gpu_info_collector_unittest.cc ('k') | chrome/gpu/gpu_info_unittest_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/gpu/gpu_info_collector_win.cc
===================================================================
--- chrome/gpu/gpu_info_collector_win.cc (revision 71329)
+++ chrome/gpu/gpu_info_collector_win.cc (working copy)
@@ -11,6 +11,7 @@
#include "app/gfx/gl/gl_implementation.h"
#include "base/file_path.h"
#include "base/scoped_native_library.h"
+#include "base/string_number_conversions.h"
#include "base/string_util.h"
// ANGLE seems to require that main.h be included before any other ANGLE header.
@@ -20,10 +21,16 @@
namespace gpu_info_collector {
bool CollectGraphicsInfo(GPUInfo* gpu_info) {
- // TODO: collect OpenGL info if not using ANGLE?
- if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2)
- return true;
+ DCHECK(gpu_info);
+ if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
+ gpu_info->SetProgress(GPUInfo::kComplete);
+ return CollectGraphicsInfoGL(gpu_info);
+ }
+
+ // TODO(zmo): the following code only works if running on top of ANGLE.
+ // Need to handle the case when running on top of real EGL/GLES2 drivers.
+
egl::Display* display = static_cast<egl::Display*>(
gfx::BaseEGLContext::GetDisplay());
if (!display)
@@ -43,7 +50,6 @@
// DirectX diagnostics are collected asynchronously because it takes a
// couple of seconds. Do not mark as complete until that is done.
gpu_info->SetProgress(GPUInfo::kPartial);
-
return true;
}
@@ -51,35 +57,39 @@
DCHECK(d3d);
DCHECK(gpu_info);
- // Get device information
+ bool succeed = true;
+
+ // Get device/driver information
D3DADAPTER_IDENTIFIER9 identifier;
- HRESULT hr = d3d->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &identifier);
- if (hr != D3D_OK) {
- d3d->Release();
- return false;
+ if (d3d->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &identifier) == D3D_OK) {
+ gpu_info->SetVideoCardInfo(identifier.VendorId, identifier.DeviceId);
+
+ uint32 driver_major_version_hi = HIWORD(identifier.DriverVersion.HighPart);
+ uint32 driver_major_version_lo = LOWORD(identifier.DriverVersion.HighPart);
+ uint32 driver_minor_version_hi = HIWORD(identifier.DriverVersion.LowPart);
+ uint32 driver_minor_version_lo = LOWORD(identifier.DriverVersion.LowPart);
+ std::string driver_version = StringPrintf("%d.%d.%d.%d",
+ driver_major_version_hi,
+ driver_major_version_lo,
+ driver_minor_version_hi,
+ driver_minor_version_lo);
+ gpu_info->SetDriverInfo("", driver_version);
+ } else {
+ succeed = false;
}
- uint32 vendor_id = identifier.VendorId;
- uint32 device_id = identifier.DeviceId;
// Get version information
D3DCAPS9 d3d_caps;
- HRESULT caps_result = d3d->GetDeviceCaps(D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- &d3d_caps);
- if (caps_result != D3D_OK) {
- d3d->Release();
- return false;
+ if (d3d->GetDeviceCaps(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ &d3d_caps) == D3D_OK) {
+ gpu_info->SetShaderVersion(d3d_caps.PixelShaderVersion,
+ d3d_caps.VertexShaderVersion);
+ } else {
+ succeed = false;
}
- uint32 driver_major_version_hi = HIWORD(identifier.DriverVersion.HighPart);
- uint32 driver_major_version_lo = LOWORD(identifier.DriverVersion.HighPart);
- uint32 driver_minor_version_hi = HIWORD(identifier.DriverVersion.LowPart);
- uint32 driver_minor_version_lo = LOWORD(identifier.DriverVersion.LowPart);
- std::wstring driver_version = StringPrintf(L"%d.%d.%d.%d",
- driver_major_version_hi,
- driver_major_version_lo,
- driver_minor_version_hi,
- driver_minor_version_lo);
+ // Get can_lose_context
bool can_lose_context = false;
IDirect3D9Ex* d3dex = NULL;
if (SUCCEEDED(d3d->QueryInterface(__uuidof(IDirect3D9Ex),
@@ -88,24 +98,15 @@
} else {
can_lose_context = true;
}
+ gpu_info->SetCanLoseContext(can_lose_context);
d3d->Release();
-
- // Get shader versions
- uint32 pixel_shader_version = d3d_caps.PixelShaderVersion;
- uint32 vertex_shader_version = d3d_caps.VertexShaderVersion;
-
- gpu_info->SetGraphicsInfo(vendor_id,
- device_id,
- driver_version,
- pixel_shader_version,
- vertex_shader_version,
- 0,
- can_lose_context);
return true;
}
-bool CollectGraphicsInfoGL(GPUInfo* gpu_info) {
+bool CollectVideoCardInfo(GPUInfo* gpu_info) {
+ DCHECK(gpu_info);
+
// Taken from http://developer.nvidia.com/object/device_ids.html
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
@@ -117,27 +118,33 @@
break;
}
}
- if (id.empty()) {
- return false;
+
+ if (id.length() > 20) {
+ int vendor_id = 0, device_id = 0;
+ std::wstring vendor_id_string = id.substr(8, 4);
+ std::wstring device_id_string = id.substr(17, 4);
+ base::HexStringToInt(WideToASCII(vendor_id_string), &vendor_id);
+ base::HexStringToInt(WideToASCII(device_id_string), &device_id);
+ gpu_info->SetVideoCardInfo(vendor_id, device_id);
+ return true;
}
- uint32 vendor_id;
- uint32 device_id;
- std::wstring vendorid = id.substr(8, 4);
- std::wstring deviceid = id.substr(17, 4);
- swscanf_s(vendorid.c_str(), L"%x", &vendor_id);
- swscanf_s(deviceid.c_str(), L"%x", &device_id);
+ return false;
+}
- std::wstring driver_version = L"";
- uint32 pixel_shader_version = 0;
- uint32 vertex_shader_version = 0;
- gpu_info->SetGraphicsInfo(vendor_id, device_id, driver_version,
- pixel_shader_version,
- vertex_shader_version,
- 0, // GL version of 0 indicates D3D
- false);
- return true;
+bool CollectDriverInfo(GPUInfo* gpu_info) {
+ DCHECK(gpu_info);
- // TODO(rlp): Add driver and pixel versions
+ std::string gl_version_string = gpu_info->gl_version_string();
+
+ // TODO(zmo): We assume the driver version is in the end of GL_VERSION
+ // string. Need to verify if it is true for majority drivers.
+
+ size_t pos = gl_version_string.find_last_not_of("0123456789.");
+ if (pos != std::string::npos && pos < gl_version_string.length() - 1) {
+ gpu_info->SetDriverInfo("", gl_version_string.substr(pos + 1));
+ return true;
+ }
+ return false;
}
} // namespace gpu_info_collector
« no previous file with comments | « chrome/gpu/gpu_info_collector_unittest.cc ('k') | chrome/gpu/gpu_info_unittest_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698