a h@s`ddlmZddlTddlZddlmZddlZddlZddl Z ej Z Gdddej ZdS))base)*N)commandscseZdZdZfddZddZddZedd Zd d Z d d Z ddZ dddZ e dddddZedd ddZe dddddZedd!ddZZS)" VideoPluginaf Sets various power saving features on video cards. 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. .Setting powersave level for the Radeon video card to high ==== ---- [video] radeon_powersave=high ---- ==== Mobile hardware with amdgpu driven eDP panels can be configured with the [option]`panel_power_savings` option. This accepts a value range from 0 to 4, where 4 is the highest power savings but will trade off color accuracy. cstt|j|i|dSN)superr__init__)selfargskwargs __class__>/usr/lib/python3.9/site-packages/tuned/plugins/plugin_video.pyr /szVideoPlugin.__init__cCsnd|_t|_t|_|jddD]8}||j}|D]"}t j ||r<|j |jq@z3VideoPlugin._get_device_objects..r)r Zdevicesrr r_get_device_objects?szVideoPlugin._get_device_objectscCs dddS)N)radeon_powersavepanel_power_savingsrr rrr_get_config_optionsBszVideoPlugin._get_config_optionscCsd|_d|_dS)NFT)Z_has_dynamic_tuningZ_has_static_tuningr instancerrr_instance_initIszVideoPlugin._instance_initcCsdSrrr'rrr_instance_cleanupMszVideoPlugin._instance_cleanupcCsd|d|d|d|dS)Nz%/sys/class/drm/%s/device/power_methodz&/sys/class/drm/%s/device/power_profilez(/sys/class/drm/%s/device/power_dpm_statez,/sys/class/drm/%s/amdgpu/panel_power_savings)methodprofile dpm_stater%r)r rrrrrPs zVideoPlugin._filesFcCs~tj||dsdSt|||}||krHtd||f|Std||f|sv|j ||d|rz|SdS)zTApply the target value to the panel_power_savings file if it doesn't already have itr%Nz%panel_power_savings for %s already %sz%s panel_power_savings -> %s) rrrrint_get_panel_power_savingsloginfor write_to_file)r rtargetr(simcurrentrrrapply_panel_power_saving_targetXs z+VideoPlugin.apply_panel_power_saving_targetr$T)Z per_devicec Csr||}ttdd|}tj|dsF|sFt d|dS|D] }|dvr|s|j j |dd|rvt j gnddr|j j |d||rt j gnddr|SqJ|d kr|s|j j |dd |rt j gnddrd SqJ|d vrV|sl|td d} |j j |dd |rt j gnddrl|j j |d | |rBt j gnddrl|SqJ|sftddSqJdS)Nz#(\s*:\s*)|(\s+)|(\s*;\s*)|(\s*,\s*) r+)radeon_powersave is not supported on '%s')defaultautoZlowZmidZhighr,FZno_errordynpm)z dpm-batteryz dpm-balancedzdpm-performancedpm-dpmr-z$Invalid option for radeon_powersave.)rstrresubsplitrrrr0debugrr2errnoENOENTlenwarning) r valuerr(r4remove sys_filesvavstaterrr_set_radeon_powersavemsL      z!VideoPlugin._set_radeon_powersavecCs||}tj|ds,td|dS|jj|d|d}|dkr`|j|dS|dkrl|S|dkrd|j|dSdSdS) Nr+r8r;r,r<r>r=r-) rrrrr0rCr read_filestrip)r rr(ignore_missingrJr+rrr_get_radeon_powersaves z!VideoPlugin._get_radeon_powersaver%cCsbzt|d}Wn"ty0td|YdS0|tddvrP|||||Std|dS)z!Set the panel_power_savings value z(Invalid value %s for panel_power_savingsNr)r. ValueErrorr0rGranger6)r rHrr(r4rIrrr_set_panel_power_savingss z$VideoPlugin._set_panel_power_savingscCsJtj||ds(td|dS||d}|jj||dS)z)Get the current panel_power_savings valuer%z,panel_power_savings is not supported on '%s'Nr;) rrrrr0rCrrOrP)r rr(rQfnamerrrr/s z$VideoPlugin._get_panel_power_savings)F)F)F)__name__ __module__ __qualname____doc__r rr# classmethodr&r)r*rr6Z command_setrNZ command_getrRrWr/ __classcell__rrr rr s$#      #   r)rZ decoratorsZ tuned.logsZtunedZtuned.utils.commandsrrrDr@Zlogsgetr0ZPluginrrrrrs