From d10cc97cbb826099530180450052f90b86cdcac8 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Thu, 10 Oct 2013 15:20:18 +0200 Subject: [PATCH] Remove QoS interface It was added for some workloads, but ill-suited and never really got traction. Using cgroups to manage the resources of particular services (using systemd), or something separate like rtkit is a better bet. --- Makefile.am | 2 +- configure.ac | 1 - doc/Makefile.am | 2 - doc/dbus/Makefile.am | 6 +- doc/upower-docs.xml | 2 - doc/website/index.htm | 1 - libupower-glib/Makefile.am | 2 - libupower-glib/up-qos-item.c | 627 ------------------- libupower-glib/up-qos-item.h | 89 --- libupower-glib/up-types.c | 38 -- libupower-glib/up-types.h | 14 - libupower-glib/upower.h | 1 - po/POTFILES.in | 1 - policy/Makefile.am | 18 - policy/org.freedesktop.upower.qos.policy.in | 59 -- src/Makefile.am | 10 - src/org.freedesktop.UPower.QoS.xml | 331 ---------- src/org.freedesktop.UPower.conf.in | 4 - src/up-main.c | 5 - src/up-qos.c | 641 -------------------- src/up-qos.h | 80 --- src/up-self-test.c | 20 - 22 files changed, 2 insertions(+), 1952 deletions(-) delete mode 100644 libupower-glib/up-qos-item.c delete mode 100644 libupower-glib/up-qos-item.h delete mode 100644 policy/Makefile.am delete mode 100644 policy/org.freedesktop.upower.qos.policy.in delete mode 100644 src/org.freedesktop.UPower.QoS.xml delete mode 100644 src/up-qos.c delete mode 100644 src/up-qos.h diff --git a/Makefile.am b/Makefile.am index a741e68..b2e6693 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} -SUBDIRS = etc libupower-glib src doc tools policy po +SUBDIRS = etc libupower-glib src doc tools po if BACKEND_TYPE_LINUX SUBDIRS += rules diff --git a/configure.ac b/configure.ac index 40f611a..2a88e62 100644 --- a/configure.ac +++ b/configure.ac @@ -250,7 +250,6 @@ doc/Makefile doc/version.xml doc/man/Makefile doc/dbus/Makefile -policy/Makefile rules/Makefile libupower-glib/Makefile libupower-glib/up-version.h diff --git a/doc/Makefile.am b/doc/Makefile.am index 8f01af5..05cfa4f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -60,7 +60,6 @@ content_files = \ man/UPower.xml \ dbus/org.freedesktop.UPower.ref.xml \ dbus/org.freedesktop.UPower.Device.ref.xml \ - dbus/org.freedesktop.UPower.QoS.ref.xml \ dbus/org.freedesktop.UPower.KbdBacklight.ref.xml \ $(NULL) @@ -80,7 +79,6 @@ MAINTAINERCLEANFILES = \ DISTCLEANFILES = \ org.freedesktop.UPower.Device.ref.xml \ org.freedesktop.UPower.KbdBacklight.ref.xml \ - org.freedesktop.UPower.QoS.ref.xml \ org.freedesktop.UPower.ref.xml \ upowerd.xml \ upower.xml \ diff --git a/doc/dbus/Makefile.am b/doc/dbus/Makefile.am index 2061cb9..4ac2710 100644 --- a/doc/dbus/Makefile.am +++ b/doc/dbus/Makefile.am @@ -1,5 +1,5 @@ -all : org.freedesktop.UPower.ref.xml org.freedesktop.UPower.Device.ref.xml org.freedesktop.UPower.QoS.ref.xml org.freedesktop.UPower.KbdBacklight.ref.xml org.freedesktop.UPower.Wakeups.ref.xml +all : org.freedesktop.UPower.ref.xml org.freedesktop.UPower.Device.ref.xml org.freedesktop.UPower.KbdBacklight.ref.xml org.freedesktop.UPower.Wakeups.ref.xml org.freedesktop.UPower.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl echo """" > $@ @@ -9,10 +9,6 @@ org.freedesktop.UPower.Device.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower echo """" > $@ $(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@ -org.freedesktop.UPower.QoS.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.QoS.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl - echo """" > $@ - $(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@ - org.freedesktop.UPower.KbdBacklight.ref.xml : $(top_srcdir)/src/org.freedesktop.UPower.KbdBacklight.xml $(top_srcdir)/doc/dbus/spec-to-docbook.xsl echo """" > $@ $(XSLTPROC) $(top_srcdir)/doc/dbus/spec-to-docbook.xsl $< | tail -n +2 >> $@ diff --git a/doc/upower-docs.xml b/doc/upower-docs.xml index 15b99a3..cc5f890 100644 --- a/doc/upower-docs.xml +++ b/doc/upower-docs.xml @@ -66,7 +66,6 @@ - @@ -80,7 +79,6 @@ - diff --git a/doc/website/index.htm b/doc/website/index.htm index 87f6964..b97414b 100644 --- a/doc/website/index.htm +++ b/doc/website/index.htm @@ -16,7 +16,6 @@ UPower is an abstraction for enumerating power devices, listening to device events and querying history and statistics. Any application or service on the system can access the org.freedesktop.UPower service via the system message bus. -Some operations (such as setting the QoS for the system) are restricted using PolicyKit.

