Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
authorBartosz Taudul <wolf.pld@gmail.com>2019-09-26 23:55:02 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2019-09-26 23:55:02 +0300
commit6f5dd44f1fb662958e7f648f1efb1683c704c619 (patch)
tree106cb0125ca187df17c1a8fe13ed7be652e578af /extra
parentc09f3c0676848f8276317cd08b0d9fd703f3b6c9 (diff)
Helper for reading data from kernel more efficiently.
Diffstat (limited to 'extra')
-rw-r--r--extra/systrace/tracy_systrace.c36
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;
+}