6#if defined(DART_HOST_OS_LINUX) && defined(SUPPORT_TIMELINE)
27static int OpenTraceFD() {
28 const char* kSystraceDebugPath =
"/sys/kernel/debug/tracing/trace_marker";
29 const char* kSystracePath =
"/sys/kernel/tracing/trace_marker";
36 if (fd < 0 && FLAG_trace_timeline) {
37 OS::PrintErr(
"TimelineEventSystraceRecorder: Could not open `%s` or `%s`\n",
38 kSystraceDebugPath, kSystracePath);
43TimelineEventSystraceRecorder::TimelineEventSystraceRecorder()
44 : TimelineEventPlatformRecorder(), systrace_fd_(OpenTraceFD()) {
45 Timeline::set_recorder_discards_clock_values(
true);
48TimelineEventSystraceRecorder::~TimelineEventSystraceRecorder() {
49 if (systrace_fd_ >= 0) {
54intptr_t TimelineEventSystraceRecorder::PrintSystrace(TimelineEvent*
event,
61 int64_t pid = OS::ProcessId();
62 switch (
event->event_type()) {
63 case TimelineEvent::kBegin: {
68 case TimelineEvent::kEnd: {
72 case TimelineEvent::kCounter: {
73 if (
event->arguments_length() > 0) {
80 case TimelineEvent::kAsyncBegin: {
85 case TimelineEvent::kAsyncEnd: {
97void TimelineEventSystraceRecorder::OnEvent(TimelineEvent*
event) {
98 if (
event ==
nullptr) {
101 if (systrace_fd_ < 0) {
106 const intptr_t kBufferLength = 1024;
107 char buffer[kBufferLength];
108 const intptr_t event_length = PrintSystrace(
event, &
buffer[0], kBufferLength);
109 if (event_length > 0) {
114 }
while ((
result == -1L) && (errno == EINTR));
static uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment)
static void static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static const uint8_t buffer[]
#define DECLARE_FLAG(type, name)
#define TEMP_FAILURE_RETRY(expression)
void write(SkWStream *wStream, const T &text)