X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiEvents.c;h=490e9175378cfc666c6b8e6b06e70117966cb40b;hb=1b238973d103680c4f5c37e030afc3314aa96804;hp=ee9fa0f58ab16e9266b49761f928b8ecf8284600;hpb=a0bd2c9981e6fc72170a784cf9b4bfd1666e35df;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiEvents.c b/ltt/branches/poly/lttv/modules/guiEvents.c index ee9fa0f5..490e9175 100644 --- a/ltt/branches/poly/lttv/modules/guiEvents.c +++ b/ltt/branches/poly/lttv/modules/guiEvents.c @@ -96,6 +96,7 @@ typedef struct _EventViewerData { unsigned end_event_index; //the last event shown in the window unsigned size; //maxi number of events loaded when instance the viewer gboolean shown; //indicate if event detail is shown or not + gboolean current_time_updated; char * filter_key; //scroll window containing Tree View @@ -408,7 +409,9 @@ gui_events(MainWindow *parent_window, LttvTracesetSelector * s,char* key ) /* Create vertical scrollbar and pack it */ event_viewer_data->vscroll_vc = gtk_vscrollbar_new(NULL); gtk_range_set_update_policy (GTK_RANGE(event_viewer_data->vscroll_vc), - GTK_UPDATE_DISCONTINUOUS); + GTK_UPDATE_CONTINUOUS); + // Changed by MD : more user friendly :) + //GTK_UPDATE_DISCONTINUOUS); gtk_box_pack_start(GTK_BOX(event_viewer_data->hbox_v), event_viewer_data->vscroll_vc, FALSE, TRUE, 0); /* Get the vertical scrollbar's adjustment */ @@ -457,6 +460,7 @@ gui_events(MainWindow *parent_window, LttvTracesetSelector * s,char* key ) // tree_v_set_cursor(event_viewer_data); event_viewer_data->shown = FALSE; + event_viewer_data->current_time_updated = FALSE; event_viewer_data->size = RESERVE_SMALL_SIZE; g_object_set_data( G_OBJECT(event_viewer_data->hbox_v), @@ -680,7 +684,7 @@ void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) /* On cursor change, modify the currently selected event by calling * the right API function */ tree_v_get_cursor(event_viewer_data); -/* + gtk_tree_view_get_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), &path, NULL); if(gtk_tree_model_get_iter(model,&iter,path)){ gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1); @@ -688,12 +692,14 @@ void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) ltt_time.tv_nsec = time % NANOSECONDS_PER_SECOND; if(ltt_time.tv_sec != event_viewer_data->current_time.tv_sec || - ltt_time.tv_nsec != event_viewer_data->current_time.tv_nsec) + ltt_time.tv_nsec != event_viewer_data->current_time.tv_nsec){ + event_viewer_data->current_time_updated = TRUE; set_current_time(event_viewer_data->mw,<t_time); + } }else{ g_warning("Can not get iter\n"); } -*/ + } @@ -802,6 +808,35 @@ gboolean show_event_detail(void * hook_data, void * call_data) return FALSE; } +void insert_data_into_model(EventViewerData *event_viewer_data, int start, int end) +{ + int i; + guint64 real_data; + RawTraceData * raw_data; + GList * first; + GtkTreeIter iter; + + first = event_viewer_data->raw_trace_data_queue->head; + for(i=start; i=event_viewer_data->number_of_events) break; + raw_data = (RawTraceData*)g_list_nth_data(first, i); + + // Add a new row to the model + real_data = raw_data->time.tv_sec; + real_data *= NANOSECONDS_PER_SECOND; + real_data += raw_data->time.tv_nsec; + gtk_list_store_append (event_viewer_data->store_m, &iter); + gtk_list_store_set (event_viewer_data->store_m, &iter, + CPUID_COLUMN, raw_data->cpu_id, + EVENT_COLUMN, raw_data->event_name, + TIME_COLUMN, real_data, + PID_COLUMN, raw_data->pid, + ENTRY_LEN_COLUMN, raw_data->entry_length, + EVENT_DESCR_COLUMN, raw_data->event_description, + -1); + } +} + void get_test_data(double time_value, guint list_height, EventViewerData *event_viewer_data) { @@ -939,13 +974,15 @@ void get_test_data(double time_value, guint list_height, if(size == 0) get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_CUBE,&size); } - }else size = 1; - if(size > 0) event_number = event_viewer_data->start_event_index + 1; - else event_number = event_viewer_data->start_event_index; + if(size==0) event_number = event_viewer_data->start_event_index; + else event_number = event_viewer_data->number_of_events - size - list_height + 1; + }else event_number = event_viewer_data->start_event_index + 1; break; case SCROLL_PAGE_DOWN: i = event_viewer_data->number_of_events - 1 - list_height; if((gint)(event_viewer_data->end_event_index) >= i){ + int remain_events = event_viewer_data->number_of_events - 1 + - event_viewer_data->end_event_index; event_viewer_data->append = TRUE; first = event_viewer_data->raw_trace_data_queue->head; if(!first)break; @@ -960,11 +997,12 @@ void get_test_data(double time_value, guint list_height, if(size == 0) get_events(event_viewer_data, start, end, RESERVE_SMALL_SIZE_CUBE,&size); } - } - if(list_height <= event_viewer_data->number_of_events - 1 - event_viewer_data->end_event_index) - event_number = event_viewer_data->start_event_index + list_height - 1; - else - event_number = event_viewer_data->number_of_events - 1 - list_height; + remain_events += size; + if(list_height <= remain_events) + event_number = event_viewer_data->number_of_events - remain_events - 1; + else + event_number = event_viewer_data->number_of_events - 1 - list_height; + }else event_number = event_viewer_data->start_event_index + list_height - 1; break; case SCROLL_JUMP: event_viewer_data->append = TRUE; @@ -1044,39 +1082,7 @@ void get_test_data(double time_value, guint list_height, goto LAST; }else gtk_widget_show(event_viewer_data->vscroll_vc); - for(i=event_number; i=event_viewer_data->number_of_events) break; - - raw_data = (RawTraceData*)g_list_nth_data(first, i); - - // Add a new row to the model - real_data = raw_data->time.tv_sec; - real_data *= NANOSECONDS_PER_SECOND; - real_data += raw_data->time.tv_nsec; - gtk_list_store_append (event_viewer_data->store_m, &iter); - gtk_list_store_set (event_viewer_data->store_m, &iter, - CPUID_COLUMN, raw_data->cpu_id, - EVENT_COLUMN, raw_data->event_name, - TIME_COLUMN, real_data, - PID_COLUMN, raw_data->pid, - ENTRY_LEN_COLUMN, raw_data->entry_length, - EVENT_DESCR_COLUMN, raw_data->event_description, - -1); -/* - gtk_list_store_append (event_viewer_data->store_m, &iter); - gtk_list_store_set (event_viewer_data->store_m, &iter, - CPUID_COLUMN, 0, - EVENT_COLUMN, "event irq", - TIME_COLUMN, i, - PID_COLUMN, 100, - ENTRY_LEN_COLUMN, 17, - EVENT_DESCR_COLUMN, "Detailed information", - -1); -*/ - } + insert_data_into_model(event_viewer_data,event_number, event_number+list_height); } #ifdef DEBUG //do not use this, it's slower and broken // } else { @@ -1414,16 +1420,28 @@ gboolean update_current_time(void * hook_data, void * call_data) + event_viewer_data->current_time.tv_nsec; GtkTreeIter iter; guint64 time; - int count = 0; + int count = -1; GtkTreeModel* model = (GtkTreeModel*)event_viewer_data->store_m; + GList * list; + RawTraceData * data, *data1; + GtkTreePath* path; + char str_path[64]; + int i, j; + LttTime t; + + if(event_viewer_data->current_time_updated ){ + event_viewer_data->current_time_updated = FALSE; + return FALSE; + } - + //check if the event is shown in the current viewer if(gtk_tree_model_get_iter_first(model, &iter)){ while(1){ gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1); if(time < nsec){ if(!gtk_tree_model_iter_next(model, &iter)){ - return TRUE; + count = -1; + break; } count++; }else{ @@ -1433,6 +1451,51 @@ gboolean update_current_time(void * hook_data, void * call_data) // event_selected_hook(event_viewer_data, &count); } + //the event is not shown in the current viewer + if(count == -1){ + count = 0; + //check if the event is in the buffer + list = event_viewer_data->raw_trace_data_queue->head; + data = (RawTraceData*)g_list_nth_data(list,0); + data1 = (RawTraceData*)g_list_nth_data(list,event_viewer_data->raw_trace_data_queue->length-1); + + //the event is in the buffer + if(ltt_time_compare(data->time, event_viewer_data->current_time)<=0 && + ltt_time_compare(data1->time, event_viewer_data->current_time)>=0){ + for(i=0;iraw_trace_data_queue->length;i++){ + data = (RawTraceData*)g_list_nth_data(list,i); + if(ltt_time_compare(data->time, event_viewer_data->current_time) < 0){ + count++; + continue; + } + break; + } + if(event_viewer_data->raw_trace_data_queue->length-count < event_viewer_data->num_visible_events){ + j = event_viewer_data->raw_trace_data_queue->length - event_viewer_data->num_visible_events; + count -= j; + data = (RawTraceData*)g_list_nth_data(list,j); + }else{ + j = count; + count = 0; + } + t = ltt_time_sub(data->time, event_viewer_data->time_span.startTime); + event_viewer_data->vadjust_c->value = ltt_time_to_double(t) * NANOSECONDS_PER_SECOND; + g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->vadjust_c), "value-changed"); + event_viewer_data->previous_value = event_viewer_data->vadjust_c->value; + insert_data_into_model(event_viewer_data,j, j+event_viewer_data->num_visible_events); + }else{//the event is not in the buffer + LttTime start = ltt_time_sub(event_viewer_data->current_time, event_viewer_data->time_span.startTime); + double position = ltt_time_to_double(start) * NANOSECONDS_PER_SECOND; + gtk_adjustment_set_value(event_viewer_data->vadjust_c, position); + } + } + + sprintf(str_path,"%d\0",count); + path = gtk_tree_path_new_from_string (str_path); + gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); + g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->tree_v), "cursor-changed"); + gtk_tree_path_free(path); + return FALSE; } @@ -1499,7 +1562,7 @@ void update_raw_data_array(EventViewerData* event_viewer_data, unsigned size) } } - for(i=0;iraw_trace_data_queue_tmp->length-1;i++){ + for(i=0;iraw_trace_data_queue_tmp->length;i++){ data = (RawTraceData*)g_list_nth_data(tmpList,i); len = data->pid==0 ? -2 : data->pid; if(data->cpu_id+1 > tmp_pid_array->len){ @@ -1515,7 +1578,7 @@ void update_raw_data_array(EventViewerData* event_viewer_data, unsigned size) } } }else{ - for(i=0;iraw_trace_data_queue->length-1;i++){ + for(i=0;iraw_trace_data_queue->length;i++){ data = (RawTraceData*)g_list_nth_data(list,i); len = data->pid==0 ? -2 : data->pid; if(data->cpu_id+1 > pid_array->len){