blob: 08d6dcee56f2785a06d907c45035a3198b3deac2 [file] [log] [blame]
#include "utils/trace.h"
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
namespace profiler {
int Trace::trace_marker_fd;
Trace::Trace(const char *name) { Begin(name); }
Trace::Trace(const std::string &name) { Begin(name.c_str()); }
Trace::~Trace() { End(); }
#if TRACE_OUTPUT == 1
void Trace::Init() {
if (trace_marker_fd == 0) {
trace_marker_fd = open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY);
// TODO: Error handling
if (trace_marker_fd == -1) {
}
}
}
void Trace::Begin(const char *name) {
char buf[kTraceMessageLen];
int len = snprintf(buf, kTraceMessageLen, "B|%d|%s", getpid(), name);
write(trace_marker_fd, buf, len);
}
void Trace::End() {
char c = 'E';
write(trace_marker_fd, &c, 1);
}
#else
void Trace::Init() {}
void Trace::Begin(const char *name) {}
void Trace::End() {}
#endif
} // namespace profiler