<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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   
