1 /*
2  * Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6 
7 #include <unistd.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <errno.h>
11 #include <time.h>
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 #include <fcntl.h>
15 
16 
write_marker(int fd,char * name)17 static int write_marker(int fd, char *name)
18 {
19   char buf[1024];
20   struct timespec ts;
21   int size, ret;
22   unsigned long usec;
23 
24   ret = clock_gettime(CLOCK_MONOTONIC, &ts);
25   if (ret < 0) {
26     perror("clock_gettime");
27     return 1;
28   }
29 
30   // normalize nanoseconds down to microseconds
31   // to make it easier to compare to the entry
32   // timestamps
33   usec = ts.tv_nsec / 1000;
34   size = snprintf(buf, 1024, "%s: %lu.%06lu\n",
35 		  name, ts.tv_sec, usec);
36   ret = write(fd, buf, size);
37   if (ret < size) {
38     perror("write");
39     return 1;
40   }
41 
42   return 0;
43 }
44 #define TRACE_PATH "/sys/kernel/debug/tracing/"
45 
main(int argc,char * argv[])46 int main(int argc, char* argv[]) {
47   int ret, fd;
48 
49   fd = open(TRACE_PATH "trace_marker", O_WRONLY);
50   if (fd < 0) {
51     perror("open");
52     return 1;
53   }
54   ret = write_marker(fd, "start");
55   if (ret)
56     goto out;
57 
58   ret = write_marker(fd, "middle");
59   if (ret)
60     goto out;
61 
62   ret = write_marker(fd, "end");
63 
64  out:
65   close(fd);
66   return ret;
67 }
68