£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
<e                 @   s`   d dl mZ d dlT ddlZddlmZ ddlZddlZddl	Z	ej
j ZG dd dejZdS )   )base)*    N)commandsc               @   sj   e Zd ZdZdd Zdd Zedd Zdd	 Zd
d Z	dd Z
eddddd ZeddddZdS )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
	----
	====
	c             C   sT   d| _ t | _t | _x0| jjdjdjddD ]}| jj|j	 q2W t
 | _d S )NTdrmzcard*ZDEVTYPEZ	drm_minor)Z_devices_supportedsetZ_free_devicesZ_assigned_devices_hardware_inventoryZget_devicesZmatch_sys_nameZmatch_propertyaddZsys_namer   _cmd)selfdevice r   "/usr/lib/python3.6/plugin_video.py_init_devices-   s     zVideoPlugin._init_devicesc                s    fdd|D S )Nc                s   g | ]} j jd |qS )r   )r	   Z
get_device).0x)r   r   r   
<listcomp>9   s    z3VideoPlugin._get_device_objects.<locals>.<listcomp>r   )r   Zdevicesr   )r   r   _get_device_objects8   s    zVideoPlugin._get_device_objectsc             C   s   dd iS )Nradeon_powersaver   )r   r   r   r   _get_config_options;   s    zVideoPlugin._get_config_optionsc             C   s   d|_ d|_d S )NFT)Z_has_dynamic_tuningZ_has_static_tuning)r   instancer   r   r   _instance_initA   s    zVideoPlugin._instance_initc             C   s   d S )Nr   )r   r   r   r   r   _instance_cleanupE   s    zVideoPlugin._instance_cleanupc             C   s   d| 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   r   r   r   _radeon_powersave_filesH   s    z#VideoPlugin._radeon_powersave_filesr   T)Z
per_devicec       	      C   sl  | j |}ttjdd|j }tjj|d sF|sFtj	d|  d S x|D ]}|dkr|s| j
j|d d
|rztjgnddr| j
j|d
 ||rtjgnddr|S qN|dkr|s| j
j|d d|rtjgnddrdS qN|dkrP|sd|tdd  }| j
j|d d|rtjgnddrd| j
j|d ||r@tjgnddrd|S qN|s`tj	d d S qNW d S )Nz#(\s*:\s*)|(\s+)|(\s*;\s*)|(\s*,\s*) r   z)radeon_powersave is not supported on '%s'defaultautolowmidhighr   F)no_errordynpmdpm-batterydpm-balanceddpm-performancezdpm-dpmr   z$Invalid option for radeon_powersave.)r   r    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   Zsimremove	sys_filesZvavstater   r   r   _set_radeon_powersaveO   s>    


z!VideoPlugin._set_radeon_powersaveFc             C   sr   | j |}| jj|d |dj }|dkr>| jj|d j S |dkrJ|S |dkrjd| jj|d j  S d S d S )Nr   )r$   r   r%   r)   zdpm-r   )r   r   Z	read_filestrip)r   r   Zignore_missingr8   r   r   r   r   _get_radeon_powersaves   s    
z!VideoPlugin._get_radeon_powersaveN)F)__name__
__module____qualname____doc__r   r   classmethodr   r   r   r   Zcommand_setr;   Zcommand_getr=   r   r   r   r   r      s    $r   ) r   Z
decoratorsZ
tuned.logsZtunedZtuned.utils.commandsr   r.   r3   r+   Zlogsgetr1   ZPluginr   r   r   r   r   <module>   s   
