summarylogtreecommitdiffstats
path: root/indicator.py.patch
diff options
context:
space:
mode:
Diffstat (limited to 'indicator.py.patch')
-rw-r--r--indicator.py.patch208
1 files changed, 208 insertions, 0 deletions
diff --git a/indicator.py.patch b/indicator.py.patch
new file mode 100644
index 000000000000..a11151568c82
--- /dev/null
+++ b/indicator.py.patch
@@ -0,0 +1,208 @@
+=== modified file 'indicator_cpufreq/indicator.py'
+--- indicator_cpufreq/indicator.py 2013-02-20 03:47:48 +0000
++++ indicator_cpufreq/indicator.py 2017-04-04 16:49:04 +0000
+@@ -23,12 +23,15 @@
+ import locale
+ import dbus
+
+-from indicator_cpufreq import cpufreq
+-
+ import gettext
+ from gettext import gettext as _
+ #gettext.textdomain('indicator-cpufreq')
+
++import glob
++
++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)
+@@ -37,9 +40,9 @@
+ return label
+
+ governor_names = {
++ 'schedutil': _("Scheduler"),
+ 'conservative': _("Conservative"),
+ 'ondemand': _("Ondemand"),
+- #'userspace': _("Userspace"),
+ 'powersave': _("Powersave"),
+ 'performance': _("Performance"),
+ }
+@@ -50,6 +53,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
+@@ -66,33 +78,81 @@
+ self.select_items = {}
+ group = []
+
+- maxcpu = 0
+- while cpufreq.cpu_exists(maxcpu) == 0:
+- maxcpu += 1
+- self.cpus = range(maxcpu)
+-
+- # frequency menu items
+- #freqs = cpufreq.get_available_frequencies(self.cpus[0])
+- freqs = reversed(sorted(set(cpufreq.get_available_frequencies(self.cpus[0]))))
+- for freq in freqs:
+- menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_frequency(freq))
++ # 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()
+- menu.append(menu_item)
+- menu_item.connect("activate", self.select_activated, 'frequency', freq)
+- self.select_items[freq] = menu_item
++ 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())
+
+ # governor menu items
+- governors = cpufreq.get_available_governors(self.cpus[0])
+- for governor in governors:
+- if governor == 'userspace':
+- continue
++ govFile = open("/sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors")
++ governors = govFile.readline().strip("\n")
++ govList = governors.split(" ")
++ govmenu = Gtk.Menu()
++ govm = Gtk.MenuItem("CPU Governor")
++ govm.set_submenu(govmenu)
++ for governor in govList:
++ if governor == 'performance':
++ toggle = 'full'
++ else:
++ toggle = 'cut'
+ menu_item = Gtk.RadioMenuItem.new_with_label(group, readable_governor(governor))
+ group = menu_item.get_group()
+- menu.append(menu_item)
+- menu_item.connect('activate', self.select_activated, 'governor', governor)
++ govmenu.append(menu_item)
++ menu_item.connect('activate', self.select_activated, 'governor', toggle)
+ self.select_items[governor] = menu_item
++ menu.append(govm)
++ govFile.close
++
++ # 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)
+@@ -107,13 +167,29 @@
+ for i in self.select_items.values():
+ i.handler_block_by_func(self.select_activated)
+
+- fmin, fmax, governor = cpufreq.get_policy(self.cpus[0])
++ govFile = open("/sys/devices/system/cpu/cpufreq/policy0/scaling_governor", 'r')
++ governor = govFile.readline().strip("\n")
++ fmnFile = open("/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq", 'r')
++ fmin = int(fmnFile.readline().strip("\n"))
++ fmxFile = open("/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq", 'r')
++ fmax = int(fmxFile.readline().strip("\n"))
+ # use the highest freq among cores for display
+- freq = max([cpufreq.get_freq_kernel(cpu) for cpu in self.cpus])
++ freq_list = glob.glob('/sys/devices/system/cpu/cpufreq/policy*/scaling_cur_freq')
++ freqs = []
++ for cur_freq in freq_list:
++ f = open(cur_freq, 'r')
++ freqs.append(int(f.readline().strip("\n")))
++ f.close
++
++ freq = max(freqs)
+
+ ratio = min([25, 50, 75, 100], key=lambda x: abs((fmax - fmin) * x / 100.0 - (freq - fmin)))
+ if freq < fmax and ratio == 100:
+ ratio = 75
++
++ govFile.close
++ fmnFile.close
++ fmxFile.close
+
+ #self.set_icon(get_data_file('media', 'indicator-cpufreq-%d.png' % ratio))
+ self.ind.set_icon('indicator-cpufreq-%d' % ratio)
+@@ -133,12 +209,21 @@
+ if menuitem.get_active():
+ 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':
+- proxy.SetFrequency(cpus, dbus.UInt32(value),
++ #cpus = [dbus.UInt32(cpu) for cpu in self.cpus]
++ if select == 'throttle':
++ proxy.SetThrottle(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,
++ proxy.SetGovernor("gov-" + value,
+ dbus_interface='com.ubuntu.IndicatorCpufreqSelector')
+
+ def can_set(self):
+