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

tracy_systrace.c « systrace « extra - github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 56b7df4933d9bb10e8d75ff68ba487d28e2cb5ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

enum { BufSize = 64*1024 };

void _start()
{
    char buf[BufSize];

    int kernelFd = open( "/sys/kernel/debug/tracing/trace_pipe", O_RDONLY );
    if( kernelFd < 0 ) exit( 0 );

    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 );
    }

    exit( 0 );
}