X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fyangxx%2Fconvert%2Fconvert.c;h=0aaa8f93f663dbf325f4cd2887e343c7d5832f28;hb=fc032b6be7431e97c4ed51c672aa3ab8141df10d;hp=9ed92c3e7531f1b464a0fd41efdb78833ced03d0;hpb=821bc1e48388161ea0273ca4f3dd88ea4dcdabf1;p=lttv.git diff --git a/ltt/branches/yangxx/convert/convert.c b/ltt/branches/yangxx/convert/convert.c index 9ed92c3e..0aaa8f93 100644 --- a/ltt/branches/yangxx/convert/convert.c +++ b/ltt/branches/yangxx/convert/convert.c @@ -91,7 +91,8 @@ 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; @@ -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; @@ -232,7 +233,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); @@ -255,6 +263,9 @@ int main(int argc, char ** argv){ beat_count = 0; for(j=0;jTime.tv_sec; end.nanoseconds = tBufEnd->Time.tv_usec; end.cycle_count = tBufEnd->TSC; @@ -280,6 +291,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 +348,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 +383,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 +402,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 +464,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 +488,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){