- EventFields * data;
- if(size > 0){
- int pid, tmpPid, i,j,len;
- GList * list, *tmpList;
- GArray * pid_array, * tmp_pid_array;
-
- pid_array = g_array_sized_new(FALSE, TRUE, sizeof(int), 10);
- tmp_pid_array = g_array_sized_new(FALSE, TRUE, sizeof(int), 10);
-
- //if the queue is full, remove some data, keep the size of the queue constant
- while(event_viewer_data->event_fields_queue->length + size > RESERVE_BIG_SIZE){
- remove_item_from_queue(event_viewer_data->event_fields_queue,
- event_viewer_data->append);
- }
-
- //update pid if it is not known
- if(event_viewer_data->event_fields_queue->length > 0){
- list = event_viewer_data->event_fields_queue->head;
- tmpList = event_viewer_data->event_fields_queue_tmp->head;
- if(event_viewer_data->append){
- for(i=(gint)event_viewer_data->event_fields_queue->length-1;i>=0;i--){
- data = (EventFields*)g_list_nth_data(list,i);
- len = data->pid==0 ? -2 : data->pid;
- if(data->cpu_id+1 > pid_array->len){
- pid_array = g_array_set_size(pid_array,data->cpu_id+1);
- pid_array = g_array_insert_val(pid_array,data->cpu_id,len);
- pid_array = g_array_remove_index(pid_array,data->cpu_id+1);
- }else if(data->cpu_id+1 < pid_array->len){
- pid = g_array_index(pid_array,int,data->cpu_id);
- if(pid == 0){
- pid_array = g_array_insert_val(pid_array,data->cpu_id,len);
- pid_array = g_array_remove_index(pid_array,data->cpu_id+1);
- }
- }
- }
-
- for(i=0;i<(gint)event_viewer_data->event_fields_queue_tmp->length;i++){
- data = (EventFields*)g_list_nth_data(tmpList,i);
- len = data->pid==0 ? -2 : data->pid;
- if(data->cpu_id+1 > tmp_pid_array->len){
- tmp_pid_array = g_array_set_size(tmp_pid_array,data->cpu_id+1);
- tmp_pid_array = g_array_insert_val(tmp_pid_array,data->cpu_id,len);
- tmp_pid_array = g_array_remove_index(tmp_pid_array,data->cpu_id+1);
- }else if(data->cpu_id+1 < tmp_pid_array->len){
- pid = g_array_index(tmp_pid_array,int,data->cpu_id);
- if(pid == 0){
- tmp_pid_array = g_array_insert_val(tmp_pid_array,data->cpu_id,len);
- tmp_pid_array = g_array_remove_index(tmp_pid_array,data->cpu_id+1);
- }
- }
- }
- }else{
- for(i=0;i<(gint)event_viewer_data->event_fields_queue->length;i++){
- data = (EventFields*)g_list_nth_data(list,i);
- len = data->pid==0 ? -2 : data->pid;
- if(data->cpu_id+1 > pid_array->len){
- pid_array = g_array_set_size(pid_array,data->cpu_id+1);
- pid_array = g_array_insert_val(pid_array,data->cpu_id,len);
- pid_array = g_array_remove_index(pid_array,data->cpu_id+1);
- }else if(data->cpu_id+1 < pid_array->len){
- pid = g_array_index(pid_array,int,data->cpu_id);
- if(pid == 0){
- pid_array = g_array_insert_val(pid_array,data->cpu_id,len);
- pid_array = g_array_remove_index(pid_array,data->cpu_id+1);
- }
- }
- }
-
- for(i=(gint)event_viewer_data->event_fields_queue_tmp->length-1;i>=0;i--){
- data = (EventFields*)g_list_nth_data(tmpList,i);
- len = data->pid==0 ? -2 : data->pid;
- if(data->cpu_id+1 > tmp_pid_array->len){
- tmp_pid_array = g_array_set_size(tmp_pid_array,data->cpu_id+1);
- tmp_pid_array = g_array_insert_val(tmp_pid_array,data->cpu_id,len);
- tmp_pid_array = g_array_remove_index(tmp_pid_array,data->cpu_id+1);
- }else if(data->cpu_id+1 < tmp_pid_array->len){
- pid = g_array_index(tmp_pid_array,int,data->cpu_id);
- if(pid == 0){
- tmp_pid_array = g_array_insert_val(tmp_pid_array,data->cpu_id,len);
- tmp_pid_array = g_array_remove_index(tmp_pid_array,data->cpu_id+1);
- }
- }
- }
- }
-
- len = (pid_array->len > tmp_pid_array->len) ?
- tmp_pid_array->len : pid_array->len;
- for(j=0;j<len;j++){
- pid = g_array_index(pid_array,int, j);
- tmpPid = g_array_index(tmp_pid_array,int,j);
- if(pid == -2)pid = 0;
- if(tmpPid == -2) tmpPid = 0;
-
- if(pid == -1 && tmpPid != -1){
- for(i=0;i<(gint)event_viewer_data->event_fields_queue->length;i++){
- data = (EventFields*)g_list_nth_data(list,i);
- if(data->pid == -1 && (gint)data->cpu_id == j) data->pid = tmpPid;
- }
- }else if(pid != -1 && tmpPid == -1){
- for(i=0;i<(gint)event_viewer_data->event_fields_queue_tmp->length;i++){
- data = (EventFields*)g_list_nth_data(tmpList,i);
- if(data->pid == -1 && (gint)data->cpu_id == j) data->pid = pid;
- }
- }
- }
- }
-
- g_array_free(pid_array,TRUE);
- g_array_free(tmp_pid_array, TRUE);
-
- //add data from tmp queue into the queue
- event_viewer_data->number_of_events =
- event_viewer_data->event_fields_queue->length
- + event_viewer_data->event_fields_queue_tmp->length;
- if(event_viewer_data->append){
- if(event_viewer_data->event_fields_queue->length > 0)
- event_viewer_data->current_event_index = event_viewer_data->event_fields_queue->length - 1;
- else event_viewer_data->current_event_index = 0;
- while((data = g_queue_pop_head(event_viewer_data->event_fields_queue_tmp)) != NULL){
- g_queue_push_tail(event_viewer_data->event_fields_queue, data);
- }
- }else{
- event_viewer_data->current_event_index += event_viewer_data->event_fields_queue_tmp->length;
- while((data = g_queue_pop_tail(event_viewer_data->event_fields_queue_tmp)) != NULL){
- g_queue_push_head(event_viewer_data->event_fields_queue, data);
- }
- }
- }
-}
-
-void get_events(EventViewerData* event_viewer_data, LttTime start,
- LttTime end,unsigned max_num_events, unsigned * real_num_events)
-{
- LttvTracesetContext * tsc = lttvwindow_get_traceset_context(event_viewer_data->tab);
- Tab *tab = event_viewer_data->tab;
-
- //add_context_hooks(event_viewer_data,tsc);
- //seek state because we use the main window's traceset context.
- lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc), start);
- lttv_process_traceset_middle(tsc, start, G_MAXUINT, NULL);
- lttv_process_traceset_begin(tsc,
- NULL,
- NULL,
- NULL,
- event_viewer_data->event_hooks,
- NULL);
- if(event_viewer_data->append == TRUE) {
- /* append data */
- lttv_process_traceset_middle(tsc, end, max_num_events, NULL);
- } else{
- guint count;
- LttvTracefileContext *tfc;
- /* prepend data */
- do {
- /* clear the temp list */
- while(g_queue_pop_head(event_viewer_data->event_fields_queue_tmp));
- /* read max_num events max */
- count = lttv_process_traceset_middle(tsc, end, max_num_events, NULL);
- /* loop if reached the max number of events to read, but not
- * if end of trace or end time reached.*/
- tfc = lttv_traceset_context_get_current_tfc(tsc);
- } while(max_num_events == count
- && (tfc != NULL && ltt_time_compare(tfc->timestamp, end) < 0));
-
- }
-
- //remove_context_hooks(event_viewer_data,tsc);
- lttv_process_traceset_end(tsc,
- NULL,
- NULL,
- NULL,
- event_viewer_data->event_hooks,
- NULL);
- int size;
-
- size = event_viewer_data->event_fields_queue_tmp->length;
- *real_num_events = size;
-
- update_raw_data_array(event_viewer_data,size);
-
-#if 0
- EventsRequest *events_request = g_new(EventsRequest, 1);
- // Create the hooks
- LttvHooks *event = lttv_hooks_new();
- LttvHooks *after_request = lttv_hooks_new();
-
- lttv_hooks_add(after_request,
- after_get_events,
- events_request,
- LTTV_PRIO_DEFAULT);
- lttv_hooks_add(event,
- parse_event,
- event_viewer_data,
- LTTV_PRIO_DEFAULT);