+static GtkWidget *disk_performance(Tab * tab);
+
+static gboolean block_read_callback(void *hook_data, void *call_data);
+
+static gboolean block_write_callback(void *hook_data, void *call_data);
+
+
+static gboolean disk_show(void *hook_data, void *call_data){
+
+ guint i;
+ lttv_total_block element;
+ GtkTreeIter iter;
+ LttTime time_interval;
+ guint64 time_interval_64;
+ guint64 temp_variable;
+ guint64 bytes_read_per_sec, bytes_written_per_sec;
+ g_info(" diskperformance: disk_show() \n");
+ DiskPerformanceData *disk_performance = (DiskPerformanceData *)hook_data;
+ GArray *disk_array = disk_performance->disk_array;
+ time_interval = ltt_time_sub(disk_performance->time_window.end_time, disk_performance->time_window.start_time);
+
+ time_interval_64 = time_interval.tv_sec;
+ time_interval_64 *= NANOSECONDS_PER_SECOND;
+ time_interval_64 += time_interval.tv_nsec;
+ gtk_list_store_clear(disk_performance->store_m);
+ for(i = 0; i < disk_array->len; i++){
+
+ element = g_array_index(disk_array,lttv_total_block,i);
+ temp_variable = element.total_bytes_read * NANOSECONDS_PER_SECOND;
+ bytes_read_per_sec = (guint64) temp_variable / time_interval_64;
+
+ temp_variable = element.total_bytes_written * NANOSECONDS_PER_SECOND;
+ bytes_written_per_sec = (guint64) temp_variable / time_interval_64;
+
+ gtk_list_store_append (disk_performance->store_m, &iter);
+ gtk_list_store_set (disk_performance->store_m, &iter,
+ DISKNAME_COLUMN, element.diskname,
+ BYTES_RD_COLUMN, element.total_bytes_read,
+ BYTES_RD_SEC_COLUMN,bytes_read_per_sec,
+ NUM_RD_COLUMN, element.num_read_operations,
+ BYTES_WR_COLUMN, element.total_bytes_written,
+ BYTES_WR_SEC_COLUMN, bytes_written_per_sec,
+ NUM_WR_COLUMN, element.num_write_operations,
+ -1);
+
+ }
+ if(disk_performance->disk_array->len)
+ g_array_remove_range (disk_performance->disk_array,0,disk_performance->disk_array->len);
+ return FALSE;
+}
+
+static gboolean trace_header(void *hook_data, void *call_data){
+ return FALSE;
+}
+
+
+static gboolean disk_update_time_window(void * hook_data, void * call_data){
+
+ DiskPerformanceData *disk_performance = (DiskPerformanceData *) hook_data;
+ const TimeWindowNotifyData *time_window_nofify_data = ((const TimeWindowNotifyData *)call_data);
+ disk_performance->time_window = *time_window_nofify_data->new_time_window;
+ Tab *tab = disk_performance->tab;
+ lttvwindow_events_request_remove_all(tab, disk_performance);
+ request_event( disk_performance);
+
+
+ return FALSE;
+}
+
+void gui_disperformance_free(DiskPerformanceData *eventdata){
+ Tab *tab = eventdata->tab;
+ g_info("disperformance.c : gui_disperformance_free, %p", eventdata);
+ g_info("%p, %p", eventdata, tab);
+ if(tab != NULL)
+ {
+ g_array_free (eventdata->disk_array, TRUE);
+
+ lttvwindow_unregister_time_window_notify(tab,
+ disk_update_time_window,
+ eventdata);
+
+ lttvwindow_events_request_remove_all(eventdata->tab,
+ eventdata);
+ g_disk_data_list = g_slist_remove(g_disk_data_list, eventdata);
+ }
+ g_free(eventdata);
+ g_info("disperformance.c : gui_disperformance_free end, %p", eventdata);
+}
+
+
+
+
+
+
+void disk_destructor_full(DiskPerformanceData *disk_data)
+{
+
+ if(GTK_IS_WIDGET(disk_data->hbox_v))
+ gtk_widget_destroy(disk_data->hbox_v);
+
+}
+
+static void disk_destroy_walk(gpointer data, gpointer user_data)
+{
+ g_info("Walk destroy GUI disk performance Viewer");
+ disk_destructor_full((DiskPerformanceData*)data);
+}
+/**
+ * init function
+ *
+ *
+ * This is the entry point of the viewer.
+ *
+ */
+static void init()
+{
+
+ g_info("Init diskPerformance.c");
+
+ LTT_FACILITY_BLOCK = g_quark_from_string("block");
+ LTT_EVENT_BLOCK_READ = g_quark_from_string("read");
+ LTT_EVENT_BLOCK_WRITE = g_quark_from_string("write");
+
+ lttvwindow_register_constructor("diskperformance",
+ "/",
+ "Insert Disk Performance",
+ hDiskPerformanceInsert_xpm,
+ "Insert Disk Performance",
+ disk_performance);
+}