From d2f680d65f59708eaa0140365bdf5cf25c4a3be0 Mon Sep 17 00:00:00 2001 From: Jan Vcelak Date: Fri, 11 May 2012 16:14:02 +0200 Subject: [PATCH] video plugin: support for multiple devices, use new commands interface --- tuned/plugins/plugin_video.py | 67 ++++++++++++++--------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/tuned/plugins/plugin_video.py b/tuned/plugins/plugin_video.py index edb9e99..939736b 100644 --- a/tuned/plugins/plugin_video.py +++ b/tuned/plugins/plugin_video.py @@ -2,68 +2,55 @@ import tuned.plugins import tuned.logs import tuned.monitors from tuned.utils.commands import * +import glob import os import struct -import glob log = tuned.logs.get() -STORAGE_CATEGORY = "video" - class VideoPlugin(tuned.plugins.Plugin): """ + Plugin for tuning powersave options for some graphic cards. """ - def __init__(self, devices, options): - """ - """ - super(self.__class__, self).__init__(devices, options) - - if not tuned.utils.storage.Storage.get_instance().data.has_key(STORAGE_CATEGORY): - tuned.utils.storage.Storage.get_instance().data[STORAGE_CATEGORY] = {} - - self.register_command("radeon_powersave", - self._set_radeon_powersave, - self._revert_radeon_powersave) - @classmethod def _get_default_options(cls): return { - "dynamic_tuning" : "0", + "dynamic_tuning" : "0", "radeon_powersave" : None, } + @classmethod + def tunable_devices(cls): + # radeon_powersave is currently the only condition + config_files = glob.glob("/sys/class/drm/*/device/power_method") + available = set(map(lambda name: name.split("/")[4], config_files)) + return available + def cleanup(self): pass def update_tuning(self): pass - @command(STORAGE_CATEGORY, "radeon_powersave") - def _set_radeon_powersave(self, value): - if not os.path.exists("/sys/class/drm/card0/device/power_method"): - return + def _radeon_powersave_files(self, device): + return { + "method" : "/sys/class/drm/%s/device/power_method" % device, + "profile": "/sys/class/drm/%s/device/power_profile" % device, + ] - old_values = [] + @command_set("radeon_powersave", per_device=True) + def _set_radeon_powersave(self, value, device): + sys_files = self._radeon_powersave_files(device) if value in ["default", "auto", "low", "med", "high"]: - power_profile = tuned.utils.commands.read_file("/sys/class/drm/card0/device/power_profile") - power_method = tuned.utils.commands.read_file("/sys/class/drm/card0/device/power_method") - old_values = [power_profile, power_method] - - tuned.utils.commands.write_to_file("/sys/class/drm/card0/device/power_method", "profile") - tuned.utils.commands.write_to_file("/sys/class/drm/card0/device/power_profile", value) + tuned.utils.commands.write_to_file(sys_files["method"], "profile") + tuned.utils.commands.write_to_file(sys_files["profile"], value) elif value == "dynpm": - power_profile = tuned.utils.commands.read_file("/sys/class/drm/card0/device/power_profile") - power_method = tuned.utils.commands.read_file("/sys/class/drm/card0/device/power_method") - old_values = [None, power_method] - - tuned.utils.commands.write_to_file("/sys/class/drm/card0/device/power_method", "dynpm") - return old_values + tuned.utils.commands.write_to_file(sys_files["method"], "dynpm") + else: + log.warn("Invalid option for radeon_powersave.") - @command_revert(STORAGE_CATEGORY, "radeon_powersave") - def _revert_radeon_powersave(self, values): - power_profile, power_method = values - - tuned.utils.commands.write_to_file("/sys/class/drm/card0/device/power_method", power_method) - if power_profile: - tuned.utils.commands.write_to_file("/sys/class/drm/card0/device/power_profile", power_profile) + @command_get("radeon_powersave") + def _get_radeon_powersave(self, device): + sys_files = self._radeon_powersave_files(device) + return tuned.utils.commands.read_file(sys_files["profile"])