chromium/chromecast/tracing/ftrace.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_TRACING_FTRACE_H_
#define CHROMECAST_TRACING_FTRACE_H_

#include <string>
#include <string_view>
#include <vector>

#include "base/files/scoped_file.h"

namespace chromecast {
namespace tracing {

// Returns true if |category| is valid for system tracing.
bool IsValidCategory(std::string_view category);

// Starts ftrace for the specified categories.
//
// This must be paired with StopFtrace() or the kernel will continue tracing
// indefinitely. Returns false if an error occurs writing to tracefs - this
// usually indicates a configuration issue (e.g. tracefs not mounted).
bool StartFtrace(const std::vector<std::string>& categories);

// Writes time synchronization marker.
//
// This is used by trace-viewer to align ftrace clock with userspace
// tracing. Since CLOCK_MONOTONIC is used in both cases, this merely
// writes a zero offset. Call it at the end of tracing right before
// StopFtrace(). Returns false if an error occurs writing to tracefs.
bool WriteFtraceTimeSyncMarker();

// Stops ftrace.
//
// This is safe to call even if tracing isn't started. Returns false if an error
// occurs writing to tracefs.
bool StopFtrace();

// Opens ftrace buffer for reading.
base::ScopedFD GetFtraceData();

// Clears ftrace buffer. Returns false if an error occurs writing to tracefs.
bool ClearFtrace();

}  // namespace tracing
}  // namespace chromecast

#endif  // CHROMECAST_TRACING_FTRACE_H_