--- indicator-cpufreq/bin/indicator-cpufreq-selector 2014-12-27 02:48:58.330816000 +0900
+++ indicator-cpufreq/bin/indicator-cpufreq-selector 2014-12-27 02:25:45.903998358 +0900
@@ -21,6 +21,8 @@
import dbus.service
import dbus.mainloop.glib
+import subprocess
+
from indicator_cpufreq import cpufreq
class PermissionDeniedByPolicy(dbus.DBusException):
@@ -42,6 +44,15 @@
self._package_operation_in_progress = False
@dbus.service.method(dbus_interface='com.ubuntu.IndicatorCpufreqSelector',
+ in_signature='as',
+ out_signature='',
+ sender_keyword='sender',
+ connection_keyword='conn')
+ def SetThrottle(self, throttle, sender=None, conn=None):
+ self._check_polkit_privilege(sender, conn, 'com.ubuntu.indicatorcpufreqselector.setthrottle')
+ error = subprocess.Popen(["/bin/sh", "throttle", throttle])
+
+ @dbus.service.method(dbus_interface='com.ubuntu.IndicatorCpufreqSelector',
in_signature='auu',
out_signature='',
sender_keyword='sender',
@@ -61,6 +72,33 @@
for cpu in cpus:
error = cpufreq.modify_policy_governor(cpu, governor)
+ @dbus.service.method(dbus_interface='com.ubuntu.IndicatorCpufreqSelector',
+ in_signature='as',
+ out_signature='',
+ sender_keyword='sender',
+ connection_keyword='conn')
+ def SetPSTurbo(self, psturbo, sender=None, conn=None):
+ self._check_polkit_privilege(sender, conn, 'com.ubuntu.indicatorcpufreqselector.setpsturbo')
+ error = subprocess.Popen(["/bin/sh", "throttle", psturbo])
+
+ @dbus.service.method(dbus_interface='com.ubuntu.IndicatorCpufreqSelector',
+ in_signature='as',
+ out_signature='',
+ sender_keyword='sender',
+ connection_keyword='conn')
+ def SetHyperthreads(self, hyperthreads, sender=None, conn=None):
+ self._check_polkit_privilege(sender, conn, 'com.ubuntu.indicatorcpufreqselector.sethyperthreads')
+ error = subprocess.Popen(["/bin/sh", "throttle", hyperthreads])
+
+ @dbus.service.method(dbus_interface='com.ubuntu.IndicatorCpufreqSelector',
+ in_signature='as',
+ out_signature='',
+ sender_keyword='sender',
+ connection_keyword='conn')
+ def SetGPUThrottle(self, gputhrottle, sender=None, conn=None):
+ self._check_polkit_privilege(sender, conn, 'com.ubuntu.indicatorcpufreqselector.setgputhrottle')
+ error = subprocess.Popen(["/bin/sh", "throttle", gputhrottle])
+
def _check_polkit_privilege(self, sender, conn, privilege):
'''Verify that sender has a given PolicyKit privilege.
--- indicator-cpufreq/indicator_cpufreq/com.ubuntu.indicatorcpufreq.policy.in 2014-12-27 02:48:58.330816000 +0900
+++ indicator-cpufreq/indicator_cpufreq/com.ubuntu.indicatorcpufreq.policy.in 2014-12-27 02:29:19.809678757 +0900
@@ -13,13 +13,55 @@
https://launchpad.net/indicator-cpufreq
indicator-cpufreq
+
+ <_description>Change device powersaving settings
+ <_message>System policy prevents you from changing system throttle.
+
+
+ no
+ yes
+
+
+
<_description>Change CPU frequency scaling
<_message>System policy prevents you from changing CPU frequency scaling.
no
- auth_admin_keep
+ yes
+
+
+
+
+ <_description>Change Intel P-State Turbo settings
+ <_message>System policy prevents you from changing P-State Turbo.
+
+
+ no
+ yes
+
+
+
+
+ <_description>Change hyperthreading settings
+ <_message>System policy prevents you from changing hyperthreading.
+
+
+ no
+ yes
+
+
+ <_description>Change GPU throttle settings
+ <_message>System policy prevents you from changing GPU throttle.
+
+
+ no
+ yes
+
+
+
+
--- indicator-cpufreq/indicator_cpufreq/indicator.py 2015-09-10 14:46:45.814511000 +0900
+++ indicator-cpufreq/indicator_cpufreq/indicator.py 2015-09-10 14:46:45.989929097 +0900
@@ -29,6 +29,10 @@
from gettext import gettext as _
#gettext.textdomain('indicator-cpufreq')
+
+def readable_throttle(t):
+ return t
+
def readable_frequency(f):
# temp hack for properly displaying intel turbo mode (actual freq + 1000kHz)
label = _("%s GHz") % locale.format(_("%.2f"), f / 1.0e6)
@@ -50,6 +54,15 @@
else:
return g
+def readable_psturbo(t):
+ return t
+
+def readable_hyperthreads(h):
+ return h
+
+def readable_gputhrottles(gt):
+ return gt
+
class MyIndicator(object):
def __init__(self, show_frequency=False):
self.show_frequency = show_frequency
@@ -71,28 +84,90 @@
maxcpu += 1
self.cpus = range(maxcpu)
+ # throttle menu items
+ throttles = ['full', 'cut']
+ throtmenu = Gtk.Menu()
+ throtm = Gtk.MenuItem("System Throttle")
+ throtm.set_submenu(throtmenu)
+ for toggle in throttles:
+ menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_throttle(toggle))
+ group = menu_item.get_group()
+ throtmenu.append(menu_item)
+ menu_item.connect('activate', self.select_activated, 'throttle', toggle)
+ self.select_items[toggle] = menu_item
+ menu.append(throtm)
+
+ menu.append(Gtk.SeparatorMenuItem())
+
# frequency menu items
#freqs = cpufreq.get_available_frequencies(self.cpus[0])
freqs = reversed(sorted(set(cpufreq.get_available_frequencies(self.cpus[0]))))
+ freqmenu = Gtk.Menu()
+ freqm = Gtk.MenuItem("CPU Frequency")
+ freqm.set_submenu(freqmenu)
for freq in freqs:
menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_frequency(freq))
group = menu_item.get_group()
- menu.append(menu_item)
+ freqmenu.append(menu_item)
menu_item.connect("activate", self.select_activated, 'frequency', freq)
self.select_items[freq] = menu_item
-
- menu.append(Gtk.SeparatorMenuItem())
+ menu.append(freqm)
# governor menu items
governors = cpufreq.get_available_governors(self.cpus[0])
+ govmenu = Gtk.Menu()
+ govm = Gtk.MenuItem("CPU Governor")
+ govm.set_submenu(govmenu)
for governor in governors:
if governor == 'userspace':
continue
menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_governor(governor))
group = menu_item.get_group()
- menu.append(menu_item)
+ govmenu.append(menu_item)
menu_item.connect('activate', self.select_activated, 'governor', governor)
self.select_items[governor] = menu_item
+ menu.append(govm)
+
+ # p-state turbo menu items
+ psturbo = ['on', 'off']
+ pstmenu = Gtk.Menu()
+ pstm = Gtk.MenuItem("P-State Turbo")
+ pstm.set_submenu(pstmenu)
+ for toggle in psturbo:
+ menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_psturbo(toggle))
+ group = menu_item.get_group()
+ pstmenu.append(menu_item)
+ menu_item.connect('activate', self.select_activated, 'psturbo', toggle)
+ self.select_items[toggle] = menu_item
+ menu.append(pstm)
+
+ # hyperthreading menu items
+ hyperthreads = ['on', 'off']
+ htmenu = Gtk.Menu()
+ htm = Gtk.MenuItem("Hyperthreads")
+ htm.set_submenu(htmenu)
+ for toggle in hyperthreads:
+ menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_hyperthreads(toggle))
+ group = menu_item.get_group()
+ htmenu.append(menu_item)
+ menu_item.connect('activate', self.select_activated, 'hyperthreads', toggle)
+ self.select_items[toggle] = menu_item
+ menu.append(htm)
+
+ menu.append(Gtk.SeparatorMenuItem())
+
+ # gpu runtime pm menu items
+ gputhrottles = ['full', 'cut']
+ gpumenu = Gtk.Menu()
+ gpum = Gtk.MenuItem("GPU Throttle")
+ gpum.set_submenu(gpumenu)
+ for toggle in gputhrottles:
+ menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_gputhrottles(toggle))
+ group = menu_item.get_group()
+ gpumenu.append(menu_item)
+ menu_item.connect('activate', self.select_activated, 'gputhrottle', toggle)
+ self.select_items[toggle] = menu_item
+ menu.append(gpum)
menu.show_all()
self.ind.set_menu(menu)
@@ -134,9 +209,21 @@
bus = dbus.SystemBus()
proxy = bus.get_object("com.ubuntu.IndicatorCpufreqSelector", "/Selector", introspect=False)
cpus = [dbus.UInt32(cpu) for cpu in self.cpus]
- if select == 'frequency':
+ if select == 'throttle':
+ proxy.SetThrottle(value,
+ dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
+ elif select == 'frequency':
proxy.SetFrequency(cpus, dbus.UInt32(value),
dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
+ elif select == 'psturbo':
+ proxy.SetPSTurbo("turbo-" + value,
+ dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
+ elif select == 'hyperthreads':
+ proxy.SetHyperthreads("ht-" + value,
+ dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
+ elif select == 'gputhrottle':
+ proxy.SetGPUThrottle("gpu-" + value,
+ dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
else:
proxy.SetGovernor(cpus, value,
dbus_interface='com.ubuntu.IndicatorCpufreqSelector')