blob: 4c614082a5641c4f967194a03c3b63d56f8f0da4 [file] [log] [blame]
/* Copyright (c) 2015 Google Inc
* Davide Libenzi <dlibenzi@google.com>
* See LICENSE for details.
*/
#pragma once
#include <ros/arch/arch.h>
#include <ros/arch/perfmon.h>
#include <ros/common.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdio.h>
#include <limits.h>
#include <parlib/core_set.h>
#include "perfconv.h"
#define MAX_CPU_EVENTS 256
struct perf_arch_info {
uint32_t perfmon_version;
uint32_t proc_arch_events;
uint32_t bits_x_counter;
uint32_t counters_x_proc;
uint32_t bits_x_fix_counter;
uint32_t fix_counters_x_proc;
};
#define MAX_FQSTR_SZ 128
struct perf_eventsel {
struct perfmon_event ev;
bool attr_emitted;
uint32_t type;
uint64_t config;
char fq_str[MAX_FQSTR_SZ];
};
struct perf_event {
struct core_set cores;
struct perf_eventsel sel;
int ped;
};
struct perf_context_config {
const char *perf_file;
const char *kpctl_file;
const char *kpdata_file;
};
struct perf_context {
struct perf_context_config *cfg;
int perf_fd;
int kpctl_fd;
struct perf_arch_info pai;
int event_count;
struct perf_event events[MAX_CPU_EVENTS];
};
void perf_initialize(void);
void perf_finalize(void);
struct perf_eventsel *perf_parse_event(const char *str);
struct perf_context *perf_create_context(struct perf_context_config *cfg);
void perf_free_context(struct perf_context *pctx);
void perf_context_event_submit(struct perf_context *pctx,
const struct core_set *cores,
const struct perf_eventsel *sel);
void perf_stop_events(struct perf_context *pctx);
void perf_start_sampling(struct perf_context *pctx);
void perf_stop_sampling(struct perf_context *pctx);
uint64_t perf_get_event_count(struct perf_context *pctx, unsigned int idx);
void perf_context_show_events(struct perf_context *pctx, FILE *file);
void perf_show_events(const char *rx, FILE *file);
void perf_convert_trace_data(struct perfconv_context *cctx, const char *input,
FILE *outfile);
static inline const struct perf_arch_info *perf_context_get_arch_info(
const struct perf_context *pctx)
{
return &pctx->pai;
}