# 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']]