git-svn-id: http://ltt.polymtl.ca/svn@120 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / yangxx / convert / convert.c
index 1614d040c7fdb0223db3c4db7458fca47eefa68d..b16e8fe353d52185ae40c6f26576645f5b957cce 100644 (file)
@@ -97,8 +97,8 @@ int main(int argc, char ** argv){
   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;
@@ -200,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;
@@ -212,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;
 
@@ -262,6 +261,7 @@ 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;
@@ -269,6 +269,24 @@ int main(int argc, char ** argv){
 
     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));
 
@@ -417,7 +435,7 @@ int main(int argc, char ** argv){
          } 
          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);
@@ -464,8 +482,10 @@ int main(int argc, char ** argv){
        
        if(evId == TRACE_HEARTBEAT){
          if(ltt_log_cpu){
+           size_count[cpu_id] += sizeof(heartbeat);
            write_to_buffer(write_pos[cpu_id],(void*)&beat , sizeof(heartbeat));         
          }else{
+           size_count[0] +=  sizeof(heartbeat);
            write_to_buffer(write_pos[0], (void*)&beat, sizeof(heartbeat));               
          }
        }
@@ -473,14 +493,12 @@ int main(int argc, char ** argv){
        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);
@@ -488,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.024289 seconds and 4 git commands to generate.