- RawTraceData * 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->raw_trace_data_queue->length + size > RESERVE_BIG_SIZE){
- remove_item_from_queue(event_viewer_data->raw_trace_data_queue,
- event_viewer_data->append);
- }
-
- //update pid if it is not known
- if(event_viewer_data->raw_trace_data_queue->length > 0){
- list = event_viewer_data->raw_trace_data_queue->head;
- tmpList = event_viewer_data->raw_trace_data_queue_tmp->head;
- if(event_viewer_data->append){
- for(i= event_viewer_data->raw_trace_data_queue->length-1;i>=0;i--){
- data = (RawTraceData*)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<event_viewer_data->raw_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){
- 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<event_viewer_data->raw_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){
- 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=event_viewer_data->raw_trace_data_queue_tmp->length-1;i>=0;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){
- 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<event_viewer_data->raw_trace_data_queue->length;i++){
- data = (RawTraceData*)g_list_nth_data(list,i);
- if(data->pid == -1 && data->cpu_id == j) data->pid = tmpPid;
- }
- }else if(pid != -1 && tmpPid == -1){
- for(i=0;i<event_viewer_data->raw_trace_data_queue_tmp->length;i++){
- data = (RawTraceData*)g_list_nth_data(tmpList,i);
- if(data->pid == -1 && 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->raw_trace_data_queue->length
- + event_viewer_data->raw_trace_data_queue_tmp->length;
- if(event_viewer_data->append){
- if(event_viewer_data->raw_trace_data_queue->length > 0)
- event_viewer_data->current_event_index = event_viewer_data->raw_trace_data_queue->length - 1;
- else event_viewer_data->current_event_index = 0;
- while((data = g_queue_pop_head(event_viewer_data->raw_trace_data_queue_tmp)) != NULL){
- g_queue_push_tail(event_viewer_data->raw_trace_data_queue, data);
- }
- }else{
- event_viewer_data->current_event_index += event_viewer_data->raw_trace_data_queue_tmp->length;
- while((data = g_queue_pop_tail(event_viewer_data->raw_trace_data_queue_tmp)) != NULL){
- g_queue_push_head(event_viewer_data->raw_trace_data_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);
-
- lttv_process_traceset_middle(tsc, ltt_time_infinite, max_num_events, NULL);
-
- //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->raw_trace_data_queue_tmp->length;
- *real_num_events = size;
-
- update_raw_data_array(event_viewer_data,size);