[gnome-system-monitor] Added option to draw CPU usage chart as a stacked area chart. https://bugzilla.gnome.org/show_bug.cg
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-system-monitor] Added option to draw CPU usage chart as a stacked area chart. https://bugzilla.gnome.org/show_bug.cg
- Date: Fri, 9 Nov 2012 20:06:21 +0000 (UTC)
commit b5a2e25abf1a1e566af44708b25076eae4657afe
Author: Robert Roth <robert roth off gmail com>
Date: Fri Nov 9 22:04:37 2012 +0200
Added option to draw CPU usage chart as a stacked area chart.
https://bugzilla.gnome.org/show_bug.cgi?id=635939
data/preferences.ui | 25 +++++++++++----
src/load-graph.cpp | 32 +++++++++++++++-----
src/org.gnome.gnome-system-monitor.gschema.xml.in | 8 +++++
src/procdialogs.cpp | 18 +++++++++++
src/procman-app.cpp | 14 +++++++++
src/procman-app.h | 1 +
src/settings-keys.cpp | 1 +
src/settings-keys.h | 1 +
8 files changed, 85 insertions(+), 15 deletions(-)
---
diff --git a/data/preferences.ui b/data/preferences.ui
index 12f5b05..23af053 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -24,7 +24,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -39,7 +38,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -162,7 +160,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="hexpand">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
@@ -181,7 +178,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="hexpand">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
@@ -200,7 +196,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="hexpand">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
@@ -431,7 +426,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="hexpand">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
@@ -443,6 +437,24 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="draw_stacked_button">
+ <property name="label" translatable="yes">_Draw CPU chart as stacked area chart</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="hexpand">True</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left_attach">0</property>
@@ -569,7 +581,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="hexpand">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
diff --git a/src/load-graph.cpp b/src/load-graph.cpp
index 2f0505f..9cff2f9 100644
--- a/src/load-graph.cpp
+++ b/src/load-graph.cpp
@@ -139,7 +139,11 @@ void draw_background(LoadGraph *graph) {
pango_cairo_show_layout (cr, layout);
} else {
// operation orders matters so it's 0 if i == num_bars
- caption = g_strdup_printf("%d%%", 100 - i * (100 / num_bars));
+ guint max = 100;
+ if (graph->type == LOAD_GRAPH_CPU && !ProcmanApp::get()->config.solaris_mode) {
+ max = 100 * graph->n;
+ }
+ caption = g_strdup_printf("%d %%", max - i * (max / num_bars));
pango_layout_set_text (layout, caption, -1);
pango_layout_get_extents (layout, NULL, &extents);
cairo_move_to (cr, graph->indent - 1.0 * extents.width / PANGO_SCALE + 20,
@@ -222,7 +226,8 @@ load_graph_draw (GtkWidget *widget,
LoadGraph * const graph = static_cast<LoadGraph*>(data_ptr);
GdkWindow *window;
- guint i, j;
+ guint i;
+ gint j;
gdouble sample_width, x_offset;
window = gtk_widget_get_window (graph->disp);
@@ -255,10 +260,14 @@ load_graph_draw (GtkWidget *widget,
graph->real_draw_height + FRAME_WIDTH - 1);
cairo_clip(cr);
- for (j = 0; j < graph->n; ++j) {
- cairo_move_to (cr, x_offset, (1.0f - graph->data[0][j]) * graph->real_draw_height);
+ bool drawStacked = graph->type == LOAD_GRAPH_CPU && ProcmanApp::get()->config.draw_stacked;
+ for (j = graph->n-1; j >= 0; j--) {
gdk_cairo_set_source_rgba (cr, &(graph->colors [j]));
-
+ if (drawStacked) {
+ cairo_move_to (cr, x_offset, graph->real_draw_height);
+ } else {
+ cairo_move_to (cr, x_offset, (1.0f - graph->data[0][j]) * graph->real_draw_height);
+ }
for (i = 1; i < LoadGraph::NUM_POINTS; ++i) {
if (graph->data[i][j] == -1.0f)
continue;
@@ -270,8 +279,12 @@ load_graph_draw (GtkWidget *widget,
x_offset - (i * graph->graph_delx),
(1.0f - graph->data[i][j]) * graph->real_draw_height + 3.5f);
}
- cairo_stroke (cr);
-
+ if (drawStacked) {
+ cairo_rel_line_to (cr, x_offset - (LoadGraph::NUM_POINTS * graph->graph_delx), graph->real_draw_height);
+ cairo_fill(cr);
+ } else {
+ cairo_stroke (cr);
+ }
}
cairo_destroy (cr);
@@ -318,7 +331,10 @@ get_load (LoadGraph *graph)
used = NOW[i][CPU_USED] - LAST[i][CPU_USED];
load = used / MAX(total, 1.0f);
- graph->data[0][i] = load;
+ graph->data[0][i] = load / graph->n;
+ if (i > 0) {
+ graph->data[0][i] += graph->data[0][i-1];
+ }
/* Update label */
text = g_strdup_printf("%.1f%%", load * 100.0f);
diff --git a/src/org.gnome.gnome-system-monitor.gschema.xml.in b/src/org.gnome.gnome-system-monitor.gschema.xml.in
index 65ddc1f..7455c2a 100644
--- a/src/org.gnome.gnome-system-monitor.gschema.xml.in
+++ b/src/org.gnome.gnome-system-monitor.gschema.xml.in
@@ -51,6 +51,14 @@
</_description>
</key>
+ <key type="b" name="cpu-stacked-area-chart">
+ <default>false
+ </default>
+ <_summary>Show CPU chart as stacked area chart</_summary>
+ <_description>If TRUE, system-monitor shows the CPU chart as a stacked area chart instead of a line chart.
+ </_description>
+ </key>
+
<key name="smooth-refresh" type="b">
<default>true
</default>
diff --git a/src/procdialogs.cpp b/src/procdialogs.cpp
index e690e5b..df4869f 100644
--- a/src/procdialogs.cpp
+++ b/src/procdialogs.cpp
@@ -257,6 +257,17 @@ solaris_mode_toggled(GtkToggleButton *button, gpointer data)
g_settings_set_boolean(settings, procman::settings::solaris_mode.c_str(), toggled);
}
+static void
+draw_stacked_toggled(GtkToggleButton *button, gpointer data)
+{
+ ProcmanApp *app = static_cast<ProcmanApp *>(data);
+ GSettings *settings = app->settings;
+
+ gboolean toggled;
+ toggled = gtk_toggle_button_get_active(button);
+ g_settings_set_boolean(settings, procman::settings::draw_stacked.c_str(), toggled);
+}
+
static void
network_in_bits_toggled(GtkToggleButton *button, gpointer data)
@@ -504,6 +515,13 @@ procdialog_create_preferences_dialog (ProcmanApp *app)
g_signal_connect(G_OBJECT(solaris_button), "toggled",
G_CALLBACK(solaris_mode_toggled), app);
+ GtkWidget *draw_stacked_button = GTK_WIDGET (gtk_builder_get_object (builder, "draw_stacked_button"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(draw_stacked_button),
+ g_settings_get_boolean(app->settings,
+ procman::settings::draw_stacked.c_str()));
+ g_signal_connect(G_OBJECT(draw_stacked_button), "toggled",
+ G_CALLBACK(draw_stacked_toggled), app);
+
create_field_page (builder, app->tree, "processes_columns_treeview");
update = (gfloat) app->config.graph_update_interval;
diff --git a/src/procman-app.cpp b/src/procman-app.cpp
index 5c160c5..0b7a1c3 100644
--- a/src/procman-app.cpp
+++ b/src/procman-app.cpp
@@ -54,9 +54,19 @@ solaris_mode_changed_cb(GSettings *settings, const gchar *key, gpointer data)
ProcmanApp *app = static_cast<ProcmanApp *>(data);
app->config.solaris_mode = g_settings_get_boolean(settings, key);
+ app->cpu_graph->clear_background();
proctable_update_all (app);
}
+static void
+draw_stacked_changed_cb(GSettings *settings, const gchar *key, gpointer data)
+{
+ ProcmanApp *app = static_cast<ProcmanApp *>(data);
+
+ app->config.draw_stacked = g_settings_get_boolean(settings, key);
+ app->cpu_graph->clear_background();
+}
+
static void
network_in_bits_changed_cb(GSettings *settings, const gchar *key, gpointer data)
@@ -252,6 +262,10 @@ ProcmanApp::load_settings()
std::string detail_string("changed::" + procman::settings::solaris_mode);
g_signal_connect(G_OBJECT(settings), detail_string.c_str(), G_CALLBACK(solaris_mode_changed_cb), this);
+ config.draw_stacked = g_settings_get_boolean(settings, procman::settings::draw_stacked.c_str());
+ detail_string = "changed::" + procman::settings::draw_stacked;
+ g_signal_connect(G_OBJECT(settings), detail_string.c_str(), G_CALLBACK(draw_stacked_changed_cb), this);
+
config.network_in_bits = g_settings_get_boolean(settings, procman::settings::network_in_bits.c_str());
detail_string = "changed::" + procman::settings::network_in_bits;
g_signal_connect(G_OBJECT(settings), detail_string.c_str(), G_CALLBACK(network_in_bits_changed_cb), this);
diff --git a/src/procman-app.h b/src/procman-app.h
index 457a64c..3294944 100644
--- a/src/procman-app.h
+++ b/src/procman-app.h
@@ -66,6 +66,7 @@ struct ProcConfig
GdkRGBA frame_color;
gint num_cpus;
bool solaris_mode;
+ bool draw_stacked;
bool network_in_bits;
};
diff --git a/src/settings-keys.cpp b/src/settings-keys.cpp
index f330d4c..5580ccd 100644
--- a/src/settings-keys.cpp
+++ b/src/settings-keys.cpp
@@ -7,6 +7,7 @@ namespace procman
{
const std::string root("/apps/procman");
const std::string solaris_mode("solaris-mode");
+ const std::string draw_stacked("cpu-stacked-area-chart");
const std::string open_files_tree_prefix("openfilestree");
const std::string network_in_bits("network-in-bits");
}
diff --git a/src/settings-keys.h b/src/settings-keys.h
index b30c720..4e89996 100644
--- a/src/settings-keys.h
+++ b/src/settings-keys.h
@@ -9,6 +9,7 @@ namespace procman
{
extern const std::string root;
extern const std::string solaris_mode;
+ extern const std::string draw_stacked;
extern const std::string open_files_tree_prefix;
extern const std::string network_in_bits;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]