Enlightenment CVS committal Author : onefang Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/examples Modified Files: exe_example.c Log Message: * More accurate throughput tests by removing most of the overhead. * Don't fill the timing tests with stdio shit, gives much better results. Now the only overhead is a tiny fraction of the tested time. 140MB/s in both directions in line buffered mode on my lightly loaded Athlon 3000. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/examples/exe_example.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- exe_example.c 30 Dec 2005 19:19:59 -0000 1.3 +++ exe_example.c 1 Jan 2006 17:20:33 -0000 1.4 @@ -15,7 +15,7 @@ int exe_count = 0; int data_count = 0; int line_count = 0; -int one_percent = 0; +double then = 0.0, now = 0.0; Ecore_Exe *exe0 = NULL; Ecore_Exe *exe1 = NULL; Ecore_Exe *exe2 = NULL; @@ -58,26 +58,20 @@ if (ev->lines) { - int i; - for (i = 0; ev->lines[i].line != NULL; i++) line_count++; - printf("%d ", i); - } - - for (i = 0; i < ev->size; i++) - { - data_count++; - if ((data_count % one_percent) == 0) - { - putchar('.'); - fflush(stdout); - } + /* printf("%d ", i); This is for testing the number of lines per event.*/ } + data_count += ev->size; if (data_count >= size) { + now = ecore_time_get(); + printf("\n\nApproximate data rate - %f bytes/second (%d lines and %d bytes in %f seconds).\n", ((double) data_count) / (now - then), line_count, data_count, now - then); + if (data_count != size) + printf("Size discrepency of %d bytes.\n", size - data_count); printf("\n"); + /* Since there does not seem to be anyway to convince /bin/cat to finish... */ ecore_exe_terminate(exe0); } @@ -98,9 +92,49 @@ return 1; } +int timer_once(void *data) +{ + int argc; + char **argv; + int i = 1; + + ecore_app_args_get(&argc, &argv); + ecore_event_handler_add(ECORE_EVENT_EXE_DATA, exe_data_count, NULL); + printf("FILE : %s\n", argv[i]); + exe0 = ecore_exe_pipe_run("/bin/cat", ECORE_EXE_PIPE_WRITE | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED, NULL); + + if (exe0) + { + struct stat s; + + exe_count++; + if (stat(argv[i], &s) == 0) + { + int fd; + + size = s.st_size; + if ((fd = open(argv[i], O_RDONLY)) != -1) + { + char buf[1024]; + int length; + + then = ecore_time_get(); + while ((length = read(fd, buf, 1024)) > 0) + ecore_exe_pipe_write(exe0, buf, length); + close(fd); + } + } + /* FIXME: Fuckit, neither of these will actually cause /bin/cat to shut down. What the fuck does it take? */ + ecore_exe_pipe_write(exe0, "\004", 1); /* Send an EOF. */ + ecore_exe_pipe_write_close(exe0); /* /bin/cat should stop when it's stdin closes. */ + } + + return 0; +} + int main(int argc, char **argv) { - double then = 0.0, now = 0.0; + ecore_app_args_set(argc, (const char **) argv); ecore_init(); ecore_event_handler_add(ECORE_EVENT_EXE_EXIT, exe_exit, NULL); @@ -141,56 +175,11 @@ printf(" [*] exe3 = %p (echo \"ls\" | /bin/cat)\n", exe3); } else - { - int i = 1; - - ecore_event_handler_add(ECORE_EVENT_EXE_DATA, exe_data_count, NULL); - printf("FILE : %s\n", argv[i]); - exe0 = ecore_exe_pipe_run("/bin/cat", - ECORE_EXE_PIPE_WRITE | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED, - NULL); - if (exe0) - { - struct stat s; + ecore_timer_add(0.5, timer_once, NULL); - exe_count++; - if (stat(argv[i], &s) == 0) - { - int fd; - - size = s.st_size; - one_percent = s.st_size / 100; - if (one_percent == 0) - one_percent = 1; - if ((fd = open(argv[i], O_RDONLY)) != -1) - { - char buf[1024]; - int length; - while ((length = read(fd, buf, 1024)) > 0) - ecore_exe_pipe_write(exe0, buf, length); - close(fd); - } - } - /* FIXME: Fuckit, neither of these will actually cause /bin/cat to shut down. What the fuck does it take? */ - ecore_exe_pipe_write(exe0, "\004", 1); /* Send an EOF. */ - ecore_exe_pipe_write_close(exe0); /* /bin/cat should stop when it's stdin closes. */ - } - } - - if (one_percent) - then = ecore_time_get() + 0.1; /* Factor in the exe exit delay at least. */ - - if (exe_count > 0) + if ((exe_count > 0) || (argc > 1)) ecore_main_loop_begin(); - if (one_percent) - { - now = ecore_time_get(); - printf("Approximate data rate (overhead not accounted for) - %f bytes/second ( %d lines and %d bytes in %f seconds).\n", ((double) data_count) / (now - then), line_count, data_count, now - then); - if (data_count != size) - printf("Size discrepency of %d bytes.\n", size - data_count); - } - ecore_shutdown(); return 0; } ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs