blob: aa14e3c7d961108c7759bbe9449c2fbea7b65d57 [file] [log] [blame]
Jens Axboe53e0e852012-03-15 19:38:01 +01001#ifndef GFIO_H
2#define GFIO_H
3
4#include <gtk/gtk.h>
5
Jens Axboef762cef2012-03-26 13:51:11 +02006#include "gcompat.h"
Jens Axboe41666582012-03-21 10:25:29 +01007#include "stat.h"
8#include "thread_options.h"
Jens Axboe49c34172012-03-16 12:05:17 +01009#include "ghelpers.h"
Jens Axboe8dfd6072012-03-22 22:10:37 +010010#include "graph.h"
Jens Axboe49c34172012-03-16 12:05:17 +010011
Jens Axboe53e0e852012-03-15 19:38:01 +010012struct probe_widget {
13 GtkWidget *hostname;
14 GtkWidget *os;
15 GtkWidget *arch;
16 GtkWidget *fio_ver;
17};
18
Jens Axboe53e0e852012-03-15 19:38:01 +010019struct 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;
Jens Axboe5442cfb2012-09-24 18:48:46 +020035 GtkWidget *trim_bw;
36 GtkWidget *trim_iops;
Jens Axboe53e0e852012-03-15 19:38:01 +010037};
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;
Jens Axboe8dfd6072012-03-22 22:10:37 +010044 graph_label_t read_iops;
45 graph_label_t write_iops;
Jens Axboe5442cfb2012-09-24 18:48:46 +020046 graph_label_t trim_iops;
Jens Axboe53e0e852012-03-15 19:38:01 +010047 struct graph *bandwidth_graph;
Jens Axboe8dfd6072012-03-22 22:10:37 +010048 graph_label_t read_bw;
49 graph_label_t write_bw;
Jens Axboe5442cfb2012-09-24 18:48:46 +020050 graph_label_t trim_bw;
Jens Axboe53e0e852012-03-15 19:38:01 +010051};
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
Jens Axboeb98ab712012-03-21 12:48:32 +010080 GHashTable *ge_hash;
Jens Axboe53e0e852012-03-15 19:38:01 +010081} 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 {
Jens Axboe53e0e852012-03-15 19:38:01 +0100103 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;
Jens Axboe0cf3ece2012-03-21 10:15:20 +0100132 char *job_file;
133 char *host;
134 int port;
135 int type;
136 int server_start;
Jens Axboe53e0e852012-03-15 19:38:01 +0100137};
138
139struct end_results {
140 struct group_run_stats gs;
141 struct thread_stat ts;
142};
143
Jens Axboecf3d8242012-03-24 08:56:50 +0100144struct gfio_client_options {
145 struct flist_head list;
146 struct thread_options o;
147};
148
Jens Axboe53e0e852012-03-15 19:38:01 +0100149struct gfio_client {
150 struct gui_entry *ge;
151 struct fio_client *client;
152 GtkWidget *err_entry;
Jens Axboed31e26d2012-03-28 21:38:24 +0200153 uint32_t client_cpus;
154 uint64_t client_flags;
Jens Axboe753e9e62012-03-24 20:22:29 +0100155
Jens Axboecf3d8242012-03-24 08:56:50 +0100156 struct flist_head o_list;
Jens Axboe753e9e62012-03-24 20:22:29 +0100157 unsigned int o_list_nr;
Jens Axboe53e0e852012-03-15 19:38:01 +0100158
159 struct end_results *results;
160 unsigned int nr_results;
161
Jens Axboe28db2562012-03-28 10:27:42 +0200162 uint32_t update_job_status;
163 volatile uint32_t update_job_done;
164
Jens Axboe53e0e852012-03-15 19:38:01 +0100165 struct cmd_du_pdu *du;
166 unsigned int nr_du;
167};
168
Jens Axboe53e0e852012-03-15 19:38:01 +0100169#define GFIO_MIME "text/fio"
170
Jens Axboe1252d8f2012-03-21 11:13:31 +0100171extern 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;
Jens Axboe2a95f712012-04-16 11:48:45 +0200177extern GdkColor gfio_color_lightyellow;
Jens Axboe1252d8f2012-03-21 11:13:31 +0100178
Jens Axboe53e0e852012-03-15 19:38:01 +0100179#endif