UPower was diff --git a/libupower-glib/Makefile.am b/libupower-glib/Makefile.am index 7444f54..67018d6 100644 --- a/libupower-glib/Makefile.am +++ b/libupower-glib/Makefile.am @@ -23,7 +23,6 @@ libupower_glib_include_HEADERS = \ up-version.h \ up-types.h \ up-device.h \ - up-qos-item.h \ up-wakeup-item.h \ up-stats-item.h \ up-history-item.h \ @@ -34,7 +33,6 @@ libupower_glib_la_SOURCES = \ up-types.c \ up-client.c \ up-wakeups.c \ - up-qos-item.c \ up-wakeup-item.c \ up-stats-item.c \ up-history-item.c \ diff --git a/libupower-glib/up-qos-item.c b/libupower-glib/up-qos-item.c deleted file mode 100644 index 483cd11..0000000 --- a/libupower-glib/up-qos-item.c +++ /dev/null @@ -1,627 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008-2010 Richard Hughes - * - * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/** - * SECTION:up-qos-item - * @short_description: Helper object representing one item of QOS data. - * - * This object represents one item of data which may be returned from the - * daemon in response to a query. - * - * See also: #UpDevice, #UpClient - */ - -#include "config.h" - -#include - -#include "up-qos-item.h" - -static void up_qos_item_class_init (UpQosItemClass *klass); -static void up_qos_item_init (UpQosItem *qos_item); -static void up_qos_item_finalize (GObject *object); - -#define UP_QOS_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UP_TYPE_QOS_ITEM, UpQosItemPrivate)) - -struct UpQosItemPrivate -{ - guint uid; - guint pid; - gchar *sender; - gchar *cmdline; - guint cookie; - guint64 timespec; - gboolean persistent; - UpQosKind type; - gint value; -}; - -enum { - PROP_0, - PROP_UID, - PROP_PID, - PROP_SENDER, - PROP_CMDLINE, - PROP_COOKIE, - PROP_TIMESPEC, - PROP_PERSISTENT, - PROP_TYPE, - PROP_VALUE, - PROP_LAST -}; - -G_DEFINE_TYPE (UpQosItem, up_qos_item, G_TYPE_OBJECT) - - -/** - * up_qos_item_get_uid: - * @qos_item: #UpQosItem - * - * Gets the item uid. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -guint -up_qos_item_get_uid (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT); - return qos_item->priv->uid; -} - -/** - * up_qos_item_set_uid: - * @qos_item: #UpQosItem - * @uid: the new value - * - * Sets the item uid. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_uid (UpQosItem *qos_item, guint uid) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->uid = uid; - g_object_notify (G_OBJECT(qos_item), "uid"); -} - -/** - * up_qos_item_get_pid: - * @qos_item: #UpQosItem - * - * Gets the item pid. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -guint -up_qos_item_get_pid (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT); - return qos_item->priv->pid; -} - -/** - * up_qos_item_set_pid: - * @qos_item: #UpQosItem - * @pid: the new value - * - * Sets the item pid. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_pid (UpQosItem *qos_item, guint pid) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->pid = pid; - g_object_notify (G_OBJECT(qos_item), "pid"); -} - -/** - * up_qos_item_get_sender: - * @qos_item: #UpQosItem - * - * Gets the item sender. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -const gchar * -up_qos_item_get_sender (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), NULL); - return qos_item->priv->sender; -} - -/** - * up_qos_item_set_sender: - * @qos_item: #UpQosItem - * @sender: the new value - * - * Sets the item sender. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_sender (UpQosItem *qos_item, const gchar *sender) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - g_free (qos_item->priv->sender); - qos_item->priv->sender = g_strdup (sender); - g_object_notify (G_OBJECT(qos_item), "sender"); -} - -/** - * up_qos_item_get_cmdline: - * @qos_item: #UpQosItem - * - * Gets the item cmdline. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -const gchar * -up_qos_item_get_cmdline (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), NULL); - return qos_item->priv->cmdline; -} - -/** - * up_qos_item_set_cmdline: - * @qos_item: #UpQosItem - * @cmdline: the new value - * - * Sets the item cmdline. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_cmdline (UpQosItem *qos_item, const gchar *cmdline) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - g_free (qos_item->priv->cmdline); - qos_item->priv->cmdline = g_strdup (cmdline); - g_object_notify (G_OBJECT(qos_item), "cmdline"); -} - -/** - * up_qos_item_get_cookie: - * @qos_item: #UpQosItem - * - * Gets the item cookie. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -guint -up_qos_item_get_cookie (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT); - return qos_item->priv->cookie; -} - -/** - * up_qos_item_set_cookie: - * @qos_item: #UpQosItem - * @cookie: the new value - * - * Sets the item cookie. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_cookie (UpQosItem *qos_item, guint cookie) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->cookie = cookie; - g_object_notify (G_OBJECT(qos_item), "cookie"); -} - -/** - * up_qos_item_get_timespec: - * @qos_item: #UpQosItem - * - * Gets the item timespec. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -guint64 -up_qos_item_get_timespec (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT64); - return qos_item->priv->timespec; -} - -/** - * up_qos_item_set_timespec: - * @qos_item: #UpQosItem - * @timespec: the new value - * - * Sets the item timespec. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_timespec (UpQosItem *qos_item, guint64 timespec) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->timespec = timespec; - g_object_notify (G_OBJECT(qos_item), "timespec"); -} - -/** - * up_qos_item_get_persistent: - * @qos_item: #UpQosItem - * - * Gets the item persistent. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -gboolean -up_qos_item_get_persistent (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT); - return qos_item->priv->persistent; -} - -/** - * up_qos_item_set_persistent: - * @qos_item: #UpQosItem - * @persistent: the new value - * - * Sets the item persistent. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_persistent (UpQosItem *qos_item, gboolean persistent) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->persistent = persistent; - g_object_notify (G_OBJECT(qos_item), "persistent"); -} - -/** - * up_qos_item_get_kind: - * @qos_item: #UpQosItem - * - * Gets the item type. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -UpQosKind -up_qos_item_get_kind (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXUINT); - return qos_item->priv->type; -} - -/** - * up_qos_item_set_kind: - * @qos_item: #UpQosItem - * @type: the new value - * - * Sets the item type. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_kind (UpQosItem *qos_item, UpQosKind type) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->type = type; - g_object_notify (G_OBJECT(qos_item), "type"); -} - -/** - * up_qos_item_get_value: - * @qos_item: #UpQosItem - * - * Gets the item value. - * - * Return value: the value - * - * Since: 0.9.0 - **/ -gint -up_qos_item_get_value (UpQosItem *qos_item) -{ - g_return_val_if_fail (UP_IS_QOS_ITEM (qos_item), G_MAXINT); - return qos_item->priv->value; -} - -/** - * up_qos_item_set_value: - * @qos_item: #UpQosItem - * @value: the new value - * - * Sets the item value. - * - * Since: 0.9.0 - **/ -void -up_qos_item_set_value (UpQosItem *qos_item, gint value) -{ - g_return_if_fail (UP_IS_QOS_ITEM (qos_item)); - qos_item->priv->value = value; - g_object_notify (G_OBJECT(qos_item), "value"); -} - -/** - * up_qos_item_set_property: - **/ -static void -up_qos_item_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -{ - UpQosItem *qos_item = UP_QOS_ITEM (object); - - switch (prop_id) { - case PROP_UID: - qos_item->priv->uid = g_value_get_uint (value); - break; - case PROP_PID: - qos_item->priv->pid = g_value_get_uint (value); - break; - case PROP_SENDER: - g_free (qos_item->priv->sender); - qos_item->priv->sender = g_strdup (g_value_get_string (value)); - break; - case PROP_CMDLINE: - g_free (qos_item->priv->cmdline); - qos_item->priv->cmdline = g_strdup (g_value_get_string (value)); - break; - case PROP_COOKIE: - qos_item->priv->cookie = g_value_get_uint (value); - break; - case PROP_TIMESPEC: - qos_item->priv->timespec = g_value_get_uint64 (value); - break; - case PROP_PERSISTENT: - qos_item->priv->persistent = g_value_get_boolean (value); - break; - case PROP_TYPE: - qos_item->priv->type = g_value_get_uint (value); - break; - case PROP_VALUE: - qos_item->priv->value = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -/** - * up_qos_item_get_property: - **/ -static void -up_qos_item_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -{ - UpQosItem *qos_item = UP_QOS_ITEM (object); - - switch (prop_id) { - case PROP_UID: - g_value_set_uint (value, qos_item->priv->uid); - break; - case PROP_PID: - g_value_set_uint (value, qos_item->priv->pid); - break; - case PROP_SENDER: - g_value_set_string (value, qos_item->priv->sender); - break; - case PROP_CMDLINE: - g_value_set_string (value, qos_item->priv->cmdline); - break; - case PROP_COOKIE: - g_value_set_uint (value, qos_item->priv->cookie); - break; - case PROP_TIMESPEC: - g_value_set_uint64 (value, qos_item->priv->timespec); - break; - case PROP_PERSISTENT: - g_value_set_boolean (value, qos_item->priv->persistent); - break; - case PROP_TYPE: - g_value_set_uint (value, qos_item->priv->type); - break; - case PROP_VALUE: - g_value_set_int (value, qos_item->priv->value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -/** - * up_qos_item_class_init: - * @klass: The UpQosItemClass - **/ -static void -up_qos_item_class_init (UpQosItemClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->finalize = up_qos_item_finalize; - object_class->set_property = up_qos_item_set_property; - object_class->get_property = up_qos_item_get_property; - - /** - * UpQosItem:uid: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_UID, - g_param_spec_uint ("uid", NULL, NULL, - 0, G_MAXUINT, 0, - G_PARAM_READWRITE)); - /** - * UpQosItem:pid: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_PID, - g_param_spec_uint ("pid", NULL, NULL, - 0, G_MAXUINT, 0, - G_PARAM_READWRITE)); - /** - * UpQosItem:sender: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_SENDER, - g_param_spec_string ("sender", NULL, NULL, - NULL, - G_PARAM_READWRITE)); - /** - * UpQosItem:cmdline: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_CMDLINE, - g_param_spec_string ("cmdline", NULL, NULL, - NULL, - G_PARAM_READWRITE)); - /** - * UpQosItem:cookie: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_COOKIE, - g_param_spec_uint ("cookie", NULL, NULL, - 0, G_MAXUINT, 0, - G_PARAM_READWRITE)); - /** - * UpQosItem:timespec: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_TIMESPEC, - g_param_spec_uint64 ("timespec", NULL, NULL, - 0, G_MAXUINT64, 0, - G_PARAM_READWRITE)); - /** - * UpQosItem:persistent: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_PERSISTENT, - g_param_spec_boolean ("persistent", NULL, NULL, - FALSE, - G_PARAM_READWRITE)); - /** - * UpQosItem:type: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_TYPE, - g_param_spec_uint ("type", NULL, NULL, - 0, G_MAXUINT, UP_QOS_KIND_UNKNOWN, - G_PARAM_READWRITE)); - /** - * UpQosItem:value: - * - * Since: 0.9.0 - **/ - g_object_class_install_property (object_class, - PROP_VALUE, - g_param_spec_int ("value", NULL, NULL, - 0, G_MAXINT, 0, - G_PARAM_READWRITE)); - - g_type_class_add_private (klass, sizeof (UpQosItemPrivate)); -} - -/** - * up_qos_item_init: - * @qos_item: This class instance - **/ -static void -up_qos_item_init (UpQosItem *qos_item) -{ - qos_item->priv = UP_QOS_ITEM_GET_PRIVATE (qos_item); - qos_item->priv->value = 0.0f; - qos_item->priv->uid = 0; - qos_item->priv->pid = 0; - qos_item->priv->sender = NULL; - qos_item->priv->cmdline = NULL; - qos_item->priv->cookie = 0; - qos_item->priv->timespec = 0; - qos_item->priv->persistent = FALSE; - qos_item->priv->type = UP_QOS_KIND_UNKNOWN; - qos_item->priv->value = 0; -} - -/** - * up_qos_item_finalize: - * @object: The object to finalize - **/ -static void -up_qos_item_finalize (GObject *object) -{ - UpQosItem *qos_item; - - g_return_if_fail (UP_IS_QOS_ITEM (object)); - - qos_item = UP_QOS_ITEM (object); - - g_free (qos_item->priv->sender); - g_free (qos_item->priv->cmdline); - - G_OBJECT_CLASS (up_qos_item_parent_class)->finalize (object); -} - -/** - * up_qos_item_new: - * - * Return value: a new UpQosItem object. - * - * Since: 0.9.0 - **/ -UpQosItem * -up_qos_item_new (void) -{ - UpQosItem *qos_item; - qos_item = g_object_new (UP_TYPE_QOS_ITEM, NULL); - return UP_QOS_ITEM (qos_item); -} - diff --git a/libupower-glib/up-qos-item.h b/libupower-glib/up-qos-item.h deleted file mode 100644 index 60497c2..0000000 --- a/libupower-glib/up-qos-item.h +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008-2010 Richard Hughes - * - * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if !defined (__UPOWER_H_INSIDE__) && !defined (UP_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __UP_QOS_ITEM_H -#define __UP_QOS_ITEM_H - -#include -#include - -G_BEGIN_DECLS - -#define UP_TYPE_QOS_ITEM (up_qos_item_get_type ()) -#define UP_QOS_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UP_TYPE_QOS_ITEM, UpQosItem)) -#define UP_QOS_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), UP_TYPE_QOS_ITEM, UpQosItemClass)) -#define UP_IS_QOS_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UP_TYPE_QOS_ITEM)) -#define UP_IS_QOS_ITEM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UP_TYPE_QOS_ITEM)) -#define UP_QOS_ITEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UP_TYPE_QOS_ITEM, UpQosItemClass)) - -typedef struct UpQosItemPrivate UpQosItemPrivate; - -typedef struct -{ - GObject parent; - UpQosItemPrivate *priv; -} UpQosItem; - -typedef struct -{ - GObjectClass parent_class; -} UpQosItemClass; - -GType up_qos_item_get_type (void); -UpQosItem *up_qos_item_new (void); - -/* accessors */ -guint up_qos_item_get_uid (UpQosItem *qos_item); -void up_qos_item_set_uid (UpQosItem *qos_item, - guint uid); -guint up_qos_item_get_pid (UpQosItem *qos_item); -void up_qos_item_set_pid (UpQosItem *qos_item, - guint pid); -const gchar *up_qos_item_get_sender (UpQosItem *qos_item); -void up_qos_item_set_sender (UpQosItem *qos_item, - const gchar *sender); -const gchar *up_qos_item_get_cmdline (UpQosItem *qos_item); -void up_qos_item_set_cmdline (UpQosItem *qos_item, - const gchar *cmdline); -guint up_qos_item_get_cookie (UpQosItem *qos_item); -void up_qos_item_set_cookie (UpQosItem *qos_item, - guint cookie); -guint64 up_qos_item_get_timespec (UpQosItem *qos_item); -void up_qos_item_set_timespec (UpQosItem *qos_item, - guint64 timespec); -gboolean up_qos_item_get_persistent (UpQosItem *qos_item); -void up_qos_item_set_persistent (UpQosItem *qos_item, - gboolean persistent); -UpQosKind up_qos_item_get_kind (UpQosItem *qos_item); -void up_qos_item_set_kind (UpQosItem *qos_item, - UpQosKind type); -gint up_qos_item_get_value (UpQosItem *qos_item); -void up_qos_item_set_value (UpQosItem *qos_item, - gint value); - -G_END_DECLS - -#endif /* __UP_QOS_ITEM_H */ - diff --git a/libupower-glib/up-types.c b/libupower-glib/up-types.c index 4c063fb..c7d6e1c 100644 --- a/libupower-glib/up-types.c +++ b/libupower-glib/up-types.c @@ -232,41 +232,3 @@ up_device_technology_from_string (const gchar *technology) return UP_DEVICE_TECHNOLOGY_NICKEL_METAL_HYDRIDE; return UP_DEVICE_TECHNOLOGY_UNKNOWN; } - -/** - * up_qos_kind_to_string: - * - * Converts a #UpQosKind to a string. - * - * Return value: identifier string - * - * Since: 0.9.0 - **/ -const gchar * -up_qos_kind_to_string (UpQosKind type) -{ - if (type == UP_QOS_KIND_NETWORK) - return "network"; - if (type == UP_QOS_KIND_CPU_DMA) - return "cpu_dma"; - return NULL; -} - -/** - * up_qos_kind_from_string: - * - * Converts a string to a #UpQosKind. - * - * Return value: enumerated value - * - * Since: 0.9.0 - **/ -UpQosKind -up_qos_kind_from_string (const gchar *type) -{ - if (g_strcmp0 (type, "network") == 0) - return UP_QOS_KIND_NETWORK; - if (g_strcmp0 (type, "cpu_dma") == 0) - return UP_QOS_KIND_CPU_DMA; - return UP_QOS_KIND_UNKNOWN; -} diff --git a/libupower-glib/up-types.h b/libupower-glib/up-types.h index 01fd0b4..e503f49 100644 --- a/libupower-glib/up-types.h +++ b/libupower-glib/up-types.h @@ -83,26 +83,12 @@ typedef enum { UP_DEVICE_TECHNOLOGY_LAST } UpDeviceTechnology; -/** - * UpQosKind: - * - * The type of QOS request. - **/ -typedef enum { - UP_QOS_KIND_UNKNOWN, - UP_QOS_KIND_NETWORK, - UP_QOS_KIND_CPU_DMA, - UP_QOS_KIND_LAST -} UpQosKind; - const gchar *up_device_kind_to_string (UpDeviceKind type_enum); const gchar *up_device_state_to_string (UpDeviceState state_enum); const gchar *up_device_technology_to_string (UpDeviceTechnology technology_enum); UpDeviceKind up_device_kind_from_string (const gchar *type); UpDeviceState up_device_state_from_string (const gchar *state); UpDeviceTechnology up_device_technology_from_string (const gchar *technology); -const gchar *up_qos_kind_to_string (UpQosKind type); -UpQosKind up_qos_kind_from_string (const gchar *type); G_END_DECLS diff --git a/libupower-glib/upower.h b/libupower-glib/upower.h index 32c80d6..a28f7a2 100644 --- a/libupower-glib/upower.h +++ b/libupower-glib/upower.h @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include diff --git a/po/POTFILES.in b/po/POTFILES.in index 63aefc5..b3a3034 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,6 +1,5 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. [encoding: UTF-8] -policy/org.freedesktop.upower.qos.policy.in src/up-main.c tools/up-tool.c diff --git a/policy/Makefile.am b/policy/Makefile.am deleted file mode 100644 index ef39939..0000000 --- a/policy/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -polkit_policydir = $(datadir)/polkit-1/actions -polkit_policy_DATA = \ - org.freedesktop.upower.qos.policy - -# You will need a recent intltool or the patch from this bug -# http://bugzilla.gnome.org/show_bug.cgi?id=462312 -@INTLTOOL_POLICY_RULE@ - -EXTRA_DIST = \ - org.freedesktop.upower.qos.policy.in - -DISTCLEANFILES = \ - org.freedesktop.upower.qos.policy - -clean-local : - rm -f *~ - --include $(top_srcdir)/git.mk diff --git a/policy/org.freedesktop.upower.qos.policy.in b/policy/org.freedesktop.upower.qos.policy.in deleted file mode 100644 index fdc7b90..0000000 --- a/policy/org.freedesktop.upower.qos.policy.in +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - The UPower Project - http://upower.freedesktop.org/ - system-suspend - - - <_description>Set the required latency of an application - <_message>Authentication is required to set the required latency of an application - - no - yes - - - - - <_description>Set a persistent latency setting - <_message>Authentication is required to set a persistent latency setting - - no - yes - - - - - <_description>Set administrator settings for latency control - <_message>Authentication is required to set administrator settings for latency control - - no - auth_admin - - - - - <_description>Cancel a latency request - <_message>Authentication is required to cancel a latency request - - no - auth_admin - - - - diff --git a/src/Makefile.am b/src/Makefile.am index affda04..0bbd20f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,7 +29,6 @@ UPOWER_LIBS = $(top_builddir)/libupower-glib/libupower-glib.la BUILT_SOURCES = \ up-daemon-glue.h \ up-device-glue.h \ - up-qos-glue.h \ up-kbd-backlight-glue.h \ up-wakeups-glue.h \ up-marshal.h \ @@ -47,9 +46,6 @@ up-daemon-glue.h: org.freedesktop.UPower.xml Makefile.am up-device-glue.h: org.freedesktop.UPower.Device.xml Makefile.am dbus-binding-tool --prefix=up_device --mode=glib-server --output=up-device-glue.h $(srcdir)/org.freedesktop.UPower.Device.xml -up-qos-glue.h: org.freedesktop.UPower.QoS.xml Makefile.am - dbus-binding-tool --prefix=up_qos --mode=glib-server --output=up-qos-glue.h $(srcdir)/org.freedesktop.UPower.QoS.xml - up-kbd-backlight-glue.h: org.freedesktop.UPower.KbdBacklight.xml Makefile.am dbus-binding-tool --prefix=up_kbd_backlight --mode=glib-server --output=up-kbd-backlight-glue.h $(srcdir)/org.freedesktop.UPower.KbdBacklight.xml @@ -62,7 +58,6 @@ dbusifdir = $(datadir)/dbus-1/interfaces dbusif_DATA = \ org.freedesktop.UPower.xml \ org.freedesktop.UPower.Device.xml \ - org.freedesktop.UPower.QoS.xml \ org.freedesktop.UPower.KbdBacklight.xml \ org.freedesktop.UPower.Wakeups.xml @@ -75,8 +70,6 @@ upowerd_SOURCES = \ up-device.c \ up-device-list.h \ up-device-list.c \ - up-qos.h \ - up-qos.c \ up-config.h \ up-config.c \ up-kbd-backlight.h \ @@ -157,8 +150,6 @@ up_self_test_SOURCES = \ up-device.c \ up-device-list.h \ up-device-list.c \ - up-qos.h \ - up-qos.c \ up-kbd-backlight.h \ up-kbd-backlight.c \ up-wakeups.h \ @@ -223,7 +214,6 @@ MAINTAINERCLEANFILES = \ EXTRA_DIST = \ org.freedesktop.UPower.xml \ org.freedesktop.UPower.Device.xml \ - org.freedesktop.UPower.QoS.xml \ org.freedesktop.UPower.KbdBacklight.xml \ org.freedesktop.UPower.Wakeups.xml \ up-marshal.list \ diff --git a/src/org.freedesktop.UPower.QoS.xml b/src/org.freedesktop.UPower.QoS.xml deleted file mode 100644 index d3113f1..0000000 --- a/src/org.freedesktop.UPower.QoS.xml +++ /dev/null @@ -1,331 +0,0 @@ - -]> - - - - - - org.freedesktop.UPower.QoS is a DBus interface implemented - by UPower. - It allows applications to request latencies, for example a couple of seconds - for an IM application, or a few hundred microseconds for a multiplayer game. - - - Use cases: - - - - - I want my IM application to request 0.5s latency for messages. - - - I'm running an OpenGL simulation and want maximum performance, - even when on battery power. - - - I'm running an SQL server for a credit card company, and want the - server to request low latency CPU and network as any delay costs money. - - - I'm an admin, and want to change the power consumption vs. latency - from cron scripts so it uses high latency during the night for - maximum power saving, and low latency during business hours. - - - I want high throughput when copying files, but want low throughput - for downloading updates in the background. - - - I want my power manager to set all latencies to lowest when on - AC power. - - - I don't want my users messing with latency settings. - - - I'm and admin and I want to be able to override all latency - settings on my machines. - - - - - Why don't applications use the PMQoS interface directly? - By providing a framework we can override requests by policy, and also - control requests from random services. - You also can't set latencies unless you're the root user, which is not - suitable for the desktop use case. - - - Of course, you can do if you really want, but then you loose the - benefits of the query interface and the policy override, - and have to run your application as root. - - - - - - - - - - - The type of latency to control, cpu_dma or - network. - - - - - - - The value, in microseconds or kilobits per second. - The value -1 means unset and the default is used. - - - - - - - Set the minimum acceptable latency of the system. - Setting this value tells the system to not attempt latencies below this setting. - This may be useful in a data center or server room, when you want to override the - latency requests from applications. - This may be required if the server room is operating outside a standard thermal - or power envelope, and an override is required. - You do not have to use this method during normal operation. - - - Callers need the org.freedesktop.upower.qos.set-minimum-latency authorization - - if an error occured while setting the latency - - - - - - - - - - - The type of latency to control, cpu_dma or - network. - - - - - - - The value, in microseconds or kilobits per second. - The value -1 means remove all latency requirements. - - - - - - - If the latency request outlives the connection. - When the application issuing the request disconnects from the system - bus, the latency request is automatically cleaned up. - By setting this flag to TRUE, the request is not cleaned up when - the client disconnects, and the cookie is preserved acress reboots. - - - - - - - A cookie that identifies the request. This allows an application or - service to request multiple latency settings from one process, and for - other processes to cancel requests. - - - - - - - Set the required latency of an application or service. - - - - Callers need the - org.freedesktop.upower.qos.request-latency-persistent - authorization if persistent is TRUE, or - org.freedesktop.upower.qos.request-latency otherwise. - - - if an error occured while setting the latency - - - - - - - - - - - A cookie that identifies the request. This allows an application or - serivice to request multiple latency settings from one process. - - - - - - - Cancel the latency request from the application or service. - - - - Callers need the - org.freedesktop.upower.qos.cancel-request - authorization if they were not the one issuing the request. - - - if an error occured while clearing the latency - - - - - - - - - - The type of latency to return, cpu_dma or - network. - - - - - - - The value, in microseconds or kilobits per second. - The value -1 means not set or unavailable. - - - - - - - Get the lowest latency state on the system at the current time. - - - - if an error occured while getting the latency - - - - - - - - - - The type of latency that changed, cpu_dma or - network. - - - - - - - The value, in microseconds or kilobits per second. - The value -1 means not set or unavailable. - - - - - - - Some latency value has changed. - - - - - - - - - - - The request lists, where each application can request different - latency types. - - - cookie - - The random cookie that identifies the request. - - - - uid - - The user ID that issued the request. - - - - pid - - The process ID of the application. - - - - exec - - The executable that issued the request. - - - - timespec - - The number of seconds since the epoch. - - - - persistent - - If the request is persistent and outlives the connection lifetime. - - - - type - - The type of the request, cpu_dma or - network. - - - - value - - The value, in microseconds or kilobits per second. - - - - - - - - - Gets all the system requests from all services and applications. - - - - - - - - - - - The latency requests on the system have changed. - - - - - - - - diff --git a/src/org.freedesktop.UPower.conf.in b/src/org.freedesktop.UPower.conf.in index fc2b604..5a6c660 100644 --- a/src/org.freedesktop.UPower.conf.in +++ b/src/org.freedesktop.UPower.conf.in @@ -19,8 +19,6 @@ send_interface="org.freedesktop.DBus.Properties"/> - - #include "up-daemon.h" -#include "up-qos.h" #include "up-kbd-backlight.h" #include "up-wakeups.h" @@ -180,7 +179,6 @@ main (gint argc, gchar **argv) { GError *error = NULL; UpDaemon *daemon = NULL; - UpQos *qos = NULL; UpKbdBacklight *kbd_backlight = NULL; UpWakeups *wakeups = NULL; GOptionContext *context; @@ -284,7 +282,6 @@ main (gint argc, gchar **argv) g_debug ("Starting upowerd version %s", PACKAGE_VERSION); - qos = up_qos_new (); kbd_backlight = up_kbd_backlight_new (); wakeups = up_wakeups_new (); daemon = up_daemon_new (); @@ -311,8 +308,6 @@ main (gint argc, gchar **argv) g_main_loop_run (loop); retval = 0; out: - if (qos != NULL) - g_object_unref (qos); if (kbd_backlight != NULL) g_object_unref (kbd_backlight); if (wakeups != NULL) diff --git a/src/up-qos.c b/src/up-qos.c deleted file mode 100644 index fc72643..0000000 --- a/src/up-qos.c +++ /dev/null @@ -1,641 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Richard Hughes - * - * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "up-qos.h" -#include "up-marshal.h" -#include "up-daemon.h" -#include "up-polkit.h" -#include "up-qos-item.h" -#include "up-qos-glue.h" -#include "up-types.h" - -static void up_qos_finalize (GObject *object); - -#define UP_QOS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UP_TYPE_QOS, UpQosPrivate)) - -#define UP_QOS_REQUESTS_STRUCT_TYPE (dbus_g_type_get_struct ("GValueArray", \ - G_TYPE_UINT, \ - G_TYPE_UINT, \ - G_TYPE_UINT, \ - G_TYPE_STRING, \ - G_TYPE_UINT64, \ - G_TYPE_BOOLEAN, \ - G_TYPE_STRING, \ - G_TYPE_INT, \ - G_TYPE_INVALID)) - -struct UpQosPrivate -{ - GPtrArray *data; - gint fd[UP_QOS_KIND_LAST]; - gint last[UP_QOS_KIND_LAST]; - gint minimum[UP_QOS_KIND_LAST]; - UpPolkit *polkit; - DBusGConnection *connection; - DBusGProxy *proxy; -}; - -enum { - LATENCY_CHANGED, - REQUESTS_CHANGED, - LAST_SIGNAL -}; - -static guint signals [LAST_SIGNAL] = { 0 }; - -G_DEFINE_TYPE (UpQos, up_qos, G_TYPE_OBJECT) - -/** - * up_qos_find_from_cookie: - **/ -static UpQosItem * -up_qos_find_from_cookie (UpQos *qos, guint32 cookie) -{ - guint i; - GPtrArray *data; - UpQosItem *item; - - /* search list */ - data = qos->priv->data; - for (i=0; ilen; i++) { - item = g_ptr_array_index (data, i); - if (up_qos_item_get_cookie (item) == cookie) - return item; - } - - /* nothing found */ - return NULL; -} - -/** - * up_qos_generate_cookie: - * - * Return value: a random cookie not already allocated - **/ -static guint32 -up_qos_generate_cookie (UpQos *qos) -{ - guint32 cookie; - - /* iterate until we have a unique cookie */ - do { - cookie = (guint32) g_random_int_range (1, G_MAXINT32); - } while (up_qos_find_from_cookie (qos, cookie) != NULL); - - return cookie; -} - -/** - * up_qos_get_lowest: - **/ -static gint -up_qos_get_lowest (UpQos *qos, UpQosKind type) -{ - guint i; - gint lowest = G_MAXINT; - GPtrArray *data; - UpQosItem *item; - - /* find lowest */ - data = qos->priv->data; - for (i=0; ilen; i++) { - item = g_ptr_array_index (data, i); - if (up_qos_item_get_kind (item) == type && - up_qos_item_get_value (item) > 0 && - up_qos_item_get_value (item) < lowest) - lowest = up_qos_item_get_value (item); - } - - /* over-ride */ - if (lowest < qos->priv->minimum[type]) { - g_debug ("minium override from %i to %i", lowest, qos->priv->minimum[type]); - lowest = qos->priv->minimum[type]; - } - - /* no requests */ - if (lowest == G_MAXINT) - lowest = -1; - - return lowest; -} - -/** - * up_qos_latency_write: - **/ -static gboolean -up_qos_latency_write (UpQos *qos, UpQosKind type, gint value) -{ - gchar *text = NULL; - gint retval; - gint length; - gboolean ret = TRUE; - - /* write new values to pm-qos */ - if (qos->priv->fd[type] < 0) { - g_warning ("cannot write to pm-qos as file not open"); - ret = FALSE; - goto out; - } - - /* convert to text */ - text = g_strdup_printf ("%i", value); - length = strlen (text); - - /* write to device file */ - retval = write (qos->priv->fd[type], text, length); - if (retval != length) { - g_warning ("writing '%s' to device failed", text); - ret = FALSE; - goto out; - } -out: - g_free (text); - return ret; -} - -/** - * up_qos_latency_perhaps_changed: - **/ -static gboolean -up_qos_latency_perhaps_changed (UpQos *qos, UpQosKind type) -{ - gint lowest; - gint *last; - - /* re-find the lowest value */ - lowest = up_qos_get_lowest (qos, type); - - /* find the last value */ - last = &qos->priv->last[type]; - - /* same value? */ - if (*last == lowest) - return FALSE; - - /* write to file */ - up_qos_latency_write (qos, type, lowest); - - /* emit signal */ - g_signal_emit (qos, signals [LATENCY_CHANGED], 0, up_qos_kind_to_string (type), lowest); - *last = lowest; - return TRUE; -} - -/** - * up_qos_get_cmdline: - **/ -static gchar * -up_qos_get_cmdline (gint pid) -{ - gboolean ret; - gchar *filename = NULL; - gchar *cmdline = NULL; - GError *error = NULL; - - /* get command line from proc */ - filename = g_strdup_printf ("/proc/%i/cmdline", pid); - ret = g_file_get_contents (filename, &cmdline, NULL, &error); - if (!ret) { - g_warning ("failed to get cmdline: %s", error->message); - g_error_free (error); - goto out; - } -out: - g_free (filename); - return cmdline; -} - -/** - * up_qos_request_latency: - * - * Return value: a new random cookie - **/ -void -up_qos_request_latency (UpQos *qos, const gchar *type_text, gint value, gboolean persistent, DBusGMethodInvocation *context) -{ - UpQosItem *item; - gchar *sender = NULL; - const gchar *auth; - gchar *cmdline = NULL; - GError *error; - guint uid; - gint pid; - PolkitSubject *subject = NULL; - gboolean retval; - UpQosKind type; - - /* get correct data */ - type = up_qos_kind_from_string (type_text); - if (type == UP_QOS_KIND_UNKNOWN) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "type invalid: %s", type_text); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* as we are async, we can get the sender */ - sender = dbus_g_method_get_sender (context); - if (sender == NULL) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "no DBUS sender"); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* get the subject */ - subject = up_polkit_get_subject (qos->priv->polkit, context); - if (subject == NULL) - goto out; - - /* check auth */ - if (persistent) - auth = "org.freedesktop.upower.qos.request-latency-persistent"; - else - auth = "org.freedesktop.upower.qos.request-latency"; - if (!up_polkit_check_auth (qos->priv->polkit, subject, auth, context)) - goto out; - - /* get uid */ - retval = up_polkit_get_uid (qos->priv->polkit, subject, &uid); - if (!retval) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get UID"); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* get pid */ - retval = up_polkit_get_pid (qos->priv->polkit, subject, &pid); - if (!retval) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get PID"); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* get command line */ - cmdline = up_qos_get_cmdline (pid); - if (cmdline == NULL) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "cannot get cmdline"); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* seems okay, add to list */ - item = up_qos_item_new (); - up_qos_item_set_cookie (item, up_qos_generate_cookie (qos)); - up_qos_item_set_sender (item, sender); - up_qos_item_set_value (item, value); - up_qos_item_set_uid (item, uid); - up_qos_item_set_pid (item, pid); - up_qos_item_set_cmdline (item, cmdline); - up_qos_item_set_persistent (item, persistent); - up_qos_item_set_kind (item, type); - g_ptr_array_add (qos->priv->data, item); - - g_debug ("Recieved Qos from '%s' (%i:%i)' saving as #%i", - up_qos_item_get_sender (item), - up_qos_item_get_value (item), - up_qos_item_get_persistent (item), - up_qos_item_get_cookie (item)); - - /* TODO: if persistent add to datadase */ - - /* only emit event on the first one */ - up_qos_latency_perhaps_changed (qos, type); - dbus_g_method_return (context, up_qos_item_get_cookie (item)); -out: - if (subject != NULL) - g_object_unref (subject); - g_free (sender); - g_free (cmdline); -} - -/** - * up_qos_cancel_request: - * - * Removes a cookie and associated data from the UpQosItem struct. - **/ -void -up_qos_cancel_request (UpQos *qos, guint cookie, DBusGMethodInvocation *context) -{ - UpQosItem *item; - GError *error; - gchar *sender = NULL; - PolkitSubject *subject = NULL; - UpQosKind item_kind; - - /* find the correct cookie */ - item = up_qos_find_from_cookie (qos, cookie); - if (item == NULL) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, - "Cannot find request for #%i", cookie); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* get the sender? */ - sender = dbus_g_method_get_sender (context); - if (sender == NULL) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "no DBUS sender"); - dbus_g_method_return_error (context, error); - g_error_free (error); - goto out; - } - - /* are we not the sender? */ - if (g_strcmp0 (sender, up_qos_item_get_sender (item)) != 0) { - subject = up_polkit_get_subject (qos->priv->polkit, context); - if (subject == NULL) - goto out; - if (!up_polkit_check_auth (qos->priv->polkit, subject, "org.freedesktop.upower.qos.cancel-request", context)) - goto out; - } - - g_debug ("Clear #%i", cookie); - - /* remove object from list */ - item_kind = up_qos_item_get_kind (item); - g_ptr_array_remove (qos->priv->data, item); - up_qos_latency_perhaps_changed (qos, item_kind); - - /* TODO: if persistent remove from datadase */ - - g_signal_emit (qos, signals [REQUESTS_CHANGED], 0); - - dbus_g_method_return (context, NULL); -out: - if (subject != NULL) - g_object_unref (subject); - g_free (sender); -} - -/** - * up_qos_get_latency: - * - * Gets the current latency - **/ -gboolean -up_qos_get_latency (UpQos *qos, const gchar *type_text, gint *value, GError **error) -{ - UpQosKind type; - - /* get correct data */ - type = up_qos_kind_from_string (type_text); - if (type == UP_QOS_KIND_UNKNOWN) { - g_set_error (error, UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "type invalid: %s", type_text); - return FALSE; - } - - /* get the lowest value for this type */ - *value = up_qos_get_lowest (qos, type); - return TRUE; -} - -/** - * up_qos_set_minimum_latency: - **/ -void -up_qos_set_minimum_latency (UpQos *qos, const gchar *type_text, gint value, DBusGMethodInvocation *context) -{ - UpQosKind type; - GError *error; - - /* type valid? */ - type = up_qos_kind_from_string (type_text); - if (type == UP_QOS_KIND_UNKNOWN) { - error = g_error_new (UP_DAEMON_ERROR, UP_DAEMON_ERROR_GENERAL, "type invalid: %s", type_text); - dbus_g_method_return_error (context, error); - g_error_free (error); - return; - } - - g_debug ("setting %s minimum to %i", type_text, value); - qos->priv->minimum[type] = value; - - /* may have changed */ - up_qos_latency_perhaps_changed (qos, type); - dbus_g_method_return (context, NULL); -} - -/** - * up_qos_get_latency_requests: - **/ -gboolean -up_qos_get_latency_requests (UpQos *qos, GPtrArray **requests, GError **error) -{ - guint i; - GPtrArray *data; - UpQosItem *item; - - *requests = g_ptr_array_new (); - data = qos->priv->data; - for (i=0; ilen; i++) { - GValue elem = {0}; - - item = g_ptr_array_index (data, i); - g_value_init (&elem, UP_QOS_REQUESTS_STRUCT_TYPE); - g_value_take_boxed (&elem, dbus_g_type_specialized_construct (UP_QOS_REQUESTS_STRUCT_TYPE)); - dbus_g_type_struct_set (&elem, - 0, up_qos_item_get_cookie (item), - 1, up_qos_item_get_uid (item), - 2, up_qos_item_get_pid (item), - 3, up_qos_item_get_cmdline (item), - 4, 0, //up_qos_item_get_timespec (item), - 5, up_qos_item_get_persistent (item), - 6, up_qos_kind_to_string (up_qos_item_get_kind (item)), - 7, up_qos_item_get_value (item), - G_MAXUINT); - g_ptr_array_add (*requests, g_value_get_boxed (&elem)); - } - -// dbus_g_method_return (context, requests); -// g_ptr_array_foreach (*requests, (GFunc) g_value_array_free, NULL); -// g_ptr_array_unref (*requests); - - return TRUE; -} - - -/** - * up_qos_remove_dbus: - **/ -static void -up_qos_remove_dbus (UpQos *qos, const gchar *sender) -{ - guint i; - GPtrArray *data; - UpQosItem *item; - UpQosKind item_kind; - - /* remove *any* senders that match the sender */ - data = qos->priv->data; - for (i=0; ilen; i++) { - item = g_ptr_array_index (data, i); - if (strcmp (up_qos_item_get_sender (item), sender) == 0) { - g_debug ("Auto-revoked idle qos on %s", sender); - item_kind = up_qos_item_get_kind (item); - g_ptr_array_remove (qos->priv->data, item); - up_qos_latency_perhaps_changed (qos, item_kind); - } - } -} - -/** - * up_qos_name_owner_changed_cb: - **/ -static void -up_qos_name_owner_changed_cb (DBusGProxy *proxy, const gchar *name, const gchar *prev, const gchar *new, UpQos *qos) -{ - if (strlen (new) == 0) - up_qos_remove_dbus (qos, name); -} - -/** - * up_qos_class_init: - **/ -static void -up_qos_class_init (UpQosClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->finalize = up_qos_finalize; - - signals [LATENCY_CHANGED] = - g_signal_new ("latency-changed", - G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (UpQosClass, latency_changed), - NULL, NULL, up_marshal_VOID__STRING_INT, - G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_INT); - signals [REQUESTS_CHANGED] = - g_signal_new ("requests-changed", - G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (UpQosClass, requests_changed), - NULL, NULL, g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - /* introspection */ - dbus_g_object_type_install_info (UP_TYPE_QOS, &dbus_glib_up_qos_object_info); - - g_type_class_add_private (klass, sizeof (UpQosPrivate)); -} - -/** - * up_qos_init: - **/ -static void -up_qos_init (UpQos *qos) -{ - guint i; - GError *error = NULL; - - qos->priv = UP_QOS_GET_PRIVATE (qos); - qos->priv->polkit = up_polkit_new (); - qos->priv->data = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); - /* TODO: need to load persistent values */ - - /* setup lowest */ - for (i=0; ipriv->last[i] = up_qos_get_lowest (qos, i); - - /* setup minimum */ - for (i=0; ipriv->minimum[i] = -1; - - qos->priv->fd[UP_QOS_KIND_CPU_DMA] = open ("/dev/cpu_dma_latency", O_WRONLY); - if (qos->priv->fd[UP_QOS_KIND_CPU_DMA] < 0) - g_debug ("cannot open cpu_dma device file"); - qos->priv->fd[UP_QOS_KIND_NETWORK] = open ("/dev/network_latency", O_WRONLY); - if (qos->priv->fd[UP_QOS_KIND_NETWORK] < 0) - g_debug ("cannot open network device file"); - - qos->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); - if (error != NULL) { - g_warning ("Cannot connect to bus: %s", error->message); - g_error_free (error); - return; - } - - /* register on the bus */ - dbus_g_connection_register_g_object (qos->priv->connection, "/org/freedesktop/UPower/Policy", G_OBJECT (qos)); - - /* watch NOC */ - qos->priv->proxy = dbus_g_proxy_new_for_name_owner (qos->priv->connection, DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, NULL); - dbus_g_proxy_add_signal (qos->priv->proxy, "NameOwnerChanged", - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID); - dbus_g_proxy_connect_signal (qos->priv->proxy, "NameOwnerChanged", - G_CALLBACK (up_qos_name_owner_changed_cb), qos, NULL); -} - -/** - * up_qos_finalize: - **/ -static void -up_qos_finalize (GObject *object) -{ - UpQos *qos; - guint i; - - g_return_if_fail (object != NULL); - g_return_if_fail (UP_IS_QOS (object)); - - qos = UP_QOS (object); - qos->priv = UP_QOS_GET_PRIVATE (qos); - - /* close files */ - for (i=0; ipriv->fd[i] > 0) - close (qos->priv->fd[i]); - } - g_ptr_array_unref (qos->priv->data); - g_object_unref (qos->priv->proxy); - - g_object_unref (qos->priv->polkit); - - G_OBJECT_CLASS (up_qos_parent_class)->finalize (object); -} - -/** - * up_qos_new: - **/ -UpQos * -up_qos_new (void) -{ - UpQos *qos; - qos = g_object_new (UP_TYPE_QOS, NULL); - return UP_QOS (qos); -} - diff --git a/src/up-qos.h b/src/up-qos.h deleted file mode 100644 index 8bbc340..0000000 --- a/src/up-qos.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Richard Hughes - * - * Licensed under the GNU General Public License Version 2 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef __UP_QOS_H -#define __UP_QOS_H - -#include -#include - -G_BEGIN_DECLS - -#define UP_TYPE_QOS (up_qos_get_type ()) -#define UP_QOS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), UP_TYPE_QOS, UpQos)) -#define UP_QOS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), UP_TYPE_QOS, UpQosClass)) -#define UP_IS_QOS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), UP_TYPE_QOS)) -#define UP_IS_QOS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UP_TYPE_QOS)) -#define UP_QOS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UP_TYPE_QOS, UpQosClass)) - -typedef struct UpQosPrivate UpQosPrivate; - -typedef struct -{ - GObject parent; - UpQosPrivate *priv; -} UpQos; - -typedef struct -{ - GObjectClass parent_class; - void (* latency_changed) (UpQos *qos, - const gchar *type, - gint value); - void (* requests_changed) (UpQos *qos); -} UpQosClass; - -UpQos *up_qos_new (void); -GType up_qos_get_type (void); -void up_qos_test (gpointer user_data); - -void up_qos_request_latency (UpQos *qos, - const gchar *type, - gint value, - gboolean persistent, - DBusGMethodInvocation *context); -void up_qos_cancel_request (UpQos *qos, - guint32 cookie, - DBusGMethodInvocation *context); -void up_qos_set_minimum_latency (UpQos *qos, - const gchar *type, - gint value, - DBusGMethodInvocation *context); -gboolean up_qos_get_latency (UpQos *qos, - const gchar *type, - gint *value, - GError **error); -gboolean up_qos_get_latency_requests (UpQos *qos, - GPtrArray **requests, - GError **error); - -G_END_DECLS - -#endif /* __UP_QOS_H */ diff --git a/src/up-self-test.c b/src/up-self-test.c index 1a0595d..ecf1ff9 100644 --- a/src/up-self-test.c +++ b/src/up-self-test.c @@ -33,7 +33,6 @@ #include "up-history.h" #include "up-native.h" #include "up-polkit.h" -#include "up-qos.h" #include "up-wakeups.h" gchar *history_dir = NULL; @@ -300,24 +299,6 @@ up_test_polkit_func (void) g_object_unref (polkit); } -static void -up_test_qos_func (void) -{ - UpQos *qos; - - /* needs polkit, which only listens to the system bus */ - if (!g_file_test (DBUS_SYSTEM_SOCKET, G_FILE_TEST_EXISTS)) { - puts("No system D-BUS running, skipping test"); - return; - } - - qos = up_qos_new (); - g_assert (qos != NULL); - - /* unref */ - g_object_unref (qos); -} - static void up_test_wakeups_func (void) { @@ -351,7 +332,6 @@ main (int argc, char **argv) g_test_add_func ("/power/history", up_test_history_func); g_test_add_func ("/power/native", up_test_native_func); g_test_add_func ("/power/polkit", up_test_polkit_func); - g_test_add_func ("/power/qos", up_test_qos_func); g_test_add_func ("/power/wakeups", up_test_wakeups_func); g_test_add_func ("/power/daemon", up_test_daemon_func);