blob: c67c06b0ef709254c38ccc1039b6ed533b6f64d2 [file] [log] [blame]
/* SPDX-License-Identifier: LGPL-2.1 */
/*
* Copyright (C) 2019 VMware Inc, Yordan Karadzhov (VMware) <y.karadz@gmail.com>
*/
/**
* @file libkshark-tepdata.h
* @brief Interface for processing of FTRACE (trace-cmd) data.
*/
#ifndef _KSHARK_TEPDATA_H
#define _KSHARK_TEPDATA_H
// KernelShark
#include "libkshark.h"
#ifdef __cplusplus
extern "C" {
#endif
/** Unique identifier of the TEP tracing data format. */
#define TEP_DATA_FORMAT_IDENTIFIER "tep data"
/** Check if this Data stream corresponds to a TEP tracing data. */
static inline bool kshark_is_tep(struct kshark_data_stream *stream)
{
return strcmp(stream->data_format, TEP_DATA_FORMAT_IDENTIFIER) == 0;
}
bool kshark_tep_check_data(const char *file_name);
int kshark_tep_init_input(struct kshark_data_stream *stream);
int kshark_tep_init_local(struct kshark_data_stream *stream);
int kshark_tep_close_interface(struct kshark_data_stream *stream);
bool kshark_tep_filter_is_set(struct kshark_data_stream *stream);
int kshark_tep_add_filter_str(struct kshark_data_stream *stream,
const char *filter_str);
char *kshark_tep_filter_make_string(struct kshark_data_stream *stream,
int event_id);
int kshark_tep_filter_remove_event(struct kshark_data_stream *stream,
int event_id);
void kshark_tep_filter_reset(struct kshark_data_stream *stream);
char **kshark_tracecmd_local_plugins();
void kshark_tracecmd_plugin_list_free(char **list);
struct tep_handle;
struct tep_handle *kshark_get_tep(struct kshark_data_stream *stream);
struct tracecmd_input;
struct tracecmd_input *kshark_get_tep_input(struct kshark_data_stream *stream);
struct tep_record;
ssize_t kshark_load_tep_records(struct kshark_context *kshark_ctx, int sd,
struct tep_record ***data_rows);
/**
* Structure representing the mapping between the virtual CPUs and their
* corresponding processes in the host.
*/
struct kshark_host_guest_map {
/** ID of guest stream */
int guest_id;
/** ID of host stream */
int host_id;
/** Guest name */
char *guest_name;
/** Number of guest's CPUs in *cpu_pid array */
int vcpu_count;
/** Array of host task PIDs, index is the VCPU id */
int *cpu_pid;
};
void kshark_tracecmd_free_hostguest_map(struct kshark_host_guest_map *map,
int count);
int kshark_tracecmd_get_hostguest_mapping(struct kshark_host_guest_map **map);
char **kshark_tep_get_buffer_names(struct kshark_context *kshark_ctx, int sd,
int *n_buffers);
int kshark_tep_open_buffer(struct kshark_context *kshark_ctx, int sd,
const char *buffer_name);
int kshark_tep_init_all_buffers(struct kshark_context *kshark_ctx, int sd);
int kshark_tep_handle_plugins(struct kshark_context *kshark_ctx, int sd);
int kshark_tep_find_top_stream(struct kshark_context *kshark_ctx,
const char *file);
bool kshark_tep_is_top_stream(struct kshark_data_stream *stream);
struct tep_event;
struct tep_format_field;
bool define_wakeup_event(struct tep_handle *tep,
struct tep_event **wakeup_event);
#ifdef __cplusplus
}
#endif
#endif // _KSHARK_TEPDATA_H