From: J?rgen K. <jk...@us...> - 2001-09-10 13:37:00
|
Update of /cvsroot/xine/xine-lib/src/xine-engine In directory usw-pr-cvs1:/tmp/cvs-serv27153/xine-engine Modified Files: audio_decoder.c monitor.c monitor.h video_decoder.c video_out.c xine.c Log Message: Dynamically allocate the profiler IDs, and add a profiler for video_out_xshm's yuv2rgb conversion Index: audio_decoder.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/audio_decoder.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- audio_decoder.c 2001/09/10 03:04:48 1.35 +++ audio_decoder.c 2001/09/10 13:36:56 1.36 @@ -41,6 +41,7 @@ int running = 1; int i,j; audio_decoder_t *decoder; + int prof_audio_decode = profiler_allocate_slot ("audio decoder/output"); while (running) { @@ -130,7 +131,7 @@ if (this->audio_mute) break; - profiler_start_count (1); + profiler_start_count (prof_audio_decode); if ( (buf->type & 0xFF000000) == BUF_AUDIO_BASE ) { @@ -197,7 +198,7 @@ } else printf ("audio_loop: unknown buffer type: %08x\n", buf->type); - profiler_stop_count (1); + profiler_stop_count (prof_audio_decode); } buf->free_buffer (buf); Index: monitor.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/monitor.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- monitor.c 2001/09/06 13:39:36 1.4 +++ monitor.c 2001/09/10 13:36:56 1.5 @@ -32,7 +32,7 @@ #include "utils.h" #include "monitor.h" -#define MAX_ID 5 +#define MAX_ID 10 #ifdef DEBUG @@ -51,10 +51,20 @@ } } -void profiler_set_label (int id, char *label) { +int profiler_allocate_slot (char *label) { + int id; + + for (id = 0; id < MAX_ID && profiler_label[id] != NULL; id++) + ; + + if (id >= MAX_ID) + return -1; + profiler_label[id] = label; + return id; } + #ifdef ARCH_X86 __inline__ unsigned long long int rdtsc() { @@ -65,12 +75,18 @@ #endif void profiler_start_count (int id) { + + if ((unsigned)id >= MAX_ID) return; + #ifdef ARCH_X86 profiler_start[id] = rdtsc(); #endif } void profiler_stop_count (int id) { + + if ((unsigned)id >= MAX_ID) return; + #ifdef ARCH_X86 profiler_times[id] += rdtsc() - profiler_start[id]; #endif Index: monitor.h =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/monitor.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- monitor.h 2001/09/06 18:38:12 1.4 +++ monitor.h 2001/09/10 13:36:56 1.5 @@ -81,7 +81,7 @@ void profiler_init (); -void profiler_set_label (int id, char *label); +int profiler_allocate_slot (char *label); void profiler_start_count (int id); @@ -100,7 +100,7 @@ #endif #define profiler_init() -#define profiler_set_label(id, label) +#define profiler_allocate_slot(label) (-1) #define profiler_start_count(id) #define profiler_stop_count(id) #define profiler_print_results() Index: video_decoder.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/video_decoder.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- video_decoder.c 2001/09/09 15:39:47 1.47 +++ video_decoder.c 2001/09/10 13:36:56 1.48 @@ -55,8 +55,9 @@ int streamtype; video_decoder_t *decoder; spu_decoder_t *spu_decoder; + int prof_video_decode = profiler_allocate_slot ("video decoder"); + int prof_spu_decode = profiler_allocate_slot ("spu decoder"); - while (running) { /* printf ("video_decoder: getting buffer...\n"); */ @@ -98,18 +99,18 @@ break; case BUF_SPU_CLUT: - profiler_start_count (3); + profiler_start_count (prof_spu_decode); spu_decoder = update_spu_decoder(this, buf->type); if (spu_decoder) spu_decoder->decode_data (spu_decoder, buf); - profiler_stop_count (3); + profiler_stop_count (prof_spu_decode); break; case BUF_SPU_PACKAGE: - profiler_start_count (3); + profiler_start_count (prof_spu_decode); /* now, decode this buffer if it's the right track */ if ( (buf->type & 0xFFFF)== this->spu_channel) { @@ -121,7 +122,7 @@ } - profiler_stop_count (3); + profiler_stop_count (prof_spu_decode); break; case BUF_CONTROL_END: @@ -167,7 +168,7 @@ break; default: - profiler_start_count (0); + profiler_start_count (prof_video_decode); if ( (buf->type & 0xFF000000) == BUF_VIDEO_BASE ) { @@ -200,7 +201,7 @@ } else printf ("video_decoder: unknown buffer type: %08x\n", buf->type); - profiler_stop_count (0); + profiler_stop_count (prof_video_decode); break; Index: video_out.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/video_out.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- video_out.c 2001/09/09 15:39:47 1.42 +++ video_out.c 2001/09/10 13:36:56 1.43 @@ -143,6 +143,8 @@ uint32_t video_step, video_step_new; vo_instance_t *this = (vo_instance_t *) this_gen; sigset_t vo_mask; + int prof_video_out = profiler_allocate_slot ("video output"); + int prof_spu_blend = profiler_allocate_slot ("spu blend"); /* int dummysignum; */ @@ -180,7 +182,7 @@ /* sigwait(&vo_mask, &dummysignum); */ /* wait for next timer tick */ pause (); - profiler_start_count (2); + profiler_start_count (prof_video_out); video_step_new = this->metronom->get_video_rate (this->metronom); if (video_step_new != video_step) { @@ -198,7 +200,7 @@ img = this->display_img_buf_queue->first; if (!img) { - profiler_stop_count (2); + profiler_stop_count (prof_video_out); continue; } @@ -253,7 +255,7 @@ */ if (diff<0) { - profiler_stop_count (2); + profiler_stop_count (prof_video_out); continue; } @@ -267,7 +269,7 @@ img = vo_remove_from_img_buf_queue (this->display_img_buf_queue); if (!img) { - profiler_stop_count (2); + profiler_stop_count (prof_video_out); continue; } @@ -285,18 +287,18 @@ * for flushing it's buffers. So don't remove it! */ vo_overlay_t *ovl; - profiler_start_count (4); + profiler_start_count (prof_spu_blend); ovl = this->overlay_source->get_overlay (this->overlay_source, img->PTS); if (ovl && this->driver->overlay_blend) this->driver->overlay_blend (this->driver, img, ovl); - profiler_stop_count (4); + profiler_stop_count (prof_spu_blend); } this->driver->display_frame (this->driver, img); - profiler_stop_count (2); + profiler_stop_count (prof_video_out); } /* Index: xine.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/xine-engine/xine.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- xine.c 2001/09/10 03:04:48 1.59 +++ xine.c 2001/09/10 13:36:56 1.60 @@ -408,16 +408,6 @@ xine_debug = config->lookup_int (config, "xine_debug", 0); /* - * set up profiler - */ - profiler_init(); - profiler_set_label (0, "video decoder "); - profiler_set_label (1, "audio decoder/output "); - profiler_set_label (2, "video output "); - profiler_set_label (3, "spu decoder "); - profiler_set_label (4, "spu blend "); - - /* * init lock */ |