blob: 926f927154ddb0a5c788a68fbc315d471b9bdc58 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
class GPUDevice(object):
"""Provides information about an individual GPU device.
On platforms which support them, the vendor_id and device_id are
PCI IDs. On other platforms, the vendor_string and device_string
are platform-dependent strings.
"""
_VENDOR_ID_MAP = {
0x1002: 'ATI',
0x8086: 'Intel',
0x10de: 'Nvidia',
}
def __init__(self, vendor_id, device_id, vendor_string, device_string):
self._vendor_id = vendor_id
self._device_id = device_id
self._vendor_string = vendor_string
self._device_string = device_string
def __str__(self):
vendor = 'VENDOR = 0x%x' % self._vendor_id
vendor_string = self._vendor_string
if not vendor_string and self._vendor_id in self._VENDOR_ID_MAP:
vendor_string = self._VENDOR_ID_MAP[self._vendor_id]
if vendor_string:
vendor += ' (%s)' % vendor_string
device = 'DEVICE = 0x%x' % self._device_id
if self._device_string:
device += ' (%s)' % self._device_string
return '%s, %s' % (vendor, device)
@classmethod
def FromDict(cls, attrs):
"""Constructs a GPUDevice from a dictionary. Requires the
following attributes to be present in the dictionary:
vendor_id
device_id
vendor_string
device_string
Raises an exception if any attributes are missing.
"""
return cls(attrs['vendor_id'], attrs['device_id'],
attrs['vendor_string'], attrs['device_string'])
@property
def vendor_id(self):
"""The GPU vendor's PCI ID as a number, or 0 if not available.
Most desktop machines supply this information rather than the
vendor and device strings."""
return self._vendor_id
@property
def device_id(self):
"""The GPU device's PCI ID as a number, or 0 if not available.
Most desktop machines supply this information rather than the
vendor and device strings."""
return self._device_id
@property
def vendor_string(self):
"""The GPU vendor's name as a string, or the empty string if not
available.
Most mobile devices supply this information rather than the PCI
IDs."""
return self._vendor_string
@property
def device_string(self):
"""The GPU device's name as a string, or the empty string if not
available.
Most mobile devices supply this information rather than the PCI
IDs."""
return self._device_string