3 À<×eßã@s`ddlmZddlTddlZddlmZddlZddlZddl Z ej j ƒZ Gdd„dej ƒZdS)é)Úbase)Ú*éN)Úcommandsc@sjeZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d d „Z e ddd�dd„ƒZ e dƒddd„ƒZdS)Ú VideoPlugina° `video`:: Sets various powersave levels on video cards. Currently, only the Radeon cards are supported. The powersave level can be specified by using the [option]`radeon_powersave` option. Supported values are: + -- * `default` * `auto` * `low` * `mid` * `high` * `dynpm` * `dpm-battery` * `dpm-balanced` * `dpm-perfomance` -- + For additional detail, see link:https://www.x.org/wiki/RadeonFeature/#kmspowermanagementoptions[KMS Power Management Options]. + NOTE: This plug-in is experimental and the option might change in future releases. + .To set the powersave level for the Radeon video card to high ==== ---- [video] radeon_powersave=high ---- ==== cCsTd|_tƒ|_tƒ|_x0|jjdƒjdƒjddƒD]}|jj|j ƒq2Wt ƒ|_ dS)NTÚdrmzcard*ZDEVTYPEZ drm_minor) Z_devices_supportedÚsetZ _free_devicesZ_assigned_devicesÚ_hardware_inventoryZ get_devicesZmatch_sys_nameZmatch_propertyÚaddZsys_namerÚ_cmd)ÚselfÚdevice©rú"/usr/lib/python3.6/plugin_video.pyÚ _init_devices-s  zVideoPlugin._init_devicescs‡fdd„|DƒS)Ncsg|]}ˆjjd|ƒ‘qS)r)r Z get_device)Ú.0Úx)r rrú 9sz3VideoPlugin._get_device_objects..r)r Zdevicesr)r rÚ_get_device_objects8szVideoPlugin._get_device_objectscCsddiS)NÚradeon_powersaver)r rrrÚ_get_config_options;szVideoPlugin._get_config_optionscCsd|_d|_dS)NFT)Z_has_dynamic_tuningZ_has_static_tuning)r ÚinstancerrrÚ_instance_initAszVideoPlugin._instance_initcCsdS)Nr)r rrrrÚ_instance_cleanupEszVideoPlugin._instance_cleanupcCsd|d|d|dœS)Nz%/sys/class/drm/%s/device/power_methodz&/sys/class/drm/%s/device/power_profilez(/sys/class/drm/%s/device/power_dpm_state)ÚmethodÚprofileÚ dpm_stater)r r rrrÚ_radeon_powersave_filesHsz#VideoPlugin._radeon_powersave_filesrT)Z per_devicec Csl|j|ƒ}ttjdd|ƒƒjƒ}tjj|dƒsF|sFtj d|ƒdS�x|D�]}|dkrª|s¨|j j |dd |rzt j gnd d �r¨|j j |d ||rœt j gnd d �r¨|SqN|d krÞ|sÜ|j j |dd |rÐt j gnd d �rÜd SqN|dk�rP|�sd|tdƒd…}|j j |dd|�rt j gnd d ��rd|j j |d||�r@t j gnd d ��rd|SqN|�s`tj dƒdSqNWdS)Nz#(\s*:\s*)|(\s+)|(\s*;\s*)|(\s*,\s*)ú rz)radeon_powersave is not supported on '%s'ÚdefaultÚautoÚlowÚmidÚhighrF)Úno_errorÚdynpmú dpm-batteryú dpm-balancedúdpm-performancezdpm-Údpmrz$Invalid option for radeon_powersave.)rr r!r"r#)r&r'r()rÚstrÚreÚsubÚsplitÚosÚpathÚexistsÚlogÚwarnr Z write_to_fileÚerrnoÚENOENTÚlen) r Úvaluer ZsimÚremoveÚ sys_filesZvaÚvÚstaterrrÚ_set_radeon_powersaveOs>   z!VideoPlugin._set_radeon_powersaveFcCsr|j|ƒ}|jj|d|d�jƒ}|dkr>|jj|dƒjƒS|dkrJ|S|dkrjd|jj|dƒjƒSdSdS)Nr)r$rr%r)zdpm-r)rr Z read_fileÚstrip)r r Zignore_missingr8rrrrÚ_get_radeon_powersavess z!VideoPlugin._get_radeon_powersaveN)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrÚ classmethodrrrrZ command_setr;Z command_getr=rrrrr s   $r)ÚrZ decoratorsZ tuned.logsZtunedZtuned.utils.commandsrr.r3r+ZlogsÚgetr1ZPluginrrrrrÚs