blob: d323acb43082e44e946ab51ad443d43e06f8bd17 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#ifndef _TRACE_GRAPH_H
#define _TRACE_GRAPH_H
#include "trace-cmd.h"
#include "trace-hash.h"
struct graph_info;
typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time);
struct graph_callbacks {
graph_select_cb *select;
};
struct graph_info {
struct tracecmd_input *handle;
struct pevent *pevent;
gint cpus;
GtkWidget *widget; /* Box to hold graph */
GtkWidget *scrollwin; /* graph scroll window */
GtkWidget *info_scrollwin; /* graph scroll window (for info widget) */
GtkWidget *info; /* info window */
GtkWidget *draw;
GdkPixmap *curr_pixmap; /* pixmap backstore */
GdkPixmap *info_pixmap; /* pixmap backstore */
GtkAdjustment *vadj; /* scrollwindow vert adjust */
guint64 start_time; /* True start time of trace */
guint64 end_time; /* True end time of trace */
guint64 view_start_time; /* visible start time */
guint64 view_end_time; /* visible end time */
gint start_x; /* virutal start of visible area */
guint64 cursor; /* time of cursor (double clicked) */
gdouble resolution; /* pixels / time */
gint press_x; /* x where button is pressed */
gint last_x; /* last x seen while moving mouse */
gboolean line_active; /* set when button is pressed */
gdouble vadj_value; /* value to set vadj width */
gdouble vadj_page_size; /* visible size to set vadj */
gint draw_width; /* width of pixmap */
gint draw_height; /* height of pixmap */
gint full_width; /* width of full trace in pixels */
/* This includes non visible part of trace */
struct graph_callbacks *callbacks; /* call back hooks for changes to graph */
gboolean filter_enabled;
gboolean filter_available;
gboolean all_events; /* all events enabled */
gchar **systems; /* event systems to filter on */
gint *event_ids; /* events to filter on */
gint systems_size;
gint event_ids_size;
struct filter_task *task_filter;
gint filter_task_selected;
struct filter_task *hide_tasks;
/* Box info for CPU data info window */
gint cpu_data_x;
gint cpu_data_y;
gint cpu_data_w;
gint cpu_data_h;
gint cpu_x; /* x coord where CPU numbers are drawn */
/* not needed in future */
gchar *test;
};
struct graph_info *
trace_graph_create(struct tracecmd_input *handle);
struct graph_info *
trace_graph_create_with_callbacks(struct tracecmd_input *handle,
struct graph_callbacks *cbs);
void trace_graph_select_by_time(struct graph_info *ginfo, guint64 time);
void trace_graph_event_filter_callback(gboolean accept,
gboolean all_events,
gchar **systems,
gint *events,
gpointer data);
static inline GtkWidget *trace_graph_get_draw(struct graph_info *ginfo)
{
return ginfo->draw;
}
static inline struct graph_callbacks *trace_graph_get_callbacks(struct graph_info *ginfo)
{
return ginfo->callbacks;
}
static inline GtkWidget *trace_graph_get_window(struct graph_info *ginfo)
{
return ginfo->widget;
}
struct filter_task_item *
trace_graph_filter_task_find_pid(struct graph_info *ginfo, gint pid);
struct filter_task_item *
trace_graph_hide_task_find_pid(struct graph_info *ginfo, gint pid);
void trace_graph_filter_toggle(struct graph_info *ginfo);
void trace_graph_filter_add_remove_task(struct graph_info *info,
gint pid);
void trace_graph_filter_hide_show_task(struct graph_info *ginfo,
gint pid);
void trace_graph_clear_tasks(struct graph_info *ginfo);
#endif /* _TRACE_GRAPH_H */
|