|
Packit Service |
c6b782 |
/* dzl-cpu-graph.c
|
|
Packit Service |
c6b782 |
*
|
|
Packit Service |
c6b782 |
* Copyright (C) 2015 Christian Hergert <christian@hergert.me>
|
|
Packit Service |
c6b782 |
*
|
|
Packit Service |
c6b782 |
* This file is free software; you can redistribute it and/or modify it
|
|
Packit Service |
c6b782 |
* under the terms of the GNU Lesser General Public License as
|
|
Packit Service |
c6b782 |
* published by the Free Software Foundation; either version 3 of the
|
|
Packit Service |
c6b782 |
* License, or (at your option) any later version.
|
|
Packit Service |
c6b782 |
*
|
|
Packit Service |
c6b782 |
* This file is distributed in the hope that it will be useful, but
|
|
Packit Service |
c6b782 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
c6b782 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
c6b782 |
* Lesser General Public License for more details.
|
|
Packit Service |
c6b782 |
*
|
|
Packit Service |
c6b782 |
* You should have received a copy of the GNU General Public License
|
|
Packit Service |
c6b782 |
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
c6b782 |
*/
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
#include <glib/gi18n.h>
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
#include "config.h"
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
#include "dzl-cpu-graph.h"
|
|
Packit Service |
c6b782 |
#include "dzl-cpu-model.h"
|
|
Packit Service |
c6b782 |
#include "dzl-graph-line-renderer.h"
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
struct _DzlCpuGraph
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
DzlGraphView parent_instance;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
gint64 timespan;
|
|
Packit Service |
c6b782 |
guint max_samples;
|
|
Packit Service |
c6b782 |
};
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
G_DEFINE_TYPE (DzlCpuGraph, dzl_cpu_graph, DZL_TYPE_GRAPH_VIEW)
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
enum {
|
|
Packit Service |
c6b782 |
PROP_0,
|
|
Packit Service |
c6b782 |
PROP_MAX_SAMPLES,
|
|
Packit Service |
c6b782 |
PROP_TIMESPAN,
|
|
Packit Service |
c6b782 |
LAST_PROP
|
|
Packit Service |
c6b782 |
};
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static GParamSpec *properties[LAST_PROP];
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static gchar *colors[] = {
|
|
Packit Service |
c6b782 |
"#73d216",
|
|
Packit Service |
c6b782 |
"#f57900",
|
|
Packit Service |
c6b782 |
"#3465a4",
|
|
Packit Service |
c6b782 |
"#ef2929",
|
|
Packit Service |
c6b782 |
"#75507b",
|
|
Packit Service |
c6b782 |
"#ce5c00",
|
|
Packit Service |
c6b782 |
"#c17d11",
|
|
Packit Service |
c6b782 |
"#cc0000",
|
|
Packit Service |
c6b782 |
};
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
GtkWidget *
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_new (void)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
return g_object_new (DZL_TYPE_CPU_GRAPH, NULL);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static void
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_constructed (GObject *object)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
static DzlCpuModel *model;
|
|
Packit Service |
c6b782 |
DzlCpuGraph *self = (DzlCpuGraph *)object;
|
|
Packit Service |
c6b782 |
guint n_columns;
|
|
Packit Service |
c6b782 |
guint i;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
G_OBJECT_CLASS (dzl_cpu_graph_parent_class)->constructed (object);
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
/*
|
|
Packit Service |
c6b782 |
* Create a model, but allow it to be destroyed after the last
|
|
Packit Service |
c6b782 |
* graph releases it. We will recreate it on demand.
|
|
Packit Service |
c6b782 |
*/
|
|
Packit Service |
c6b782 |
if (model == NULL)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
model = g_object_new (DZL_TYPE_CPU_MODEL,
|
|
Packit Service |
c6b782 |
"timespan", self->timespan,
|
|
Packit Service |
c6b782 |
"max-samples", self->max_samples + 1,
|
|
Packit Service |
c6b782 |
NULL);
|
|
Packit Service |
c6b782 |
g_object_add_weak_pointer (G_OBJECT (model), (gpointer *)&model);
|
|
Packit Service |
c6b782 |
dzl_graph_view_set_model (DZL_GRAPH_VIEW (self), DZL_GRAPH_MODEL (model));
|
|
Packit Service |
c6b782 |
g_object_unref (model);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
else
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
dzl_graph_view_set_model (DZL_GRAPH_VIEW (self), DZL_GRAPH_MODEL (model));
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
n_columns = dzl_graph_view_model_get_n_columns (DZL_GRAPH_MODEL (model));
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
for (i = 0; i < n_columns; i++)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
DzlGraphRenderer *renderer;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
renderer = g_object_new (DZL_TYPE_GRAPH_LINE_RENDERER,
|
|
Packit Service |
c6b782 |
"column", i,
|
|
Packit Service |
c6b782 |
"stroke-color", colors [i % G_N_ELEMENTS (colors)],
|
|
Packit Service |
c6b782 |
NULL);
|
|
Packit Service |
c6b782 |
dzl_graph_view_add_renderer (DZL_GRAPH_VIEW (self), renderer);
|
|
Packit Service |
c6b782 |
g_clear_object (&renderer);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static void
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_get_property (GObject *object,
|
|
Packit Service |
c6b782 |
guint prop_id,
|
|
Packit Service |
c6b782 |
GValue *value,
|
|
Packit Service |
c6b782 |
GParamSpec *pspec)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
DzlCpuGraph *self = DZL_CPU_GRAPH (object);
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
switch (prop_id)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
case PROP_MAX_SAMPLES:
|
|
Packit Service |
c6b782 |
g_value_set_uint (value, self->max_samples);
|
|
Packit Service |
c6b782 |
break;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
case PROP_TIMESPAN:
|
|
Packit Service |
c6b782 |
g_value_set_int64 (value, self->timespan);
|
|
Packit Service |
c6b782 |
break;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
default:
|
|
Packit Service |
c6b782 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static void
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_set_property (GObject *object,
|
|
Packit Service |
c6b782 |
guint prop_id,
|
|
Packit Service |
c6b782 |
const GValue *value,
|
|
Packit Service |
c6b782 |
GParamSpec *pspec)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
DzlCpuGraph *self = DZL_CPU_GRAPH (object);
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
switch (prop_id)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
case PROP_MAX_SAMPLES:
|
|
Packit Service |
c6b782 |
self->max_samples = g_value_get_uint (value);
|
|
Packit Service |
c6b782 |
break;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
case PROP_TIMESPAN:
|
|
Packit Service |
c6b782 |
self->timespan = g_value_get_int64 (value);
|
|
Packit Service |
c6b782 |
break;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
default:
|
|
Packit Service |
c6b782 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static void
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_class_init (DzlCpuGraphClass *klass)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
object_class->constructed = dzl_cpu_graph_constructed;
|
|
Packit Service |
c6b782 |
object_class->get_property = dzl_cpu_graph_get_property;
|
|
Packit Service |
c6b782 |
object_class->set_property = dzl_cpu_graph_set_property;
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
properties [PROP_TIMESPAN] =
|
|
Packit Service |
c6b782 |
g_param_spec_int64 ("timespan",
|
|
Packit Service |
c6b782 |
"Timespan",
|
|
Packit Service |
c6b782 |
"Timespan",
|
|
Packit Service |
c6b782 |
0, G_MAXINT64,
|
|
Packit Service |
c6b782 |
0,
|
|
Packit Service |
c6b782 |
(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
properties [PROP_MAX_SAMPLES] =
|
|
Packit Service |
c6b782 |
g_param_spec_uint ("max-samples",
|
|
Packit Service |
c6b782 |
"Max Samples",
|
|
Packit Service |
c6b782 |
"Max Samples",
|
|
Packit Service |
c6b782 |
0, G_MAXUINT,
|
|
Packit Service |
c6b782 |
120,
|
|
Packit Service |
c6b782 |
(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
g_object_class_install_properties (object_class, LAST_PROP, properties);
|
|
Packit Service |
c6b782 |
}
|
|
Packit Service |
c6b782 |
|
|
Packit Service |
c6b782 |
static void
|
|
Packit Service |
c6b782 |
dzl_cpu_graph_init (DzlCpuGraph *self)
|
|
Packit Service |
c6b782 |
{
|
|
Packit Service |
c6b782 |
self->max_samples = 120;
|
|
Packit Service |
c6b782 |
self->timespan = 60L * G_USEC_PER_SEC;
|
|
Packit Service |
c6b782 |
}
|