diff options
Diffstat (limited to 'extra/systrace/tracy_systrace.c')
-rw-r--r-- | extra/systrace/tracy_systrace.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/extra/systrace/tracy_systrace.c b/extra/systrace/tracy_systrace.c new file mode 100644 index 00000000..3ecc0f4d --- /dev/null +++ b/extra/systrace/tracy_systrace.c @@ -0,0 +1,36 @@ +#include <fcntl.h> +#include <poll.h> +#include <stdio.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <time.h> +#include <unistd.h> + +enum { BufSize = 64*1024 }; + +int main() +{ + char buf[BufSize]; + + int kernelFd = open( "/sys/kernel/debug/tracing/trace_pipe", O_RDONLY ); + if( kernelFd == -1 ) return -1; + + struct pollfd pfd; + pfd.fd = kernelFd; + pfd.events = POLLIN | POLLERR; + + struct timespec sleepTime; + sleepTime.tv_sec = 0; + sleepTime.tv_nsec = 1000 * 1000 * 10; + + for(;;) + { + while( poll( &pfd, 1, 0 ) <= 0 ) nanosleep( &sleepTime, NULL ); + const int rd = read( kernelFd, buf, BufSize ); + if( rd <= 0 ) break; + write( STDOUT_FILENO, buf, rd ); + } + + close( kernelFd ); + return 0; +} |