]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/plr/ex/eventbuf/main.cc
update
[l4.git] / l4 / pkg / plr / ex / eventbuf / main.cc
1 #include <cstdlib>
2 #include <cstdio>
3 #include <cstring>
4
5 #include <l4/util/rdtsc.h>
6 #include <l4/util/util.h>
7
8 #include <l4/plr/uu.h>
9 #include <l4/plr/measurements.h>
10
11 Measurements::EventBuf eb;
12
13 unsigned char buffer[1024 * 1024];
14
15 int main()
16 {
17         printf("EB\n");
18         eb.set_buffer(buffer, sizeof(buffer));
19         printf("EB.buf = %p, size %d, index %d\n",
20                eb.buffer, eb.size, eb.index);
21
22         printf("Generating 200 events...\n");
23         for (unsigned i = 0; i < 100; ++i) {
24
25                 Measurements::GenericEvent* ev = eb.next();
26                 ev->header.tsc   = l4_rdtsc();
27                 ev->header.vcpu  = 0x1234;
28                 ev->header.type  = Measurements::Foo;
29                 ev->data.foo.start = 1;
30                 printf("%d %llx\n", ev->header.type, ev->header.tsc);
31                 
32                 l4_sleep(random() % 100);
33                 
34                 ev = eb.next();
35                 ev->header.tsc   = l4_rdtsc();
36                 ev->header.vcpu  = 0x1234;
37                 ev->header.type  = Measurements::Foo;
38                 ev->data.foo.start = 0;
39         }
40
41         printf("EB.buf = %p, size %d, index %d\n",
42                eb.buffer, eb.size, eb.index);
43         printf("EB.oldest = %d\n", eb.oldest());
44
45         char const *filename = "sampledump.txt";
46
47         unsigned oldest = eb.oldest();
48         unsigned dump_start, dump_size;
49
50         if (oldest == 0) { // half-full -> dump from 0 to index
51                 dump_start = 0;
52                 dump_size  = eb.index * sizeof(Measurements::GenericEvent);
53         } else { // buffer completely full -> dump full size starting from oldest entry
54                 dump_start = oldest * sizeof(Measurements::GenericEvent);
55                 dump_size  = eb.size * sizeof(Measurements::GenericEvent);
56         }
57
58         uu_dumpz_ringbuffer(filename, eb.buffer, eb.size * sizeof(Measurements::GenericEvent),
59                             dump_start, dump_size);
60         return 0;
61 }