blob: 0db515e3e156a6a2bddeaac4ec2d22155dcac05f [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/sky/shell/systrace_logger.h"
#include "lib/ftl/files/eintr_wrapper.h"
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
namespace sky {
namespace shell {
static const int kBufferSize = 256;
SystraceLogger::SystraceLogger()
: trace_fd_(HANDLE_EINTR(
::open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY))),
pid_(getpid()) {}
SystraceLogger::~SystraceLogger() {
IGNORE_EINTR(::close(trace_fd_));
}
void SystraceLogger::TraceBegin(const char* label) const {
char buffer[kBufferSize];
int buffer_written = snprintf(buffer, sizeof(buffer), "B|%d|%s", pid_, label);
if (buffer_written <= 0 || buffer_written > kBufferSize) {
return;
}
HANDLE_EINTR(::write(trace_fd_, buffer, buffer_written));
}
void SystraceLogger::TraceEnd() const {
HANDLE_EINTR(::write(trace_fd_, "E", 1));
}
void SystraceLogger::TraceCount(const char* label, int count) const {
char buffer[kBufferSize];
int buffer_written =
snprintf(buffer, sizeof(buffer), "C|%d|%s|%d", pid_, label, count);
if (buffer_written <= 0 || buffer_written > kBufferSize) {
return;
}
HANDLE_EINTR(::write(trace_fd_, buffer, buffer_written));
}
} // namespace shell
} // namespace sky