sg: 16-byte cdb support and lots of fixes
[fio.git] / gfio.h
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