mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof-gtk: allow tracks to format values for display
This commit is contained in:
@ -38,6 +38,7 @@ typedef enum _LineFlags
|
|||||||
LINE_FLAGS_NO_SPLINE = 1 << 1,
|
LINE_FLAGS_NO_SPLINE = 1 << 1,
|
||||||
LINE_FLAGS_FILL = 1 << 2,
|
LINE_FLAGS_FILL = 1 << 2,
|
||||||
LINE_FLAGS_IGNORE_RANGE_ON_SUBCHART = 1 << 3,
|
LINE_FLAGS_IGNORE_RANGE_ON_SUBCHART = 1 << 3,
|
||||||
|
LINE_FLAGS_FORMAT_MEMORY = 1 << 4,
|
||||||
} LineFlags;
|
} LineFlags;
|
||||||
|
|
||||||
typedef struct _SysprofTrackSamples
|
typedef struct _SysprofTrackSamples
|
||||||
@ -102,7 +103,8 @@ static const SysprofTrackCounter discovery_counters[] = {
|
|||||||
{ N_("Memory"),
|
{ N_("Memory"),
|
||||||
"Memory", "Used",
|
"Memory", "Used",
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
LINE_FLAGS_FILL,
|
.0, .0,
|
||||||
|
LINE_FLAGS_FILL | LINE_FLAGS_FORMAT_MEMORY,
|
||||||
},
|
},
|
||||||
|
|
||||||
{ N_("FPS"), "gtk", "fps", "gtk", "*",
|
{ N_("FPS"), "gtk", "fps", "gtk", "*",
|
||||||
@ -383,6 +385,15 @@ create_chart_for_counters (SysprofTrack *track,
|
|||||||
return GTK_WIDGET (chart);
|
return GTK_WIDGET (chart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
format_value_as_memory (SysprofTrack *track,
|
||||||
|
SysprofDocumentCounterValue *value,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
gint64 v = sysprof_document_counter_value_get_value_int64 (value);
|
||||||
|
return g_format_size (v);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_session_discover_counters (SysprofSession *self,
|
sysprof_session_discover_counters (SysprofSession *self,
|
||||||
SysprofDocument *document,
|
SysprofDocument *document,
|
||||||
@ -421,6 +432,12 @@ sysprof_session_discover_counters (SysprofSession *self,
|
|||||||
"title", info->track_name,
|
"title", info->track_name,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
if ((info->flags & LINE_FLAGS_FORMAT_MEMORY) != 0)
|
||||||
|
g_signal_connect (track,
|
||||||
|
"format-item-for-display",
|
||||||
|
G_CALLBACK (format_value_as_memory),
|
||||||
|
NULL);
|
||||||
|
|
||||||
g_signal_connect_data (track,
|
g_signal_connect_data (track,
|
||||||
"create-chart",
|
"create-chart",
|
||||||
G_CALLBACK (create_chart_for_counters),
|
G_CALLBACK (create_chart_for_counters),
|
||||||
@ -453,6 +470,12 @@ sysprof_session_discover_counters (SysprofSession *self,
|
|||||||
"title", sysprof_document_counter_get_name (subtrack_counter),
|
"title", sysprof_document_counter_get_name (subtrack_counter),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
if ((info->flags & LINE_FLAGS_FORMAT_MEMORY) != 0)
|
||||||
|
g_signal_connect (subtrack,
|
||||||
|
"format-item-for-display",
|
||||||
|
G_CALLBACK (format_value_as_memory),
|
||||||
|
NULL);
|
||||||
|
|
||||||
g_signal_connect_data (subtrack,
|
g_signal_connect_data (subtrack,
|
||||||
"create-chart",
|
"create-chart",
|
||||||
G_CALLBACK (create_chart_for_counters),
|
G_CALLBACK (create_chart_for_counters),
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "sysprof-session.h"
|
#include "sysprof-session.h"
|
||||||
|
#include "sysprof-track.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@ -28,6 +29,7 @@ void _sysprof_session_discover_tracks (SysprofSession *session,
|
|||||||
SysprofDocument *document,
|
SysprofDocument *document,
|
||||||
GListStore *tracks);
|
GListStore *tracks);
|
||||||
char *_sysprof_session_describe (SysprofSession *self,
|
char *_sysprof_session_describe (SysprofSession *self,
|
||||||
|
SysprofTrack *track,
|
||||||
gpointer item);
|
gpointer item);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
#include "sysprof-session-private.h"
|
#include "sysprof-session-private.h"
|
||||||
#include "sysprof-track.h"
|
#include "sysprof-track-private.h"
|
||||||
#include "sysprof-value-axis.h"
|
#include "sysprof-value-axis.h"
|
||||||
|
|
||||||
struct _SysprofSession
|
struct _SysprofSession
|
||||||
@ -420,13 +420,19 @@ append_time_string (GString *str,
|
|||||||
|
|
||||||
char *
|
char *
|
||||||
_sysprof_session_describe (SysprofSession *self,
|
_sysprof_session_describe (SysprofSession *self,
|
||||||
|
SysprofTrack *track,
|
||||||
gpointer item)
|
gpointer item)
|
||||||
{
|
{
|
||||||
|
g_autofree char *text = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (SYSPROF_IS_SESSION (self), NULL);
|
g_return_val_if_fail (SYSPROF_IS_SESSION (self), NULL);
|
||||||
|
|
||||||
if (self->document == NULL)
|
if (self->document == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if ((text = _sysprof_track_format_item_for_display (track, item)))
|
||||||
|
return g_steal_pointer (&text);
|
||||||
|
|
||||||
if (SYSPROF_IS_DOCUMENT_MARK (item))
|
if (SYSPROF_IS_DOCUMENT_MARK (item))
|
||||||
{
|
{
|
||||||
SysprofDocumentMark *mark = item;
|
SysprofDocumentMark *mark = item;
|
||||||
|
|||||||
@ -24,8 +24,10 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
GtkWidget *_sysprof_track_create_chart (SysprofTrack *track);
|
GtkWidget *_sysprof_track_create_chart (SysprofTrack *self);
|
||||||
void _sysprof_track_add_subtrack (SysprofTrack *self,
|
void _sysprof_track_add_subtrack (SysprofTrack *self,
|
||||||
SysprofTrack *subtrack);
|
SysprofTrack *subtrack);
|
||||||
|
char *_sysprof_track_format_item_for_display (SysprofTrack *self,
|
||||||
|
gpointer item);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -42,6 +42,7 @@ enum {
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
CREATE_CHART,
|
CREATE_CHART,
|
||||||
|
FORMAT_ITEM_FOR_DISPLAY,
|
||||||
N_SIGNALS
|
N_SIGNALS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -160,6 +161,15 @@ sysprof_track_class_init (SysprofTrackClass *klass)
|
|||||||
g_signal_accumulator_first_wins, NULL,
|
g_signal_accumulator_first_wins, NULL,
|
||||||
NULL,
|
NULL,
|
||||||
GTK_TYPE_WIDGET, 0);
|
GTK_TYPE_WIDGET, 0);
|
||||||
|
|
||||||
|
signals[FORMAT_ITEM_FOR_DISPLAY] =
|
||||||
|
g_signal_new ("format-item-for-display",
|
||||||
|
G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0,
|
||||||
|
g_signal_accumulator_first_wins, NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_STRING, 1, G_TYPE_OBJECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -245,3 +255,17 @@ _sysprof_track_create_chart (SysprofTrack *self)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
_sysprof_track_format_item_for_display (SysprofTrack *self,
|
||||||
|
gpointer item)
|
||||||
|
{
|
||||||
|
char *ret = NULL;
|
||||||
|
|
||||||
|
g_return_val_if_fail (SYSPROF_IS_TRACK (self), NULL);
|
||||||
|
g_return_val_if_fail (G_IS_OBJECT (item), NULL);
|
||||||
|
|
||||||
|
g_signal_emit (self, signals[FORMAT_ITEM_FOR_DISPLAY], 0, item, &ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|||||||
@ -94,9 +94,11 @@ set_motion (SysprofTracksView *self,
|
|||||||
if (pick != NULL)
|
if (pick != NULL)
|
||||||
{
|
{
|
||||||
SysprofChartLayer *layer = SYSPROF_CHART_LAYER (gtk_widget_get_ancestor (pick, SYSPROF_TYPE_CHART_LAYER));
|
SysprofChartLayer *layer = SYSPROF_CHART_LAYER (gtk_widget_get_ancestor (pick, SYSPROF_TYPE_CHART_LAYER));
|
||||||
|
SysprofTrackView *track_view = SYSPROF_TRACK_VIEW (gtk_widget_get_ancestor (pick, SYSPROF_TYPE_TRACK_VIEW));
|
||||||
|
|
||||||
if (layer != NULL)
|
if (layer != NULL && track_view != NULL)
|
||||||
{
|
{
|
||||||
|
SysprofTrack *track = sysprof_track_view_get_track (track_view);
|
||||||
g_autoptr(GObject) item = NULL;
|
g_autoptr(GObject) item = NULL;
|
||||||
g_autofree char *text = NULL;
|
g_autofree char *text = NULL;
|
||||||
double layer_x;
|
double layer_x;
|
||||||
@ -107,7 +109,7 @@ set_motion (SysprofTracksView *self,
|
|||||||
x, y, &layer_x, &layer_y);
|
x, y, &layer_x, &layer_y);
|
||||||
|
|
||||||
if ((item = sysprof_chart_layer_lookup_item (layer, layer_x, layer_y)))
|
if ((item = sysprof_chart_layer_lookup_item (layer, layer_x, layer_y)))
|
||||||
text = _sysprof_session_describe (self->session, item);
|
text = _sysprof_session_describe (self->session, track, item);
|
||||||
|
|
||||||
gtk_label_set_label (self->informative, text);
|
gtk_label_set_label (self->informative, text);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user