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 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 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