diff --git a/TOOLS/fastmemcpybench.c b/TOOLS/fastmemcpybench.c index e7115ff72e..ec51c52db8 100644 --- a/TOOLS/fastmemcpybench.c +++ b/TOOLS/fastmemcpybench.c @@ -8,11 +8,85 @@ */ #include +#include +#include +#include +#include +#include +#include +#include #include "../libvo/fastmemcpy.h" -#define ARR_SIZE 100000 -//#define ARR_SIZE 1000000 +//#define ARR_SIZE 100000 +#define ARR_SIZE (1024*768*2) + + +#ifdef HAVE_MGA + +#include "../drivers/mga_vid.h" + +static int mga_next_frame=0; + +static mga_vid_config_t mga_vid_config; +static unsigned char* frame=NULL; +static int f; + +static int mga_init(){ + char *frame_mem; + + f = open("/dev/mga_vid",O_RDWR); + if(f == -1) + { + fprintf(stderr,"Couldn't open /dev/mga_vid\n"); + return(-1); + } + + mga_vid_config.num_frames=1; + mga_vid_config.frame_size=ARR_SIZE; + mga_vid_config.format=MGA_VID_FORMAT_YUY2; + + mga_vid_config.colkey_on=0; + mga_vid_config.src_width = 640; + mga_vid_config.src_height= 480; + mga_vid_config.dest_width = 320; + mga_vid_config.dest_height= 200; + mga_vid_config.x_org= 0; + mga_vid_config.y_org= 0; + + mga_vid_config.version=MGA_VID_VERSION; + if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config)) + { + perror("Error in mga_vid_config ioctl()"); + printf("Your mga_vid driver version is incompatible with this MPlayer version!\n"); + exit(1); + } + ioctl(f,MGA_VID_ON,0); + + frame = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0); + if(!frame){ + printf("Can't mmap mga frame\n"); + exit(1); + } + + //clear the buffer + //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames); + + return 0; + +} + +#endif + +// Returns current time in microseconds +unsigned int GetTimer(){ + struct timeval tv; + struct timezone tz; +// float s; + gettimeofday(&tv,&tz); +// s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec; + return (tv.tv_sec*1000000+tv.tv_usec); +} static inline unsigned long long int read_tsc( void ) { @@ -27,11 +101,21 @@ int main( void ) { unsigned long long int v1,v2; unsigned char * marr1,*marr2; - marr1 = &arr1[1]; - marr2 = &arr2[3]; + int i; + unsigned int t; +#ifdef HAVE_MGA + mga_init(); + marr1 = &frame[3]; +#else + marr1 = &arr1[3]; +#endif + marr2 = &arr2[9]; + t=GetTimer(); v1 = read_tsc(); - memcpy(marr1,marr2,ARR_SIZE-4); + for(i=0;i<100;i++) memcpy(marr1,marr2,ARR_SIZE-16); v2 = read_tsc(); - printf("v1 = %llu v2 = %llu v2-v1=%llu\n",v1,v2,v2-v1); + t=GetTimer()-t; + // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t + printf(NAME": v2-v1=%llu = %dus (%5.3ffps) %5.1fMB/s\n",v2-v1,t,100000000.0f/(float)t,(float)ARR_SIZE*95.36743f/(float)t); return 0; }