[sysprof] libsysprof-ui: add visualizer row for cpu frequency
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] libsysprof-ui: add visualizer row for cpu frequency
- Date: Wed, 29 May 2019 22:43:58 +0000 (UTC)
commit 9405294ef1e184bb184c98ff7c3286eb0968692c
Author: Christian Hergert <chergert redhat com>
Date: Thu May 23 12:48:31 2019 -0700
libsysprof-ui: add visualizer row for cpu frequency
src/libsysprof-ui/sysprof-cpu-visualizer-row.c | 73 ++++++++++++++++++++++++--
src/libsysprof-ui/sysprof-visualizer-list.c | 17 ++++++
2 files changed, 86 insertions(+), 4 deletions(-)
---
diff --git a/src/libsysprof-ui/sysprof-cpu-visualizer-row.c b/src/libsysprof-ui/sysprof-cpu-visualizer-row.c
index b97ebaf..bce83e9 100644
--- a/src/libsysprof-ui/sysprof-cpu-visualizer-row.c
+++ b/src/libsysprof-ui/sysprof-cpu-visualizer-row.c
@@ -31,8 +31,19 @@ struct _SysprofCpuVisualizerRow
{
SysprofLineVisualizerRow parent_instance;
SysprofColorCycle *colors;
+ gchar *category;
+ guint use_dash : 1;
};
+enum {
+ PROP_0,
+ PROP_CATEGORY,
+ PROP_USE_DASH,
+ N_PROPS
+};
+
+static GParamSpec *properties [N_PROPS];
+
G_DEFINE_TYPE (SysprofCpuVisualizerRow, sysprof_cpu_visualizer_row, SYSPROF_TYPE_LINE_VISUALIZER_ROW)
static gboolean
@@ -40,10 +51,14 @@ sysprof_cpu_visualizer_counter_found (const SysprofCaptureFrame *frame,
gpointer user_data)
{
const SysprofCaptureCounterDefine *def = (SysprofCaptureCounterDefine *)frame;
- GArray *counters = user_data;
+ struct {
+ SysprofCpuVisualizerRow *self;
+ GArray *counters;
+ } *state = user_data;
gboolean found = FALSE;
g_assert (frame->type == SYSPROF_CAPTURE_FRAME_CTRDEF);
+ g_assert (state != NULL);
/*
* In practice, all the CPU counters are defined at once, so we can avoid
@@ -52,10 +67,10 @@ sysprof_cpu_visualizer_counter_found (const SysprofCaptureFrame *frame,
for (guint i = 0; i < def->n_counters; i++)
{
- if (g_str_equal (def->counters[i].category, "CPU Percent"))
+ if (g_str_equal (def->counters[i].category, state->self->category))
{
guint id = def->counters[i].id;
- g_array_append_val (counters, id);
+ g_array_append_val (state->counters, id);
found = TRUE;
}
}
@@ -73,15 +88,23 @@ sysprof_cpu_visualizer_row_discover_counters (GTask *task,
SysprofCaptureReader *reader = task_data;
g_autoptr(SysprofCaptureCursor) cursor = NULL;
g_autoptr(GArray) counters = NULL;
+ struct {
+ SysprofCpuVisualizerRow *self;
+ GArray *counters;
+ } state;
g_assert (G_IS_TASK (task));
g_assert (SYSPROF_IS_CPU_VISUALIZER_ROW (source_object));
g_assert (reader != NULL);
counters = g_array_new (FALSE, FALSE, sizeof (guint));
+
+ state.self = source_object;
+ state.counters = counters;
+
cursor = sysprof_capture_cursor_new (reader);
sysprof_capture_cursor_add_condition (cursor, sysprof_capture_condition_new_where_type_in (G_N_ELEMENTS
(types), types));
- sysprof_capture_cursor_foreach (cursor, sysprof_cpu_visualizer_counter_found, counters);
+ sysprof_capture_cursor_foreach (cursor, sysprof_cpu_visualizer_counter_found, &state);
g_task_return_pointer (task, g_steal_pointer (&counters), (GDestroyNotify)g_array_unref);
}
@@ -107,6 +130,9 @@ complete_counters (GObject *object,
sysprof_color_cycle_next (self->colors, &color);
sysprof_line_visualizer_row_add_counter (SYSPROF_LINE_VISUALIZER_ROW (self), counter_id, &color);
+
+ if (self->use_dash)
+ sysprof_line_visualizer_row_set_dash (SYSPROF_LINE_VISUALIZER_ROW (self), counter_id, TRUE);
}
}
@@ -145,10 +171,35 @@ sysprof_cpu_visualizer_row_finalize (GObject *object)
SysprofCpuVisualizerRow *self = (SysprofCpuVisualizerRow *)object;
g_clear_pointer (&self->colors, sysprof_color_cycle_unref);
+ g_clear_pointer (&self->category, g_free);
G_OBJECT_CLASS (sysprof_cpu_visualizer_row_parent_class)->finalize (object);
}
+static void
+sysprof_cpu_visualizer_row_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ SysprofCpuVisualizerRow *self = SYSPROF_CPU_VISUALIZER_ROW (object);
+
+ switch (prop_id)
+ {
+ case PROP_CATEGORY:
+ g_free (self->category);
+ self->category = g_value_dup_string (value);
+ break;
+
+ case PROP_USE_DASH:
+ self->use_dash = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
static void
sysprof_cpu_visualizer_row_class_init (SysprofCpuVisualizerRowClass *klass)
{
@@ -156,13 +207,27 @@ sysprof_cpu_visualizer_row_class_init (SysprofCpuVisualizerRowClass *klass)
SysprofVisualizerRowClass *row_class = SYSPROF_VISUALIZER_ROW_CLASS (klass);
object_class->finalize = sysprof_cpu_visualizer_row_finalize;
+ object_class->set_property = sysprof_cpu_visualizer_row_set_property;
row_class->set_reader = sysprof_cpu_visualizer_row_set_reader;
+
+ properties [PROP_CATEGORY] =
+ g_param_spec_string ("category", NULL, NULL,
+ "CPU Percent",
+ (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ properties [PROP_USE_DASH] =
+ g_param_spec_boolean ("use-dash", NULL, NULL,
+ FALSE,
+ (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
}
static void
sysprof_cpu_visualizer_row_init (SysprofCpuVisualizerRow *self)
{
+ self->category = g_strdup ("CPU Percent");
self->colors = sysprof_color_cycle_new ();
}
diff --git a/src/libsysprof-ui/sysprof-visualizer-list.c b/src/libsysprof-ui/sysprof-visualizer-list.c
index 51815d7..af0468d 100644
--- a/src/libsysprof-ui/sysprof-visualizer-list.c
+++ b/src/libsysprof-ui/sysprof-visualizer-list.c
@@ -298,6 +298,7 @@ handle_capture_results (GObject *object,
if (state->has_cpu)
{
GtkWidget *row = g_object_new (SYSPROF_TYPE_CPU_VISUALIZER_ROW,
+ "category", "CPU Percent",
/* Translators: CPU is the processor. */
"title", _("CPU"),
"height-request", 35,
@@ -309,6 +310,22 @@ handle_capture_results (GObject *object,
gtk_container_add (GTK_CONTAINER (self), row);
}
+ if (state->has_cpu)
+ {
+ GtkWidget *row = g_object_new (SYSPROF_TYPE_CPU_VISUALIZER_ROW,
+ "category", "CPU Frequency",
+ /* Translators: CPU is the processor. */
+ "title", _("CPU Frequency"),
+ "height-request", 35,
+ "selectable", FALSE,
+ "visible", TRUE,
+ "y-lower", 0.0,
+ "y-upper", 100.0,
+ "use-dash", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self), row);
+ }
+
if (state->has_sample)
{
GtkWidget *row = g_object_new (SYSPROF_TYPE_DEPTH_VISUALIZER_ROW,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]