| Index: content/browser/gpu/gpu_data_manager.cc
|
| diff --git a/content/browser/gpu/gpu_data_manager.cc b/content/browser/gpu/gpu_data_manager.cc
|
| index 079191a9e2757d8b83f9db82f5bd0b94660e26a5..779ca26ac02de33a3def72e913633bc319e1821e 100644
|
| --- a/content/browser/gpu/gpu_data_manager.cc
|
| +++ b/content/browser/gpu/gpu_data_manager.cc
|
| @@ -40,6 +40,45 @@ void DisplayReconfigCallback(CGDirectDisplayID display,
|
| }
|
| #endif
|
|
|
| +DictionaryValue* NewDescriptionValuePair(const std::string& desc,
|
| + const std::string& value) {
|
| + DictionaryValue* dict = new DictionaryValue();
|
| + dict->SetString("description", desc);
|
| + dict->SetString("value", value);
|
| + return dict;
|
| +}
|
| +
|
| +DictionaryValue* NewDescriptionValuePair(const std::string& desc,
|
| + Value* value) {
|
| + DictionaryValue* dict = new DictionaryValue();
|
| + dict->SetString("description", desc);
|
| + dict->Set("value", value);
|
| + return dict;
|
| +}
|
| +
|
| +#if defined(OS_WIN)
|
| +// Output DxDiagNode tree as nested array of {description,value} pairs
|
| +ListValue* DxDiagNodeToList(const DxDiagNode& node) {
|
| + ListValue* list = new ListValue();
|
| + for (std::map<std::string, std::string>::const_iterator it =
|
| + node.values.begin();
|
| + it != node.values.end();
|
| + ++it) {
|
| + list->Append(NewDescriptionValuePair(it->first, it->second));
|
| + }
|
| +
|
| + for (std::map<std::string, DxDiagNode>::const_iterator it =
|
| + node.children.begin();
|
| + it != node.children.end();
|
| + ++it) {
|
| + ListValue* sublist = DxDiagNodeToList(it->second);
|
| + list->Append(NewDescriptionValuePair(it->first, sublist));
|
| + }
|
| + return list;
|
| +}
|
| +
|
| +#endif // OS_WIN
|
| +
|
| } // namespace anonymous
|
|
|
| GpuDataManager::GpuDataManager()
|
| @@ -243,6 +282,51 @@ void GpuDataManager::HandleGpuSwitch() {
|
| // relaunch GPU process.
|
| }
|
|
|
| +DictionaryValue* GpuDataManager::GpuInfoAsDictionaryValue() const {
|
| + ListValue* basic_info = new ListValue();
|
| + basic_info->Append(NewDescriptionValuePair(
|
| + "Initialization time",
|
| + base::Int64ToString(gpu_info().initialization_time.InMilliseconds())));
|
| + basic_info->Append(NewDescriptionValuePair(
|
| + "Vendor Id", base::StringPrintf("0x%04x", gpu_info().vendor_id)));
|
| + basic_info->Append(NewDescriptionValuePair(
|
| + "Device Id", base::StringPrintf("0x%04x", gpu_info().device_id)));
|
| + basic_info->Append(NewDescriptionValuePair("Driver vendor",
|
| + gpu_info().driver_vendor));
|
| + basic_info->Append(NewDescriptionValuePair("Driver version",
|
| + gpu_info().driver_version));
|
| + basic_info->Append(NewDescriptionValuePair("Driver date",
|
| + gpu_info().driver_date));
|
| + basic_info->Append(NewDescriptionValuePair("Pixel shader version",
|
| + gpu_info().pixel_shader_version));
|
| + basic_info->Append(NewDescriptionValuePair("Vertex shader version",
|
| + gpu_info().vertex_shader_version));
|
| + basic_info->Append(NewDescriptionValuePair("GL version",
|
| + gpu_info().gl_version));
|
| + basic_info->Append(NewDescriptionValuePair("GL_VENDOR",
|
| + gpu_info().gl_vendor));
|
| + basic_info->Append(NewDescriptionValuePair("GL_RENDERER",
|
| + gpu_info().gl_renderer));
|
| + basic_info->Append(NewDescriptionValuePair("GL_VERSION",
|
| + gpu_info().gl_version_string));
|
| + basic_info->Append(NewDescriptionValuePair("GL_EXTENSIONS",
|
| + gpu_info().gl_extensions));
|
| +
|
| + DictionaryValue* info = new DictionaryValue();
|
| + info->Set("basic_info", basic_info);
|
| +
|
| +#if defined(OS_WIN)
|
| + Value* dx_info;
|
| + if (gpu_info().dx_diagnostics.children.size())
|
| + dx_info = DxDiagNodeToList(gpu_info().dx_diagnostics);
|
| + else
|
| + dx_info = Value::CreateNullValue();
|
| + info->Set("diagnostics", dx_info);
|
| +#endif
|
| +
|
| + return info;
|
| +}
|
| +
|
| void GpuDataManager::RunGpuInfoUpdateCallbacks() {
|
| if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
|
|