diff --git a/data/org.virt-manager.virt-manager.gschema.xml b/data/org.virt-manager.virt-manager.gschema.xml
index 493b5baf5..f9a7934c5 100644
--- a/data/org.virt-manager.virt-manager.gschema.xml
+++ b/data/org.virt-manager.virt-manager.gschema.xml
@@ -116,11 +116,15 @@
The statistics update interval in seconds
+
+ true
+ Poll VM CPU stats
+ Whether or not the app will poll VM CPU statistics
+
false
Poll disk i/o stats
Whether or not the app will poll VM disk i/o statistics
-
false
diff --git a/ui/preferences.ui b/ui/preferences.ui
index f986e5dee..c0e9e6830 100644
--- a/ui/preferences.ui
+++ b/ui/preferences.ui
@@ -116,7 +116,7 @@
0
- 1
+ 2
1
1
@@ -132,7 +132,7 @@
1
- 1
+ 2
1
1
@@ -148,7 +148,7 @@
0
- 2
+ 3
1
1
@@ -164,7 +164,7 @@
1
- 2
+ 3
1
1
@@ -180,7 +180,7 @@
0
- 3
+ 4
1
1
@@ -196,7 +196,7 @@
1
- 3
+ 4
1
1
@@ -256,6 +256,38 @@
1
+
+
+
+ 0
+ 1
+ 1
+ 1
+
+
+
+
+
+ 1
+ 1
+ 1
+ 1
+
+
diff --git a/virtManager/config.py b/virtManager/config.py
index c7cde225e..dd624e9a3 100644
--- a/virtManager/config.py
+++ b/virtManager/config.py
@@ -343,6 +343,8 @@ class vmmConfig(object):
# Disable/Enable different stats polling
+ def get_stats_enable_cpu_poll(self):
+ return self.conf.get("/stats/enable-cpu-poll")
def get_stats_enable_disk_poll(self):
return self.conf.get("/stats/enable-disk-poll")
def get_stats_enable_net_poll(self):
@@ -350,6 +352,8 @@ class vmmConfig(object):
def get_stats_enable_memory_poll(self):
return self.conf.get("/stats/enable-memory-poll")
+ def set_stats_enable_cpu_poll(self, val):
+ self.conf.set("/stats/enable-cpu-poll", val)
def set_stats_enable_disk_poll(self, val):
self.conf.set("/stats/enable-disk-poll", val)
def set_stats_enable_net_poll(self, val):
@@ -357,6 +361,8 @@ class vmmConfig(object):
def set_stats_enable_memory_poll(self, val):
self.conf.set("/stats/enable-memory-poll", val)
+ def on_stats_enable_cpu_poll_changed(self, cb, row=None):
+ return self.conf.notify_add("/stats/enable-cpu-poll", cb, row)
def on_stats_enable_disk_poll_changed(self, cb, row=None):
return self.conf.notify_add("/stats/enable-disk-poll", cb, row)
def on_stats_enable_net_poll_changed(self, cb, row=None):
diff --git a/virtManager/details.py b/virtManager/details.py
index 81ec953f2..d8b0d1ed9 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -2498,7 +2498,8 @@ class vmmDetails(vmmGObjectUI):
dsk_txt = _("Disabled")
net_txt = _("Disabled")
- cpu_txt = "%d %%" % self.vm.guest_cpu_time_percentage()
+ if self.config.get_stats_enable_cpu_poll():
+ cpu_txt = "%d %%" % self.vm.guest_cpu_time_percentage()
if self.config.get_stats_enable_memory_poll():
cur_vm_memory = self.vm.stats_memory()
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 93afe1fe8..ae14109a9 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -261,6 +261,7 @@ class vmmDomain(vmmLibvirtObject):
self.mem_stats_supported = False
self._enable_mem_stats = False
+ self._enable_cpu_stats = False
self._enable_net_poll = False
self._stats_net_supported = True
@@ -303,19 +304,23 @@ class vmmDomain(vmmLibvirtObject):
self.toggle_sample_network_traffic()
self.toggle_sample_disk_io()
self.toggle_sample_mem_stats()
+ self.toggle_sample_cpu_stats()
self.force_update_status(from_event=True)
# Hook up listeners that need to be cleaned up
+ self.add_gconf_handle(
+ self.config.on_stats_enable_cpu_poll_changed(
+ self.toggle_sample_cpu_stats))
self.add_gconf_handle(
self.config.on_stats_enable_net_poll_changed(
- self.toggle_sample_network_traffic))
+ self.toggle_sample_network_traffic))
self.add_gconf_handle(
self.config.on_stats_enable_disk_poll_changed(
- self.toggle_sample_disk_io))
+ self.toggle_sample_disk_io))
self.add_gconf_handle(
self.config.on_stats_enable_memory_poll_changed(
- self.toggle_sample_mem_stats))
+ self.toggle_sample_mem_stats))
self.connect("status-changed", self._update_start_vcpus)
self.connect("pre-startup", self._prestartup_nodedev_check)
@@ -1422,6 +1427,9 @@ class vmmDomain(vmmLibvirtObject):
#################
def _sample_cpu_stats(self, info, now):
+ if not self._enable_cpu_stats:
+ return 0, 0, 0, 0
+
prevCpuTime = 0
prevTimestamp = 0
cpuTime = 0
@@ -1523,6 +1531,9 @@ class vmmDomain(vmmLibvirtObject):
def toggle_sample_mem_stats(self, ignore=None):
self._enable_mem_stats = self.config.get_stats_enable_memory_poll()
+ def toggle_sample_cpu_stats(self, ignore=None):
+ self._enable_cpu_stats = self.config.get_stats_enable_cpu_poll()
+
###################
# Stats accessors #
@@ -1838,7 +1849,9 @@ class vmmDomain(vmmLibvirtObject):
if not self._using_events():
self._invalidate_xml()
- info = self._backend.info()
+ info = []
+ if not self._using_events() or self._enable_cpu_stats:
+ info = self._backend.info()
if stats_update:
self._tick_stats(info)
diff --git a/virtManager/manager.py b/virtManager/manager.py
index 4b88d3e27..7aade1378 100644
--- a/virtManager/manager.py
+++ b/virtManager/manager.py
@@ -189,6 +189,7 @@ class vmmManager(vmmGObjectUI):
# Initialize stat polling columns based on global polling
# preferences (we want signal handlers for this)
+ self.enable_polling(COL_GUEST_CPU)
self.enable_polling(COL_DISK)
self.enable_polling(COL_NETWORK)
self.enable_polling(COL_MEM)
@@ -277,15 +278,17 @@ class vmmManager(vmmGObjectUI):
# Register callbacks with the global stats enable/disable values
# that disable the associated vmlist widgets if reporting is disabled
self.add_gconf_handle(
- self.config.on_stats_enable_disk_poll_changed(self.enable_polling,
- COL_DISK))
+ self.config.on_stats_enable_cpu_poll_changed(
+ self.enable_polling, COL_GUEST_CPU))
self.add_gconf_handle(
- self.config.on_stats_enable_net_poll_changed(self.enable_polling,
- COL_NETWORK))
+ self.config.on_stats_enable_disk_poll_changed(
+ self.enable_polling, COL_DISK))
+ self.add_gconf_handle(
+ self.config.on_stats_enable_net_poll_changed(
+ self.enable_polling, COL_NETWORK))
self.add_gconf_handle(
self.config.on_stats_enable_memory_poll_changed(
- self.enable_polling,
- COL_MEM))
+ self.enable_polling, COL_MEM))
self.toggle_guest_cpu_usage_visible_widget()
self.toggle_host_cpu_usage_visible_widget()
@@ -982,6 +985,9 @@ class vmmManager(vmmGObjectUI):
return cmp(obj1.network_traffic_rate(), obj2.network_traffic_rate())
def enable_polling(self, column):
+ if column == COL_GUEST_CPU:
+ widgn = ["menu_view_stats_guest_cpu", "menu_view_stats_host_cpu"]
+ do_enable = self.config.get_stats_enable_cpu_poll()
if column == COL_DISK:
widgn = "menu_view_stats_disk"
do_enable = self.config.get_stats_enable_disk_poll()
@@ -991,18 +997,19 @@ class vmmManager(vmmGObjectUI):
elif column == COL_MEM:
widgn = "menu_view_stats_memory"
do_enable = self.config.get_stats_enable_memory_poll()
- widget = self.widget(widgn)
- tool_text = ""
+ for w in util.listify(widgn):
+ widget = self.widget(w)
+ tool_text = ""
- if do_enable:
- widget.set_sensitive(True)
- else:
- if widget.get_active():
- widget.set_active(False)
- widget.set_sensitive(False)
- tool_text = _("Disabled in preferences dialog.")
- widget.set_tooltip_text(tool_text)
+ if do_enable:
+ widget.set_sensitive(True)
+ else:
+ if widget.get_active():
+ widget.set_active(False)
+ widget.set_sensitive(False)
+ tool_text = _("Disabled in preferences dialog.")
+ widget.set_tooltip_text(tool_text)
def _toggle_graph_helper(self, do_show, col, datafunc, menu):
img = -1
diff --git a/virtManager/preferences.py b/virtManager/preferences.py
index 71cac2c77..8f546bb34 100644
--- a/virtManager/preferences.py
+++ b/virtManager/preferences.py
@@ -45,6 +45,7 @@ class vmmPreferences(vmmGObjectUI):
self.refresh_add_spice_usbredir()
self.refresh_storage_format()
self.refresh_cpu_default()
+ self.refresh_cpu_poll()
self.refresh_disk_poll()
self.refresh_net_poll()
self.refresh_memory_poll()
@@ -71,6 +72,7 @@ class vmmPreferences(vmmGObjectUI):
"on_prefs_add_spice_usbredir_changed": self.change_add_spice_usbredir,
"on_prefs_storage_format_changed": self.change_storage_format,
"on_prefs_cpu_default_changed": self.change_cpu_default,
+ "on_prefs_stats_enable_cpu_toggled": self.change_cpu_poll,
"on_prefs_stats_enable_disk_toggled": self.change_disk_poll,
"on_prefs_stats_enable_net_toggled": self.change_net_poll,
"on_prefs_stats_enable_memory_toggled": self.change_memory_poll,
@@ -214,6 +216,9 @@ class vmmPreferences(vmmGObjectUI):
val = self.config.get_default_cpu_setting(raw=True)
uiutil.set_row_selection(combo, val)
+ def refresh_cpu_poll(self):
+ self.widget("prefs-stats-enable-cpu").set_active(
+ self.config.get_stats_enable_cpu_poll())
def refresh_disk_poll(self):
self.widget("prefs-stats-enable-disk").set_active(
self.config.get_stats_enable_disk_poll())
@@ -355,6 +360,8 @@ class vmmPreferences(vmmGObjectUI):
typ = uiutil.get_list_selection(src, 0) or "default"
self.config.set_default_cpu_setting(typ.lower())
+ def change_cpu_poll(self, src):
+ self.config.set_stats_enable_cpu_poll(src.get_active())
def change_disk_poll(self, src):
self.config.set_stats_enable_disk_poll(src.get_active())
def change_net_poll(self, src):