o
    _:                     @   sX   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e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 )VideoPluginz?
	Plugin for tuning powersave options for some graphic cards.
	c                 C   sP   d| _ t | _t | _| jddddD ]	}| j|j	 qt
 | _d S )NTdrmzcard*DEVTYPE	drm_minor)_devices_supportedset_free_devices_assigned_devices_hardware_inventoryget_devicesmatch_sys_namematch_propertyaddsys_namer   _cmdselfdevice r   </usr/lib/python3/dist-packages/tuned/plugins/plugin_video.py_init_devices   s   zVideoPlugin._init_devicesc                    s    fdd|D S )Nc                    s   g | ]	} j d |qS )r   )r   
get_device).0xr   r   r   
<listcomp>   s    z3VideoPlugin._get_device_objects.<locals>.<listcomp>r   )r   devicesr   r   r   _get_device_objects   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)_has_dynamic_tuning_has_static_tuningr   instancer   r   r   _instance_init#   s   
zVideoPlugin._instance_initc                 C   s   d S )Nr   r&   r   r   r   _instance_cleanup'   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   _radeon_powersave_files*   s   z#VideoPlugin._radeon_powersave_filesr"   T)
per_devicec                 C   s  |  |}ttdd| }tj|d s#|s#t	d|  d S |D ]`}|dv rD|sC| j
|d drC| j
|d |rC|  S q%|dkrW|sV| j
|d drV dS q%|dv r||s{|td	d  }| j
|d d
r{| j
|d |r{|  S q%|st	d  d S d S )Nz#(\s*:\s*)|(\s+)|(\s*;\s*)|(\s*,\s*) r*   z)radeon_powersave is not supported on '%s')defaultautolowmidhighr+   dynpm)zdpm-batteryzdpm-balancedzdpm-performancedpm-dpmr,   z$Invalid option for radeon_powersave.)r-   strresubsplitospathexistslogwarnr   write_to_filelen)r   valuer   sim	sys_filesvavstater   r   r   _set_radeon_powersave1   s>   

z!VideoPlugin._set_radeon_powersaveFc                 C   sn   |  |}| jj|d |d }|dkr| j|d  S |dkr%|S |dkr5d| j|d   S d S )Nr*   )no_errorr+   r5   r7   r6   r,   )r-   r   	read_filestrip)r   r   ignore_missingrE   r*   r   r   r   _get_radeon_powersaveP   s   
z!VideoPlugin._get_radeon_powersaveN)F)__name__
__module____qualname____doc__r   r!   classmethodr#   r(   r)   r-   command_setrI   command_getrN   r   r   r   r   r   
   s    


r   ) r   
decorators
tuned.logstunedtuned.utils.commandsr   r<   r9   logsgetr?   Pluginr   r   r   r   r   <module>   s    
