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

Side by Side Diff: gpu/config/gpu_info_collector_mac.mm

Issue 534043002: Add bits to indicate which parts of GPUInfo are collected. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « gpu/config/gpu_info_collector_linux.cc ('k') | gpu/config/gpu_info_collector_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/config/gpu_info_collector.h" 5 #include "gpu/config/gpu_info_collector.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 // Find the info of the current GPU. 55 // Find the info of the current GPU.
56 GPUInfo::GPUDevice GetActiveGPU() { 56 GPUInfo::GPUDevice GetActiveGPU() {
57 GPUInfo::GPUDevice gpu; 57 GPUInfo::GPUDevice gpu;
58 io_registry_entry_t dsp_port = CGDisplayIOServicePort(kCGDirectMainDisplay); 58 io_registry_entry_t dsp_port = CGDisplayIOServicePort(kCGDirectMainDisplay);
59 gpu.vendor_id = GetEntryProperty(dsp_port, CFSTR("vendor-id")); 59 gpu.vendor_id = GetEntryProperty(dsp_port, CFSTR("vendor-id"));
60 gpu.device_id = GetEntryProperty(dsp_port, CFSTR("device-id")); 60 gpu.device_id = GetEntryProperty(dsp_port, CFSTR("device-id"));
61 return gpu; 61 return gpu;
62 } 62 }
63 63
64 // Scan IO registry for PCI video cards. 64 // Scan IO registry for PCI video cards.
65 bool CollectPCIVideoCardInfo(GPUInfo* gpu_info) { 65 CollectInfoResult CollectPCIVideoCardInfo(GPUInfo* gpu_info) {
66 DCHECK(gpu_info); 66 DCHECK(gpu_info);
67 GPUInfo::GPUDevice active_gpu = GetActiveGPU(); 67 GPUInfo::GPUDevice active_gpu = GetActiveGPU();
68 68
69 // Collect all GPUs' info. 69 // Collect all GPUs' info.
70 // match_dictionary will be consumed by IOServiceGetMatchingServices, no need 70 // match_dictionary will be consumed by IOServiceGetMatchingServices, no need
71 // to release it. 71 // to release it.
72 CFMutableDictionaryRef match_dictionary = IOServiceMatching("IOPCIDevice"); 72 CFMutableDictionaryRef match_dictionary = IOServiceMatching("IOPCIDevice");
73 io_iterator_t entry_iterator; 73 io_iterator_t entry_iterator;
74 std::vector<GPUInfo::GPUDevice> gpu_list; 74 std::vector<GPUInfo::GPUDevice> gpu_list;
75 if (IOServiceGetMatchingServices(kIOMasterPortDefault, 75 if (IOServiceGetMatchingServices(kIOMasterPortDefault,
(...skipping 14 matching lines...) Expand all
90 gpu.active = true; 90 gpu.active = true;
91 } 91 }
92 gpu_list.push_back(gpu); 92 gpu_list.push_back(gpu);
93 } 93 }
94 } 94 }
95 IOObjectRelease(entry_iterator); 95 IOObjectRelease(entry_iterator);
96 } 96 }
97 97
98 switch (gpu_list.size()) { 98 switch (gpu_list.size()) {
99 case 0: 99 case 0:
100 return false; 100 return kCollectInfoNonFatalFailure;
101 case 1: 101 case 1:
102 gpu_info->gpu = gpu_list[0]; 102 gpu_info->gpu = gpu_list[0];
103 break; 103 break;
104 case 2: 104 case 2:
105 { 105 {
106 int integrated = -1; 106 int integrated = -1;
107 int discrete = -1; 107 int discrete = -1;
108 if (gpu_list[0].vendor_id == kVendorIDIntel) 108 if (gpu_list[0].vendor_id == kVendorIDIntel)
109 integrated = 0; 109 integrated = 0;
110 else if (gpu_list[1].vendor_id == kVendorIDIntel) 110 else if (gpu_list[1].vendor_id == kVendorIDIntel)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 } 147 }
148 for (size_t i = 0; i < gpu_list.size(); ++i) { 148 for (size_t i = 0; i < gpu_list.size(); ++i) {
149 if (i == current) 149 if (i == current)
150 gpu_info->gpu = gpu_list[i]; 150 gpu_info->gpu = gpu_list[i];
151 else 151 else
152 gpu_info->secondary_gpus.push_back(gpu_list[i]); 152 gpu_info->secondary_gpus.push_back(gpu_list[i]);
153 } 153 }
154 } 154 }
155 break; 155 break;
156 } 156 }
157 return (gpu_info->gpu.vendor_id && gpu_info->gpu.device_id); 157 if (gpu_info->gpu.vendor_id == 0 || gpu_info->gpu.device_id == 0)
158 return kCollectInfoNonFatalFailure;
159 return kCollectInfoSuccess;
158 } 160 }
159 161
160 } // namespace anonymous 162 } // namespace anonymous
161 163
162 CollectInfoResult CollectContextGraphicsInfo(GPUInfo* gpu_info) { 164 CollectInfoResult CollectContextGraphicsInfo(GPUInfo* gpu_info) {
163 DCHECK(gpu_info); 165 DCHECK(gpu_info);
164 166
165 TRACE_EVENT0("gpu", "gpu_info_collector::CollectGraphicsInfo"); 167 TRACE_EVENT0("gpu", "gpu_info_collector::CollectGraphicsInfo");
166 168
167 gpu_info->can_lose_context = 169 gpu_info->can_lose_context =
168 (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2); 170 (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2);
169 gpu_info->finalized = true; 171 CollectInfoResult result = CollectGraphicsInfoGL(gpu_info);
170 return CollectGraphicsInfoGL(gpu_info); 172 gpu_info->context_info_state = result;
173 return result;
171 } 174 }
172 175
173 GpuIDResult CollectGpuID(uint32* vendor_id, uint32* device_id) { 176 CollectInfoResult CollectGpuID(uint32* vendor_id, uint32* device_id) {
174 DCHECK(vendor_id && device_id); 177 DCHECK(vendor_id && device_id);
175 178
176 GPUInfo::GPUDevice gpu = GetActiveGPU(); 179 GPUInfo::GPUDevice gpu = GetActiveGPU();
177 *vendor_id = gpu.vendor_id; 180 *vendor_id = gpu.vendor_id;
178 *device_id = gpu.device_id; 181 *device_id = gpu.device_id;
179 182
180 if (*vendor_id != 0 && *device_id != 0) 183 if (*vendor_id != 0 && *device_id != 0)
181 return kGpuIDSuccess; 184 return kCollectInfoSuccess;
182 return kGpuIDFailure; 185 return kCollectInfoNonFatalFailure;
183 } 186 }
184 187
185 CollectInfoResult CollectBasicGraphicsInfo(GPUInfo* gpu_info) { 188 CollectInfoResult CollectBasicGraphicsInfo(GPUInfo* gpu_info) {
186 DCHECK(gpu_info); 189 DCHECK(gpu_info);
187 190
188 int32 model_major = 0, model_minor = 0; 191 int32 model_major = 0, model_minor = 0;
189 base::mac::ParseModelIdentifier(base::mac::GetModelIdentifier(), 192 base::mac::ParseModelIdentifier(base::mac::GetModelIdentifier(),
190 &gpu_info->machine_model_name, 193 &gpu_info->machine_model_name,
191 &model_major, &model_minor); 194 &model_major, &model_minor);
192 gpu_info->machine_model_version = 195 gpu_info->machine_model_version =
193 base::IntToString(model_major) + "." + base::IntToString(model_minor); 196 base::IntToString(model_major) + "." + base::IntToString(model_minor);
194 197
195 bool result = CollectPCIVideoCardInfo(gpu_info); 198 CollectInfoResult result = CollectPCIVideoCardInfo(gpu_info);
196 return result ? kCollectInfoSuccess : kCollectInfoNonFatalFailure; 199 gpu_info->basic_info_state = result;
200 return result;
197 } 201 }
198 202
199 CollectInfoResult CollectDriverInfoGL(GPUInfo* gpu_info) { 203 CollectInfoResult CollectDriverInfoGL(GPUInfo* gpu_info) {
200 DCHECK(gpu_info); 204 DCHECK(gpu_info);
201 205
202 // Extract the OpenGL driver version string from the GL_VERSION string. 206 // Extract the OpenGL driver version string from the GL_VERSION string.
203 // Mac OpenGL drivers have the driver version 207 // Mac OpenGL drivers have the driver version
204 // at the end of the gl version string preceded by a dash. 208 // at the end of the gl version string preceded by a dash.
205 // Use some jiggery-pokery to turn that utf8 string into a std::wstring. 209 // Use some jiggery-pokery to turn that utf8 string into a std::wstring.
206 size_t pos = gpu_info->gl_version.find_last_of('-'); 210 size_t pos = gpu_info->gl_version.find_last_of('-');
207 if (pos == std::string::npos) 211 if (pos == std::string::npos)
208 return kCollectInfoNonFatalFailure; 212 return kCollectInfoNonFatalFailure;
209 gpu_info->driver_version = gpu_info->gl_version.substr(pos + 1); 213 gpu_info->driver_version = gpu_info->gl_version.substr(pos + 1);
210 return kCollectInfoSuccess; 214 return kCollectInfoSuccess;
211 } 215 }
212 216
213 void MergeGPUInfo(GPUInfo* basic_gpu_info, 217 void MergeGPUInfo(GPUInfo* basic_gpu_info,
214 const GPUInfo& context_gpu_info) { 218 const GPUInfo& context_gpu_info) {
215 MergeGPUInfoGL(basic_gpu_info, context_gpu_info); 219 MergeGPUInfoGL(basic_gpu_info, context_gpu_info);
216 } 220 }
217 221
218 } // namespace gpu 222 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/config/gpu_info_collector_linux.cc ('k') | gpu/config/gpu_info_collector_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698