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 
12 struct probe_widget {
13 	GtkWidget *hostname;
14 	GtkWidget *os;
15 	GtkWidget *arch;
16 	GtkWidget *fio_ver;
17 };
18 
19 struct 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 
39 struct 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  */
56 struct 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 
83 enum {
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 
92 enum {
93 	GFIO_BUTTON_CONNECT = 0,
94 	GFIO_BUTTON_SEND,
95 	GFIO_BUTTON_START,
96 	GFIO_BUTTON_NR,
97 };
98 
99 /*
100  * Notebook entry
101  */
102 struct 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 
139 struct end_results {
140 	struct group_run_stats gs;
141 	struct thread_stat ts;
142 };
143 
144 struct gfio_client_options {
145 	struct flist_head list;
146 	struct thread_options o;
147 };
148 
149 struct 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 
171 extern void gfio_view_log(struct gui *ui);
172 extern void gfio_set_state(struct gui_entry *ge, unsigned int state);
173 extern void clear_ge_ui_info(struct gui_entry *ge);
174 
175 extern const char *gfio_graph_font;
176 extern GdkColor gfio_color_white;
177 extern GdkColor gfio_color_lightyellow;
178 
179 #endif
180