1#ifndef GFIO_H
2#define GFIO_H
3
4#include <gtk/gtk.h>
5
6#include "gcompat.h"
7#include "stat.h"
8#include "thread_options.h"
9#include "ghelpers.h"
10#include "graph.h"
11
12struct probe_widget {
13	GtkWidget *hostname;
14	GtkWidget *os;
15	GtkWidget *arch;
16	GtkWidget *fio_ver;
17};
18
19struct eta_widget {
20	GtkWidget *names;
21	struct multitext_widget iotype;
22	struct multitext_widget bs;
23	struct multitext_widget ioengine;
24	struct multitext_widget iodepth;
25	GtkWidget *jobs;
26	GtkWidget *files;
27	GtkWidget *read_bw;
28	GtkWidget *read_iops;
29	GtkWidget *cr_bw;
30	GtkWidget *cr_iops;
31	GtkWidget *write_bw;
32	GtkWidget *write_iops;
33	GtkWidget *cw_bw;
34	GtkWidget *cw_iops;
35	GtkWidget *trim_bw;
36	GtkWidget *trim_iops;
37};
38
39struct gfio_graphs {
40#define DRAWING_AREA_XDIM 1000
41#define DRAWING_AREA_YDIM 400
42	GtkWidget *drawing_area;
43	struct graph *iops_graph;
44	graph_label_t read_iops;
45	graph_label_t write_iops;
46	graph_label_t trim_iops;
47	struct graph *bandwidth_graph;
48	graph_label_t read_bw;
49	graph_label_t write_bw;
50	graph_label_t trim_bw;
51};
52
53/*
54 * Main window widgets and data
55 */
56struct gui {
57	GtkUIManager *uimanager;
58	GtkRecentManager *recentmanager;
59	GtkActionGroup *actiongroup;
60	guint recent_ui_id;
61	GtkWidget *menu;
62	GtkWidget *window;
63	GtkWidget *vbox;
64	GtkWidget *thread_status_pb;
65	GtkWidget *buttonbox;
66	GtkWidget *notebook;
67	GtkWidget *error_info_bar;
68	GtkWidget *error_label;
69	GtkListStore *log_model;
70	GtkWidget *log_tree;
71	GtkWidget *log_view;
72	struct gfio_graphs graphs;
73	struct probe_widget probe;
74	struct eta_widget eta;
75	pthread_t server_t;
76
77	pthread_t t;
78	int handler_running;
79
80	GHashTable *ge_hash;
81} main_ui;
82
83enum {
84	GE_STATE_NEW = 1,
85	GE_STATE_CONNECTED,
86	GE_STATE_JOB_SENT,
87	GE_STATE_JOB_STARTED,
88	GE_STATE_JOB_RUNNING,
89	GE_STATE_JOB_DONE,
90};
91
92enum {
93	GFIO_BUTTON_CONNECT = 0,
94	GFIO_BUTTON_SEND,
95	GFIO_BUTTON_START,
96	GFIO_BUTTON_NR,
97};
98
99/*
100 * Notebook entry
101 */
102struct gui_entry {
103	struct gui *ui;
104
105	GtkWidget *vbox;
106	GtkWidget *job_notebook;
107	GtkWidget *thread_status_pb;
108	GtkWidget *buttonbox;
109	GtkWidget *button[GFIO_BUTTON_NR];
110	GtkWidget *notebook;
111	GtkWidget *error_info_bar;
112	GtkWidget *error_label;
113	GtkWidget *results_window;
114	GtkWidget *results_notebook;
115	GtkUIManager *results_uimanager;
116	GtkWidget *results_menu;
117	GtkWidget *disk_util_vbox;
118	GtkListStore *log_model;
119	GtkWidget *log_tree;
120	GtkWidget *log_view;
121	struct gfio_graphs graphs;
122	struct probe_widget probe;
123	struct eta_widget eta;
124	GtkWidget *page_label;
125	gint page_num;
126	unsigned int state;
127
128	struct graph *clat_graph;
129	struct graph *lat_bucket_graph;
130
131	struct gfio_client *client;
132	char *job_file;
133	char *host;
134	int port;
135	int type;
136	int server_start;
137};
138
139struct end_results {
140	struct group_run_stats gs;
141	struct thread_stat ts;
142};
143
144struct gfio_client_options {
145	struct flist_head list;
146	struct thread_options o;
147};
148
149struct gfio_client {
150	struct gui_entry *ge;
151	struct fio_client *client;
152	GtkWidget *err_entry;
153	uint32_t client_cpus;
154	uint64_t client_flags;
155
156	struct flist_head o_list;
157	unsigned int o_list_nr;
158
159	struct end_results *results;
160	unsigned int nr_results;
161
162	uint32_t update_job_status;
163	volatile uint32_t update_job_done;
164
165	struct cmd_du_pdu *du;
166	unsigned int nr_du;
167};
168
169#define GFIO_MIME	"text/fio"
170
171extern void gfio_view_log(struct gui *ui);
172extern void gfio_set_state(struct gui_entry *ge, unsigned int state);
173extern void clear_ge_ui_info(struct gui_entry *ge);
174
175extern const char *gfio_graph_font;
176extern GdkColor gfio_color_white;
177extern GdkColor gfio_color_lightyellow;
178
179#endif
180