git-svn-id: http://ltt.polymtl.ca/svn@120 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / yangxx / convert / convert.c
index 9ed92c3e7531f1b464a0fd41efdb78833ced03d0..b16e8fe353d52185ae40c6f26576645f5b957cce 100644 (file)
@@ -91,13 +91,14 @@ int main(int argc, char ** argv){
   off_t file_size;                  
   int block_number, block_size;                 
   char * buffer, **buf_out, cpuStr[BUFFER_SIZE];
-  void ** write_pos;
+  char * buf_fac, * buf_intr, * buf_proc;
+  void ** write_pos, *write_pos_fac, * write_pos_intr, *write_pos_proc;
   trace_start *tStart;
   trace_buffer_start *tBufStart;
   trace_buffer_end *tBufEnd;
   trace_file_system * tFileSys;
-  uint16_t newId;
-  uint8_t  evId, startId;
+  uint16_t newId, startId;
+  uint8_t  evId;
   uint32_t time_delta, startTimeDelta;
   void * cur_pos, *end_pos;
   buffer_start start;
@@ -199,7 +200,7 @@ int main(int argc, char ** argv){
   buffer = g_new(char, 4000);
   readFile(fd,(void*)buffer, 3500, "Unable to read block header");
 
-  cur_pos = buffer;
+  cur_pos= buffer;
   evId = *(uint8_t *)cur_pos;
   cur_pos += sizeof(uint8_t);
   newId = evId;
@@ -211,7 +212,6 @@ int main(int argc, char ** argv){
 
   evId = *(uint8_t *)cur_pos;
   cur_pos += sizeof(uint8_t);
-  time_delta = *(uint32_t*)cur_pos;
   cur_pos += sizeof(uint32_t); 
   tStart = (trace_start*)cur_pos;
 
@@ -232,7 +232,14 @@ int main(int argc, char ** argv){
   block_number = file_size/block_size;
 
   g_free(buffer);
-  buffer     = g_new(char, block_size);
+  buffer         = g_new(char, block_size);
+  buf_fac        = g_new(char, block_size);
+  write_pos_fac  = buf_fac;
+  buf_intr       = g_new(char, block_size);
+  write_pos_intr = buf_intr;
+  buf_proc       = g_new(char, block_size);
+  write_pos_proc = buf_proc;
+  
   buf_out    = g_new(char*,cpu);
   write_pos  = g_new(void*, cpu);
   fdCpu      = g_new(int, cpu); 
@@ -254,15 +261,37 @@ int main(int argc, char ** argv){
     int event_count = 0;
     beat_count = 0;
 
+    for(j=1;j<cpu;j++)has_event[j] = FALSE;
     for(j=0;j<cpu;j++) write_pos[j] = buf_out[j];
+    write_pos_intr = buf_intr;
+    write_pos_fac = buf_fac;
+    write_pos_proc = buf_proc;
 
     readFile(fd,(void*)buffer, block_size, "Unable to read block header");
 
+    cur_pos= buffer;
+    evId = *(uint8_t *)cur_pos;
+    cur_pos += sizeof(uint8_t);
+    newId = evId;
+    time_delta = *(uint32_t*)cur_pos;
+    cur_pos += sizeof(uint32_t); 
+    tBufStart = (trace_buffer_start*)cur_pos;
+    cur_pos += sizeof(trace_buffer_start);
+    cur_pos += sizeof(uint16_t); //Skip event size
+
+    startId = newId;
+    startTimeDelta = time_delta;
+    start.seconds = tBufStart->Time.tv_sec;
+    start.nanoseconds = tBufStart->Time.tv_usec;
+    start.cycle_count = tBufStart->TSC;
+    start.block_id = tBufStart->ID;
+    end.block_id = start.block_id;
+
     end_pos = buffer + block_size; //end of the buffer
     size_lost = *(uint32_t*)(end_pos - sizeof(uint32_t));
 
     end_pos = buffer + block_size - size_lost ; //buffer_end event
-    tBufEnd = (trace_buffer_end*)end_pos;
+    tBufEnd = (trace_buffer_end*)(end_pos+sizeof(uint8_t)+sizeof(uint32_t));
     end.seconds = tBufEnd->Time.tv_sec;
     end.nanoseconds = tBufEnd->Time.tv_usec;
     end.cycle_count = tBufEnd->TSC;
@@ -280,6 +309,14 @@ int main(int argc, char ** argv){
     write_to_buffer(write_pos[0],(void*)&startId, sizeof(uint16_t));    
     write_to_buffer(write_pos[0],(void*)&startTimeDelta, sizeof(uint32_t));
     write_to_buffer(write_pos[0],(void*)&start, sizeof(buffer_start));
+    
+    //write start block event into processes and interrupts files
+    write_to_buffer(write_pos_intr,(void*)&startId, sizeof(uint16_t));    
+    write_to_buffer(write_pos_intr,(void*)&startTimeDelta, sizeof(uint32_t));
+    write_to_buffer(write_pos_intr,(void*)&start, sizeof(buffer_start));
+    write_to_buffer(write_pos_proc,(void*)&startId, sizeof(uint16_t));    
+    write_to_buffer(write_pos_proc,(void*)&startTimeDelta, sizeof(uint32_t));
+    write_to_buffer(write_pos_proc,(void*)&start, sizeof(buffer_start));
 
     while(1){
       int event_size;
@@ -329,7 +366,21 @@ int main(int argc, char ** argv){
          write_pos[0] = buf_out[0] + block_size - sizeof(uint32_t);
          write_to_buffer(write_pos[0],(void*)&size, sizeof(uint32_t));
          write(fdCpu[0],(void*)buf_out[0], block_size);
-       }       
+       }
+
+       //write out processes and intrrupts files
+       {
+         int size_intr =(int) (write_pos_intr - (void*)buf_intr);
+         int size_proc =(int) (write_pos_proc - (void*)buf_proc);
+         write_to_buffer(write_pos_intr,(void*)&end,sizeof(buffer_start));   
+         write_to_buffer(write_pos_proc,(void*)&end,sizeof(buffer_start));   
+         write_pos_intr = buf_intr + block_size - sizeof(uint32_t);
+         write_pos_proc = buf_intr + block_size - sizeof(uint32_t);
+         write_to_buffer(write_pos_intr,(void*)&size_intr, sizeof(uint32_t));
+         write_to_buffer(write_pos_proc,(void*)&size_proc, sizeof(uint32_t));
+         write(fdIntr,(void*)buf_intr,block_size);       
+         write(fdProc,(void*)buf_proc,block_size);       
+       }
        break;   
       }
 
@@ -350,15 +401,15 @@ int main(int argc, char ** argv){
        case TRACE_IRQ_ENTRY:
          event_size = sizeof(trace_irq_entry);
          timeDelta = time_delta;
-         write(fdIntr,(void*)&newId, sizeof(uint16_t));
-         write(fdIntr,(void*)&timeDelta, sizeof(uint64_t));
-         write(fdIntr,cur_pos, event_size);
+         write_to_buffer(write_pos_intr,(void*)&newId, sizeof(uint16_t)); 
+         write_to_buffer(write_pos_intr,(void*)&timeDelta, sizeof(uint64_t));
+         write_to_buffer(write_pos_intr,cur_pos, event_size);
          break;
        case TRACE_IRQ_EXIT:
          event_size = 0;
          timeDelta = time_delta;
-         write(fdIntr,(void*)&newId, sizeof(uint16_t));
-         write(fdIntr,(void*)&timeDelta, sizeof(uint64_t));
+         write_to_buffer(write_pos_intr,(void*)&newId, sizeof(uint16_t));
+         write_to_buffer(write_pos_intr,(void*)&timeDelta, sizeof(uint64_t));
          break;
        case TRACE_SCHEDCHANGE:
          event_size = sizeof(trace_schedchange);
@@ -369,22 +420,22 @@ int main(int argc, char ** argv){
        case TRACE_SOFT_IRQ:
          event_size = sizeof(trace_soft_irq);
          timeDelta = time_delta;
-         write(fdIntr,(void*)&newId, sizeof(uint16_t));
-         write(fdIntr,(void*)&timeDelta, sizeof(uint64_t));
-         write(fdIntr,cur_pos, event_size);
+         write_to_buffer(write_pos_intr,(void*)&newId, sizeof(uint16_t));
+         write_to_buffer(write_pos_intr,(void*)&timeDelta, sizeof(uint64_t));
+         write_to_buffer(write_pos_intr,cur_pos, event_size);
          break;
        case TRACE_PROCESS:
          event_size = sizeof(trace_process);
          timeDelta = time_delta;
          subId = *(uint8_t*)cur_pos;
          if(subId == TRACE_PROCESS_FORK || subId ==TRACE_PROCESS_EXIT){
-           write(fdProc,(void*)&newId, sizeof(uint16_t));
-           write(fdProc,(void*)&timeDelta, sizeof(uint64_t));
-           write(fdProc,cur_pos, event_size);
+           write_to_buffer(write_pos_proc,(void*)&newId, sizeof(uint16_t));
+           write_to_buffer(write_pos_proc,(void*)&timeDelta, sizeof(uint64_t));
+           write_to_buffer(write_pos_proc,cur_pos, event_size);
          } 
          break;
        case TRACE_FILE_SYSTEM:
-         event_size = sizeof(trace_file_system);
+         event_size = sizeof(trace_file_system)- sizeof(char*);
          break;
        case TRACE_TIMER:
          event_size = sizeof(trace_timer);
@@ -431,23 +482,23 @@ int main(int argc, char ** argv){
        
        if(evId == TRACE_HEARTBEAT){
          if(ltt_log_cpu){
-           write_to_buffer(write_pos[cpu_id], cur_pos, sizeof(heartbeat));      
+           size_count[cpu_id] += sizeof(heartbeat);
+           write_to_buffer(write_pos[cpu_id],(void*)&beat , sizeof(heartbeat));         
          }else{
-           write_to_buffer(write_pos[0], cur_pos, sizeof(heartbeat));            
+           size_count[0] +=  sizeof(heartbeat);
+           write_to_buffer(write_pos[0], (void*)&beat, sizeof(heartbeat));               
          }
        }
 
        cur_pos += event_size + sizeof(uint16_t); //skip data_size
       }else if(evId == TRACE_FILE_SYSTEM){
        size_t nbBytes;
+       char  c = '\0';
        tFileSys = (trace_file_system*)cur_pos;
        subId = tFileSys->event_sub_id; 
        if(subId == TRACE_FILE_SYSTEM_OPEN || subId == TRACE_FILE_SYSTEM_EXEC){
          nbBytes = tFileSys->event_data2 +1;
        }else nbBytes = 0;
-       nbBytes += event_size;
-
-       //      printf("bytes : %d\n", nbBytes);
 
        if(ltt_log_cpu){
          size_count[cpu_id] += nbBytes + sizeof(uint16_t) + sizeof(uint32_t);
@@ -455,14 +506,26 @@ int main(int argc, char ** argv){
            printf("size count exceeds the limit of the buffer\n");
            exit(1);
          }
-         write_to_buffer(write_pos[cpu_id], cur_pos, nbBytes);         
+         write_to_buffer(write_pos[cpu_id], cur_pos, event_size);      
+         cur_pos += event_size + sizeof(char*);
+         if(nbBytes){
+           write_to_buffer(write_pos[cpu_id], cur_pos, nbBytes);       
+         }else{
+           write_to_buffer(write_pos[cpu_id], (void*)&c, 1);
+         }
        }else{
          size_count[0] += nbBytes + sizeof(uint16_t) + sizeof(uint32_t);
          if(size_count[0] > block_size - reserve_size){
            printf("size count exceeds the limit of the buffer\n");
            exit(1);
          }
-         write_to_buffer(write_pos[0], cur_pos, nbBytes);      
+         write_to_buffer(write_pos[0], cur_pos, event_size);
+         cur_pos += event_size + sizeof(char*);
+         if(nbBytes){
+           write_to_buffer(write_pos[0], cur_pos, nbBytes);    
+         }else{
+           write_to_buffer(write_pos[0], (void*)&c, 1);
+         }
        }
        cur_pos += nbBytes + sizeof(uint16_t); //skip data_size
       }else if(event_size == -1){
This page took 0.026804 seconds and 4 git commands to generate.