This is an automated email from the git hooks/post-receive script. o m e g a p h i l p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository panel-plugins/xfce4-hardware-monitor-plugin.
commit 5b8d4f931580ce446d6b05ad956b5d33f6192f26 Author: OmegaPhil <[email protected]> Date: Sun Nov 19 15:50:34 2017 +0000 Allow to configure which CPU time is counted for CPU usage monitor As mentioned in #13910 / https://bugzilla.xfce.org/show_bug.cgi?id=13910 the CPU usage monitor has always dropped low priority CPU time in order to avoid SETI@home CPU usage swamping out anything else. This is now configurable - the user can now choose to include low priority CPU time and IO wait --- src/choose-monitor-window.cpp | 22 ++++- src/choose-monitor-window.hpp | 3 +- src/monitor-impls.cpp | 49 +++++++--- src/monitor-impls.hpp | 9 +- src/ui.glade | 216 ++++++++++++++++++++++++++---------------- 5 files changed, 198 insertions(+), 101 deletions(-) diff --git a/src/choose-monitor-window.cpp b/src/choose-monitor-window.cpp index bc76a08..2e97e02 100644 --- a/src/choose-monitor-window.cpp +++ b/src/choose-monitor-window.cpp @@ -66,6 +66,10 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin, ui->get_widget("all_cpus_radiobutton", all_cpus_radiobutton); ui->get_widget("one_cpu_radiobutton", one_cpu_radiobutton); ui->get_widget("cpu_no_spinbutton", cpu_no_spinbutton); + ui->get_widget("cpu_usage_incl_low_checkbutton", + cpu_usage_incl_low_checkbutton); + ui->get_widget("cpu_usage_incl_iowait_checkbutton", + cpu_usage_incl_iowait_checkbutton); ui->get_widget("cpu_usage_tag_entry", cpu_tag); ui->get_widget("cpu_usage_refresh_delay_spinbutton", cpu_usage_refresh_delay_spinbutton); @@ -271,6 +275,9 @@ ChooseMonitorWindow::ChooseMonitorWindow(XfcePanelPlugin* xfce_plugin, // Note 1 off to avoid counting from zero in the interface cpu_no_spinbutton->set_range(1, CpuUsageMonitor::max_no_cpus); + cpu_usage_incl_low_checkbutton->set_active(false); + cpu_usage_incl_iowait_checkbutton->set_active(false); + /* While I have set the defaults in the ui.glade Adjustment.Values, best to * maintain it here */ cpu_usage_refresh_delay_spinbutton->set_value( @@ -579,6 +586,13 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir) else { all_cpus_radiobutton->set_active(); } + + bool incl_low_prio = xfce_rc_read_bool_entry(settings_ro, + "include_low_priority", false); + cpu_usage_incl_low_checkbutton->set_active(incl_low_prio); + bool incl_iowait = xfce_rc_read_bool_entry(settings_ro, + "include_iowait", false); + cpu_usage_incl_iowait_checkbutton->set_active(incl_iowait); } // Fill in disk usage info @@ -853,11 +867,15 @@ Monitor *ChooseMonitorWindow::run(const Glib::ustring &mon_dir) if (one_cpu_radiobutton->get_active()) mon = new CpuUsageMonitor( int(cpu_no_spinbutton->get_value()) - 1, cpu_tag->get_text(), - int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000)); + int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000), + cpu_usage_incl_low_checkbutton->get_active(), + cpu_usage_incl_iowait_checkbutton->get_active()); else mon = new CpuUsageMonitor( cpu_tag->get_text(), - int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000)); + int(cpu_usage_refresh_delay_spinbutton->get_value() * 1000), + cpu_usage_incl_low_checkbutton->get_active(), + cpu_usage_incl_iowait_checkbutton->get_active()); } else if (memory_usage_radiobutton->get_active()) { diff --git a/src/choose-monitor-window.hpp b/src/choose-monitor-window.hpp index 6506da3..ec5b39f 100644 --- a/src/choose-monitor-window.hpp +++ b/src/choose-monitor-window.hpp @@ -92,7 +92,8 @@ private: *swap_usage_options; Gtk::Entry *mount_dir_entry, *disk_usage_tag, *disk_stats_tag, *memory_usage_tag, *swap_usage_tag; - Gtk::CheckButton *show_free_checkbutton; + Gtk::CheckButton *show_free_checkbutton, *cpu_usage_incl_low_checkbutton, + *cpu_usage_incl_iowait_checkbutton; Gtk::ComboBox *disk_stats_device_combobox, *disk_stats_stat_combobox; diff --git a/src/monitor-impls.cpp b/src/monitor-impls.cpp index c9ddec4..db8d897 100644 --- a/src/monitor-impls.cpp +++ b/src/monitor-impls.cpp @@ -91,11 +91,22 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin) if (update_interval == -1) update_interval = CpuUsageMonitor::update_interval_default; + bool incl_low_prio = xfce_rc_read_bool_entry(settings_ro, + "include_low_priority", false); + bool incl_iowait = xfce_rc_read_bool_entry(settings_ro, + "include_iowait", false); + // Creating CPU usage monitor with provided number if valid if (cpu_no == -1) - monitors.push_back(new CpuUsageMonitor(tag, update_interval)); + { + monitors.push_back(new CpuUsageMonitor(tag, update_interval, + incl_low_prio, incl_iowait)); + } else - monitors.push_back(new CpuUsageMonitor(cpu_no, tag, update_interval)); + { + monitors.push_back(new CpuUsageMonitor(cpu_no, tag, update_interval, + incl_low_prio, incl_iowait)); + } } else if (type == "memory_usage") { @@ -330,7 +341,7 @@ load_monitors(XfceRc *settings_ro, XfcePanelPlugin *panel_plugin) // Always start with a CpuUsageMonitor if (monitors.empty()) - monitors.push_back(new CpuUsageMonitor("", 1000)); + monitors.push_back(new CpuUsageMonitor("", 1000, false, false)); return monitors; } @@ -392,15 +403,19 @@ int const CpuUsageMonitor::max_no_cpus = GLIBTOP_NCPU; int const CpuUsageMonitor::update_interval_default = 1000; -CpuUsageMonitor::CpuUsageMonitor(const Glib::ustring &tag_string, int interval) - : Monitor(tag_string, interval), cpu_no(all_cpus), total_time(0), nice_time(0), - idle_time(0), iowait_time(0) +CpuUsageMonitor::CpuUsageMonitor(const Glib::ustring &tag_string, int interval, + bool incl_low_prio, bool incl_iowait) + : Monitor(tag_string, interval), cpu_no(all_cpus), + incl_low_prio_priv(incl_low_prio), incl_iowait_priv(incl_iowait), + total_time(0), nice_time(0), idle_time(0), iowait_time(0) {} CpuUsageMonitor::CpuUsageMonitor(int cpu, const Glib::ustring &tag_string, - int interval) - : Monitor(tag_string, interval), cpu_no(cpu), total_time(0), nice_time(0), - idle_time(0), iowait_time(0) + int interval, bool incl_low_prio, + bool incl_iowait) + : Monitor(tag_string, interval), cpu_no(cpu), + incl_low_prio_priv(incl_low_prio), incl_iowait_priv(incl_iowait), + total_time(0), nice_time(0), idle_time(0), iowait_time(0) { if (cpu_no < 0 || cpu_no >= max_no_cpus) cpu_no = all_cpus; @@ -427,7 +442,7 @@ double CpuUsageMonitor::do_measure() io = cpu.xcpu_iowait[cpu_no]; } - // calculate ticks since last call + // Calculate ticks since last call guint64 dtotal = t - total_time, dnice = n - nice_time, @@ -440,9 +455,13 @@ double CpuUsageMonitor::do_measure() idle_time = i; iowait_time = io; - // don't count in dnice to avoid always showing 100% with SETI@home and - // similar applications running - double res = double(dtotal - dnice - didle - diowait) / dtotal; + // Count nice and iowait if the user desires + double res = double(dtotal - didle); + if (!incl_low_prio_priv) + res -= double(dnice); + if (!incl_iowait_priv) + res -= double(diowait); + res /= double(dtotal); if (res > 0) return res; @@ -492,6 +511,10 @@ void CpuUsageMonitor::save(XfceRc *settings_w) xfce_rc_set_group(settings_w, dir.c_str()); xfce_rc_write_entry(settings_w, "type", "cpu_usage"); xfce_rc_write_int_entry(settings_w, "cpu_no", cpu_no); + xfce_rc_write_bool_entry(settings_w, "include_low_priority", + incl_low_prio_priv); + xfce_rc_write_bool_entry(settings_w, "include_iowait", + incl_iowait_priv); xfce_rc_write_entry(settings_w, "tag", tag.c_str()); xfce_rc_write_int_entry(settings_w, "update_interval", update_interval()); } diff --git a/src/monitor-impls.hpp b/src/monitor-impls.hpp index 3301cc8..8e1ea38 100644 --- a/src/monitor-impls.hpp +++ b/src/monitor-impls.hpp @@ -50,10 +50,12 @@ class CpuUsageMonitor: public Monitor public: // Monitor all CPUs - CpuUsageMonitor(const Glib::ustring &tag_string, int interval); + CpuUsageMonitor(const Glib::ustring &tag_string, int interval, + bool incl_low_prio, bool incl_iowait); // Monitor only CPU no. - CpuUsageMonitor(int cpu_no, const Glib::ustring &tag_string, int interval); + CpuUsageMonitor(int cpu_no, const Glib::ustring &tag_string, int interval, + bool incl_low_prio, bool incl_iowait); virtual double max(); virtual bool fixed_max(); @@ -79,6 +81,9 @@ private: static int const all_cpus = -1; int cpu_no; + // Define whether these are included in CPU time or not + bool incl_low_prio_priv, incl_iowait_priv; + // we need to save these values to compute the difference next time the // monitor is updated guint64 total_time, nice_time, idle_time, iowait_time; diff --git a/src/ui.glade b/src/ui.glade index f83169b..a2c896a 100644 --- a/src/ui.glade +++ b/src/ui.glade @@ -263,104 +263,154 @@ <property name="can_focus">True</property> <property name="spacing">5</property> <child> - <object class="GtkTable" id="table1"> + <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="n_rows">2</property> - <property name="n_columns">4</property> - <property name="column_spacing">5</property> - <property name="row_spacing">5</property> <child> - <object class="GtkLabel" id="cpu_usage_tag_label"> + <object class="GtkTable" id="table10"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Tag: </property> - </object> - </child> - <child> - <object class="GtkEntry" id="cpu_usage_tag_entry"> - <property name="width_request">80</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip_text" translatable="yes">Tag to display along with monitor data -in the optional text overlay in a curve -view</property> - <property name="invisible_char">●</property> - <property name="invisible_char_set">True</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - <property name="primary_icon_sensitive">True</property> - <property name="secondary_icon_sensitive">True</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="cpu_usage_refresh_delay_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Refresh every</property> + <property name="n_rows">2</property> + <child> + <object class="GtkCheckButton" id="cpu_usage_incl_low_checkbutton"> + <property name="label" translatable="yes">Include low priority</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">CPU usage for processes nice'd to +less than default priority</property> + <property name="draw_indicator">True</property> + </object> + </child> + <child> + <object class="GtkCheckButton" id="cpu_usage_incl_iowait_checkbutton"> + <property name="label" translatable="yes">Include I/O wait</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="tooltip_text" translatable="yes">CPU time spent waiting for I/O +(usually disk latency)</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="padding">5</property> + <property name="position">0</property> </packing> </child> <child> - <placeholder/> - </child> - <child> - <object class="GtkLabel" id="label10"> + <object class="GtkTable" id="table1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label" translatable="yes"> seconds</property> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <placeholder/> - </child> - <child> - <object class="GtkButton" id="cpu_usage_refresh_delay_default_button"> - <property name="label" translatable="yes">Reset</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - </object> - <packing> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="cpu_usage_refresh_delay_spinbutton"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip_text" translatable="yes">Seconds delay between measurements + <property name="n_rows">2</property> + <property name="n_columns">4</property> + <property name="column_spacing">5</property> + <property name="row_spacing">5</property> + <child> + <object class="GtkLabel" id="cpu_usage_tag_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Tag: </property> + </object> + </child> + <child> + <object class="GtkEntry" id="cpu_usage_tag_entry"> + <property name="width_request">80</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">Tag to display along with monitor data +in the optional text overlay in a curve +view</property> + <property name="invisible_char">●</property> + <property name="invisible_char_set">True</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cpu_usage_refresh_delay_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Refresh every</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes"> seconds</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkButton" id="cpu_usage_refresh_delay_default_button"> + <property name="label" translatable="yes">Reset</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="cpu_usage_refresh_delay_spinbutton"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">Seconds delay between measurements taken by the monitor</property> - <property name="invisible_char">●</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - <property name="primary_icon_sensitive">True</property> - <property name="secondary_icon_sensitive">True</property> - <property name="adjustment">cpu_usage_refresh_delay_adjustment</property> - <property name="climb_rate">1</property> + <property name="invisible_char">●</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <property name="primary_icon_sensitive">True</property> + <property name="secondary_icon_sensitive">True</property> + <property name="adjustment">cpu_usage_refresh_delay_adjustment</property> + <property name="climb_rate">1</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> </object> -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
