From 643870cda9a3a4ab78bdf019413fcc729620f1f4 Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Tue, 12 Nov 2013 15:32:59 +0000 Subject: [PATCH] Added an instance column. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4370 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../utils/itti_analyzer/libparser/xml_parse.c | 1 + .../itti_analyzer/libresolver/locate_root.c | 10 +++ .../itti_analyzer/libresolver/locate_root.h | 3 + .../utils/itti_analyzer/libui/ui_callbacks.c | 3 +- .../utils/itti_analyzer/libui/ui_tree_view.c | 65 ++++++++++++------- .../utils/itti_analyzer/libui/ui_tree_view.h | 8 ++- 6 files changed, 64 insertions(+), 26 deletions(-) diff --git a/common/utils/itti_analyzer/libparser/xml_parse.c b/common/utils/itti_analyzer/libparser/xml_parse.c index f8ead59e9..400f9c36f 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.c +++ b/common/utils/itti_analyzer/libparser/xml_parse.c @@ -778,6 +778,7 @@ static int xml_parse_doc(xmlDocPtr doc) { CHECK_FCT(locate_type("MessagesIds", head, &messages_id_enum)); CHECK_FCT(locate_type("originTaskId", head, &origin_task_id_type)); CHECK_FCT(locate_type("destinationTaskId", head, &destination_task_id_type)); + CHECK_FCT(locate_type("instance", head, &instance_type)); // root->type_hr_display(root, 0); update_filters(); if (dissect_file != NULL) { diff --git a/common/utils/itti_analyzer/libresolver/locate_root.c b/common/utils/itti_analyzer/libresolver/locate_root.c index 8a6ff9487..083d84523 100644 --- a/common/utils/itti_analyzer/libresolver/locate_root.c +++ b/common/utils/itti_analyzer/libresolver/locate_root.c @@ -13,6 +13,7 @@ types_t *messages_id_enum = NULL; types_t *origin_task_id_type = NULL; types_t *destination_task_id_type = NULL; +types_t *instance_type = NULL; int locate_root(const char *root_name, types_t *head, types_t **root_elm) { types_t *next_type; @@ -114,6 +115,15 @@ char *get_destination_task_id(buffer_t *buffer) { return destination_task_id; } +uint32_t get_instance(buffer_t *buffer) { + uint32_t instance_value; + + /* Fetch instance value */ + buffer_fetch_bits (buffer, instance_type->offset, instance_type->child->child->child->size, &instance_value); + + return instance_value; +} + char *message_id_to_string(uint32_t message_id) { return enum_type_get_name_from_value(messages_id_enum, message_id); diff --git a/common/utils/itti_analyzer/libresolver/locate_root.h b/common/utils/itti_analyzer/libresolver/locate_root.h index 96b489e0d..e38b6bdea 100644 --- a/common/utils/itti_analyzer/libresolver/locate_root.h +++ b/common/utils/itti_analyzer/libresolver/locate_root.h @@ -4,6 +4,7 @@ extern types_t *messages_id_enum; extern types_t *origin_task_id_type; extern types_t *destination_task_id_type; +extern types_t *instance_type; int locate_root(const char *root_name, types_t *head, types_t **root); @@ -17,4 +18,6 @@ char *get_origin_task_id(buffer_t *buffer); char *get_destination_task_id(buffer_t *buffer); +uint32_t get_instance(buffer_t *buffer); + #endif /* LOCATE_ROOT_H_ */ diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index 10f01fec0..0190a4077 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -119,7 +119,8 @@ void ui_signal_add_to_list(gpointer data, gpointer user_data) get_message_id (root, signal_buffer, &signal_buffer->message_id); ui_tree_view_new_signal_ind (signal_buffer->message_number, message_id_to_string (signal_buffer->message_id), - get_origin_task_id (signal_buffer), get_destination_task_id (signal_buffer), data); + get_origin_task_id (signal_buffer), get_destination_task_id (signal_buffer), + get_instance (signal_buffer), data); /* Increment number of messages */ ui_main_data.nb_message_received++; diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 610baee6d..834e1600b 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -18,16 +18,15 @@ typedef struct { GtkListStore *store; GtkTreeModelFilter *filtered; - guint filtered_last_msg; - guint filtered_msg_number; + uint32_t filtered_last_msg; + uint32_t filtered_msg_number; } ui_store_t; static ui_store_t ui_store; static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, ui_store_t *store) { - char *msg_number; - guint number = 0; + uint32_t msg_number; char *message; char *origin_task; char *destination_task; @@ -35,17 +34,16 @@ static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, gtk_tree_model_get (model, iter, COL_MSG_NUM, &msg_number, COL_SIGNAL, &message, COL_FROM_TASK, &origin_task, COL_TO_TASK, &destination_task, -1); - if (msg_number != NULL) + if (msg_number != 0) { - number = atoi (msg_number); enabled = ui_filters_message_enabled (message, origin_task, destination_task); - if ((enabled) && (ui_store.filtered_last_msg < number)) + if ((enabled) && (ui_store.filtered_last_msg < msg_number)) { - ui_store.filtered_last_msg = number; + ui_store.filtered_last_msg = msg_number; ui_store.filtered_msg_number++; } - // g_debug("%x %x %d %s %s %s %d %d", (int) model, (int) iter, number, message, origin_task, destination_task, enabled, ui_store.filtered_msg_number); + g_debug("%x %x %d %s %s %s %d %d", (int) model, (int) iter, msg_number, message, origin_task, destination_task, enabled, ui_store.filtered_msg_number); } g_free (message); @@ -84,17 +82,32 @@ ui_tree_view_init_list(GtkWidget *list) g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(ui_callback_on_tree_column_header_click), (gpointer) COL_TO_TASK); + column = gtk_tree_view_column_new_with_attributes( + "Ins", renderer, "text", COL_INSTANCE, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); + ui_store.store = gtk_list_store_new(NUM_COLS, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_STRING, + G_TYPE_UINT, // COL_MSG_NUM + G_TYPE_STRING, // COL_SIGNAL + G_TYPE_STRING, // COL_FROM_TASK + G_TYPE_STRING, // COL_TO_TASK + G_TYPE_UINT, // COL_INSTANCE + /* HACK: add id of message fields to speed-up filtering + */ + G_TYPE_UINT, // COL_SIGNAL_ID + G_TYPE_UINT, // COL_FROM_TASK_ID + G_TYPE_UINT, // COL_TO_TASK_ID /* HACK: add a reference to the buffer here * to avoid maintining multiple lists. * The reference is not displayed */ G_TYPE_POINTER); + if(ui_store.store == NULL) + { + g_error("gtk_list_store_new failed"); + } + ui_store.filtered = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL (ui_store.store), NULL)); gtk_tree_model_filter_set_visible_func (ui_store.filtered, (GtkTreeModelFilterVisibleFunc) ui_tree_filter_messages, @@ -105,20 +118,24 @@ ui_tree_view_init_list(GtkWidget *list) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(list)); } -static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *message_number, +static void ui_tree_view_add_to_list(GtkWidget *list, const uint32_t message_number, const gchar *signal_name, const char *origin_task, - const char *to_task, gpointer buffer) + const char *to_task, uint32_t instance, gpointer buffer) { GtkTreeIter iter; gtk_list_store_append(ui_store.store, &iter); gtk_list_store_set(ui_store.store, &iter, /* Columns */ - COL_MSG_NUM , message_number, - COL_SIGNAL , signal_name, - COL_FROM_TASK , origin_task, - COL_TO_TASK , to_task, - COL_BUFFER , buffer, + COL_MSG_NUM , message_number, + COL_SIGNAL , signal_name, + COL_FROM_TASK , origin_task, + COL_TO_TASK , to_task, + COL_INSTANCE , instance, + COL_SIGNAL_ID , 0, + COL_FROM_TASK_ID , 0, + COL_TO_TASK_ID , 0, + COL_BUFFER , buffer, /* End of columns */ -1); } @@ -162,7 +179,7 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) ui_tree_view_init_list(ui_main_data.signalslist); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(ui_main_data.signalslist), TRUE); - gtk_widget_set_size_request(GTK_WIDGET(scrolled_window), 500, -1); + gtk_widget_set_size_request(GTK_WIDGET(scrolled_window), 530, -1); gtk_box_pack_start(GTK_BOX(hbox), scrolled_window, FALSE, FALSE, 0); ui_main_data.text_view = ui_signal_dissect_new(hbox); @@ -178,14 +195,14 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) } int ui_tree_view_new_signal_ind(const uint32_t message_number, const char *signal_name, - const char *origin_task, const char *to_task, gpointer buffer) + const char *origin_task, const char *to_task, uint32_t instance, gpointer buffer) { gchar message_number_str[11]; sprintf(message_number_str, "%u", message_number); - ui_tree_view_add_to_list(ui_main_data.signalslist, message_number_str, signal_name, - origin_task, to_task, (buffer_t *)buffer); + ui_tree_view_add_to_list(ui_main_data.signalslist, message_number, signal_name, + origin_task, to_task, instance, (buffer_t *)buffer); return RC_OK; } diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.h b/common/utils/itti_analyzer/libui/ui_tree_view.h index 8c5ce9c16..532ee178f 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.h +++ b/common/utils/itti_analyzer/libui/ui_tree_view.h @@ -7,6 +7,12 @@ typedef enum COL_SIGNAL, COL_FROM_TASK, COL_TO_TASK, + COL_INSTANCE, + + COL_SIGNAL_ID, + COL_FROM_TASK_ID, + COL_TO_TASK_ID, + COL_BUFFER, NUM_COLS } col_type_e; @@ -14,7 +20,7 @@ typedef enum int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox); int ui_tree_view_new_signal_ind(const uint32_t message_number, const char *signal_name, - const char *origin_task, const char *to_task, gpointer buffer); + const char *origin_task, const char *to_task, uint32_t instance, gpointer buffer); void ui_tree_view_destroy_list(GtkWidget *list); -- GitLab