You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

348 lines
11 KiB
Python

# DO NOT EDIT THIS FILE!
#
# This file is generated from the CDP specification. If you need to make
# changes, edit the generator and regenerate all of the modules.
#
# CDP domain: SystemInfo (experimental)
from __future__ import annotations
from .util import event_class, T_JSON_DICT
from dataclasses import dataclass
import enum
import typing
@dataclass
class GPUDevice:
'''
Describes a single graphics processor (GPU).
'''
#: PCI ID of the GPU vendor, if available; 0 otherwise.
vendor_id: float
#: PCI ID of the GPU device, if available; 0 otherwise.
device_id: float
#: String description of the GPU vendor, if the PCI ID is not available.
vendor_string: str
#: String description of the GPU device, if the PCI ID is not available.
device_string: str
#: String description of the GPU driver vendor.
driver_vendor: str
#: String description of the GPU driver version.
driver_version: str
#: Sub sys ID of the GPU, only available on Windows.
sub_sys_id: typing.Optional[float] = None
#: Revision of the GPU, only available on Windows.
revision: typing.Optional[float] = None
def to_json(self):
json = dict()
json['vendorId'] = self.vendor_id
json['deviceId'] = self.device_id
json['vendorString'] = self.vendor_string
json['deviceString'] = self.device_string
json['driverVendor'] = self.driver_vendor
json['driverVersion'] = self.driver_version
if self.sub_sys_id is not None:
json['subSysId'] = self.sub_sys_id
if self.revision is not None:
json['revision'] = self.revision
return json
@classmethod
def from_json(cls, json):
return cls(
vendor_id=float(json['vendorId']),
device_id=float(json['deviceId']),
vendor_string=str(json['vendorString']),
device_string=str(json['deviceString']),
driver_vendor=str(json['driverVendor']),
driver_version=str(json['driverVersion']),
sub_sys_id=float(json['subSysId']) if 'subSysId' in json else None,
revision=float(json['revision']) if 'revision' in json else None,
)
@dataclass
class Size:
'''
Describes the width and height dimensions of an entity.
'''
#: Width in pixels.
width: int
#: Height in pixels.
height: int
def to_json(self):
json = dict()
json['width'] = self.width
json['height'] = self.height
return json
@classmethod
def from_json(cls, json):
return cls(
width=int(json['width']),
height=int(json['height']),
)
@dataclass
class VideoDecodeAcceleratorCapability:
'''
Describes a supported video decoding profile with its associated minimum and
maximum resolutions.
'''
#: Video codec profile that is supported, e.g. VP9 Profile 2.
profile: str
#: Maximum video dimensions in pixels supported for this ``profile``.
max_resolution: Size
#: Minimum video dimensions in pixels supported for this ``profile``.
min_resolution: Size
def to_json(self):
json = dict()
json['profile'] = self.profile
json['maxResolution'] = self.max_resolution.to_json()
json['minResolution'] = self.min_resolution.to_json()
return json
@classmethod
def from_json(cls, json):
return cls(
profile=str(json['profile']),
max_resolution=Size.from_json(json['maxResolution']),
min_resolution=Size.from_json(json['minResolution']),
)
@dataclass
class VideoEncodeAcceleratorCapability:
'''
Describes a supported video encoding profile with its associated maximum
resolution and maximum framerate.
'''
#: Video codec profile that is supported, e.g H264 Main.
profile: str
#: Maximum video dimensions in pixels supported for this ``profile``.
max_resolution: Size
#: Maximum encoding framerate in frames per second supported for this
#: ``profile``, as fraction's numerator and denominator, e.g. 24/1 fps,
#: 24000/1001 fps, etc.
max_framerate_numerator: int
max_framerate_denominator: int
def to_json(self):
json = dict()
json['profile'] = self.profile
json['maxResolution'] = self.max_resolution.to_json()
json['maxFramerateNumerator'] = self.max_framerate_numerator
json['maxFramerateDenominator'] = self.max_framerate_denominator
return json
@classmethod
def from_json(cls, json):
return cls(
profile=str(json['profile']),
max_resolution=Size.from_json(json['maxResolution']),
max_framerate_numerator=int(json['maxFramerateNumerator']),
max_framerate_denominator=int(json['maxFramerateDenominator']),
)
class SubsamplingFormat(enum.Enum):
'''
YUV subsampling type of the pixels of a given image.
'''
YUV420 = "yuv420"
YUV422 = "yuv422"
YUV444 = "yuv444"
def to_json(self):
return self.value
@classmethod
def from_json(cls, json):
return cls(json)
class ImageType(enum.Enum):
'''
Image format of a given image.
'''
JPEG = "jpeg"
WEBP = "webp"
UNKNOWN = "unknown"
def to_json(self):
return self.value
@classmethod
def from_json(cls, json):
return cls(json)
@dataclass
class ImageDecodeAcceleratorCapability:
'''
Describes a supported image decoding profile with its associated minimum and
maximum resolutions and subsampling.
'''
#: Image coded, e.g. Jpeg.
image_type: ImageType
#: Maximum supported dimensions of the image in pixels.
max_dimensions: Size
#: Minimum supported dimensions of the image in pixels.
min_dimensions: Size
#: Optional array of supported subsampling formats, e.g. 4:2:0, if known.
subsamplings: typing.List[SubsamplingFormat]
def to_json(self):
json = dict()
json['imageType'] = self.image_type.to_json()
json['maxDimensions'] = self.max_dimensions.to_json()
json['minDimensions'] = self.min_dimensions.to_json()
json['subsamplings'] = [i.to_json() for i in self.subsamplings]
return json
@classmethod
def from_json(cls, json):
return cls(
image_type=ImageType.from_json(json['imageType']),
max_dimensions=Size.from_json(json['maxDimensions']),
min_dimensions=Size.from_json(json['minDimensions']),
subsamplings=[SubsamplingFormat.from_json(i) for i in json['subsamplings']],
)
@dataclass
class GPUInfo:
'''
Provides information about the GPU(s) on the system.
'''
#: The graphics devices on the system. Element 0 is the primary GPU.
devices: typing.List[GPUDevice]
#: An optional array of GPU driver bug workarounds.
driver_bug_workarounds: typing.List[str]
#: Supported accelerated video decoding capabilities.
video_decoding: typing.List[VideoDecodeAcceleratorCapability]
#: Supported accelerated video encoding capabilities.
video_encoding: typing.List[VideoEncodeAcceleratorCapability]
#: Supported accelerated image decoding capabilities.
image_decoding: typing.List[ImageDecodeAcceleratorCapability]
#: An optional dictionary of additional GPU related attributes.
aux_attributes: typing.Optional[dict] = None
#: An optional dictionary of graphics features and their status.
feature_status: typing.Optional[dict] = None
def to_json(self):
json = dict()
json['devices'] = [i.to_json() for i in self.devices]
json['driverBugWorkarounds'] = [i for i in self.driver_bug_workarounds]
json['videoDecoding'] = [i.to_json() for i in self.video_decoding]
json['videoEncoding'] = [i.to_json() for i in self.video_encoding]
json['imageDecoding'] = [i.to_json() for i in self.image_decoding]
if self.aux_attributes is not None:
json['auxAttributes'] = self.aux_attributes
if self.feature_status is not None:
json['featureStatus'] = self.feature_status
return json
@classmethod
def from_json(cls, json):
return cls(
devices=[GPUDevice.from_json(i) for i in json['devices']],
driver_bug_workarounds=[str(i) for i in json['driverBugWorkarounds']],
video_decoding=[VideoDecodeAcceleratorCapability.from_json(i) for i in json['videoDecoding']],
video_encoding=[VideoEncodeAcceleratorCapability.from_json(i) for i in json['videoEncoding']],
image_decoding=[ImageDecodeAcceleratorCapability.from_json(i) for i in json['imageDecoding']],
aux_attributes=dict(json['auxAttributes']) if 'auxAttributes' in json else None,
feature_status=dict(json['featureStatus']) if 'featureStatus' in json else None,
)
@dataclass
class ProcessInfo:
'''
Represents process info.
'''
#: Specifies process type.
type_: str
#: Specifies process id.
id_: int
#: Specifies cumulative CPU usage in seconds across all threads of the
#: process since the process start.
cpu_time: float
def to_json(self):
json = dict()
json['type'] = self.type_
json['id'] = self.id_
json['cpuTime'] = self.cpu_time
return json
@classmethod
def from_json(cls, json):
return cls(
type_=str(json['type']),
id_=int(json['id']),
cpu_time=float(json['cpuTime']),
)
def get_info() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[GPUInfo, str, str, str]]:
'''
Returns information about the system.
:returns: A tuple with the following items:
0. **gpu** - Information about the GPUs on the system.
1. **modelName** - A platform-dependent description of the model of the machine. On Mac OS, this is, for example, 'MacBookPro'. Will be the empty string if not supported.
2. **modelVersion** - A platform-dependent description of the version of the machine. On Mac OS, this is, for example, '10.1'. Will be the empty string if not supported.
3. **commandLine** - The command line string used to launch the browser. Will be the empty string if not supported.
'''
cmd_dict: T_JSON_DICT = {
'method': 'SystemInfo.getInfo',
}
json = yield cmd_dict
return (
GPUInfo.from_json(json['gpu']),
str(json['modelName']),
str(json['modelVersion']),
str(json['commandLine'])
)
def get_process_info() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[ProcessInfo]]:
'''
Returns information about all running processes.
:returns: An array of process info blocks.
'''
cmd_dict: T_JSON_DICT = {
'method': 'SystemInfo.getProcessInfo',
}
json = yield cmd_dict
return [ProcessInfo.from_json(i) for i in json['processInfo']]