Пример #1
0
/**
 * ppg_memory_instrument_process_cb:
 * @instrument: A #PpgMemoryInstrument.
 *
 * Creates the process memory usage visualizer to be embedded in the
 * instrument view.
 *
 * Returns: A PpgVisualizer.
 */
static PpgVisualizer*
ppg_memory_instrument_process_cb (PpgMemoryInstrument *instrument)
{
	PpgMemoryInstrumentPrivate *priv;
	PpgLineVisualizer *visualizer;
	PpgColorIter iter;

	g_return_val_if_fail(PPG_IS_MEMORY_INSTRUMENT(instrument), NULL);

	priv = instrument->priv;

	visualizer = g_object_new(PPG_TYPE_LINE_VISUALIZER,
	                          "name", "process",
	                          "title", _("Process Memory Usage"),
	                          NULL);

	ppg_color_iter_init(&iter);
	ppg_line_visualizer_append(visualizer, _("Size"), &iter.color,
	                           FALSE, priv->model, COLUMN_SIZE);

	ppg_color_iter_next(&iter);
	ppg_line_visualizer_append(visualizer, _("Resident"), &iter.color,
	                           FALSE, priv->model, COLUMN_RESIDENT);

	ppg_color_iter_next(&iter);
	ppg_line_visualizer_append(visualizer, _("Share"), &iter.color,
	                           FALSE, priv->model, COLUMN_SHARE);

	ppg_color_iter_next(&iter);
	ppg_line_visualizer_append(visualizer, _("Text"), &iter.color,
	                           FALSE, priv->model, COLUMN_TEXT);

	ppg_color_iter_next(&iter);
	ppg_line_visualizer_append(visualizer, _("Data"), &iter.color,
	                           FALSE, priv->model, COLUMN_DATA);

	return PPG_VISUALIZER(visualizer);
}
Пример #2
0
static void
ppg_line_visualizer_draw (PpgVisualizer *visualizer)
{
	PpgLineVisualizerPrivate *priv;
	PpgModelIter iter;
	Line *line;
	PpgColorIter color;
	cairo_t *cr;
	GValue value = { 0 };
	gfloat height;
	gfloat width;
	gdouble x;
	gdouble y;
	gdouble begin;
	gdouble end;
	gdouble lower;
	gdouble upper;
	gdouble val = 0;
	gint i;

	g_return_if_fail(PPG_IS_LINE_VISUALIZER(visualizer));

	priv = PPG_LINE_VISUALIZER(visualizer)->priv;

	clutter_cairo_texture_clear(CLUTTER_CAIRO_TEXTURE(priv->actor));
	cr = clutter_cairo_texture_create(CLUTTER_CAIRO_TEXTURE(priv->actor));

	g_object_get(visualizer,
	             "begin", &begin,
	             "end", &end,
	             NULL);

	g_object_get(priv->actor,
	             "width", &width,
	             "height", &height,
	             NULL);

	/* FIXME: */
	lower = 0;
	upper = 200;

	ppg_color_iter_init(&color);

	cairo_set_line_width(cr, 1.0);

	for (i = 0; i < priv->lines->len; i++) {
		line = &g_array_index(priv->lines, Line, i);
		cairo_move_to(cr, 0, height);
		gdk_cairo_set_source_color(cr, &color.color);

		if (!ppg_model_get_iter_first(line->model, &iter)) {
			goto next;
		}

		do {
			ppg_model_get_value(line->model, &iter, line->key, &value);
			if (G_VALUE_HOLDS(&value, G_TYPE_DOUBLE)) {
				val = g_value_get_double(&value);
			} else if (G_VALUE_HOLDS(&value, G_TYPE_INT)) {
				val = g_value_get_int(&value);
			} else if (G_VALUE_HOLDS(&value, G_TYPE_UINT)) {
				val = g_value_get_uint(&value);
			} else {
				g_critical("HOLDS %s", g_type_name(value.g_type));
				g_assert_not_reached();
			}
			x = get_x_offset(begin, end, width, iter.time);
			y = get_y_offset(lower, upper, height, val);
			cairo_line_to(cr, x, y);
			g_value_unset(&value);
		} while (ppg_model_iter_next(line->model, &iter));

		cairo_stroke(cr);

	  next:
		ppg_color_iter_next(&color);
	}

	cairo_destroy(cr);
}