print_state
print_state(hp);
struct print_state *print_state = ps;
FILE *fp = print_state->fp;
if (deprecated && !print_state->deprecated)
if (print_state->pmu_glob && (!pmu_name || !strglobmatch(pmu_name, print_state->pmu_glob)))
if (print_state->exclude_abi && pmu_type < PERF_TYPE_MAX && pmu_type != PERF_TYPE_RAW)
if (print_state->event_glob &&
(!event_name || !strglobmatch(event_name, print_state->event_glob)) &&
(!event_alias || !strglobmatch(event_alias, print_state->event_glob)) &&
(!topic || !strglobmatch_nocase(topic, print_state->event_glob)))
if (print_state->name_only) {
if (strcmp(print_state->last_topic, topic ?: "")) {
zfree(&print_state->last_topic);
print_state->last_topic = strdup(topic ?: "");
if (long_desc && print_state->long_desc)
if (desc && (print_state->desc || print_state->long_desc)) {
if (print_state->detailed && encoding_desc) {
struct print_state *print_state = ps;
FILE *fp = print_state->fp;
if (print_state->event_glob &&
(!print_state->metrics || !name || !strglobmatch(name, print_state->event_glob)) &&
(!print_state->metricgroups || !group || !strglobmatch(group, print_state->event_glob)))
if (!print_state->name_only && !print_state->last_metricgroups) {
if (print_state->metricgroups) {
if (!print_state->metrics)
if (!print_state->last_metricgroups ||
strcmp(print_state->last_metricgroups, group ?: "")) {
if (group && print_state->metricgroups) {
if (print_state->name_only) {
const char *gdesc = print_state->desc
if (print_state->metrics) {
zfree(&print_state->last_metricgroups);
print_state->last_metricgroups = strdup(group ?: "");
if (!print_state->metrics)
if (print_state->name_only) {
if (print_state->metrics &&
!strlist__has_entry(print_state->visited_metrics, name)) {
strlist__add(print_state->visited_metrics, name);
if (long_desc && print_state->long_desc) {
} else if (desc && print_state->desc) {
if (expr && print_state->detailed) {
if (threshold && print_state->detailed) {
struct print_state common;
struct json_print_state *print_state = ps;
FILE *fp = print_state->common.fp;
struct json_print_state *print_state = ps;
FILE *fp = print_state->common.fp;
fprintf(fp, "%s]\n", print_state->need_sep ? "\n" : "");
struct json_print_state *print_state = ps;
FILE *fp = print_state->common.fp;
if (deprecated && !print_state->common.deprecated)
if (print_state->common.pmu_glob &&
(!pmu_name || !strglobmatch(pmu_name, print_state->common.pmu_glob)))
if (print_state->common.exclude_abi && pmu_type < PERF_TYPE_MAX &&
if (print_state->common.event_glob &&
(!event_name || !strglobmatch(event_name, print_state->common.event_glob)) &&
(!event_alias || !strglobmatch(event_alias, print_state->common.event_glob)) &&
(!topic || !strglobmatch_nocase(topic, print_state->common.event_glob)))
fprintf(fp, "%s{\n", print_state->need_sep ? ",\n" : "");
print_state->need_sep = true;
struct json_print_state *print_state = ps;
FILE *fp = print_state->common.fp;
if (print_state->common.event_glob &&
(!print_state->common.metrics || !name ||
!strglobmatch(name, print_state->common.event_glob)) &&
(!print_state->common.metricgroups || !group ||
!strglobmatch(group, print_state->common.event_glob)))
fprintf(fp, "%s{\n", print_state->need_sep ? ",\n" : "");
print_state->need_sep = true;
struct print_state *print_state = ps;
return !print_state->long_desc;
struct print_state default_ps = {
struct print_state *ps = &default_ps;
struct print_state *print_state = ps;
if (!print_state->name_only && pager_in_use()) {
fprintf(print_state->fp,
static void default_print_end(void *print_state __maybe_unused) {}
print_libpfm_event(const struct print_callbacks *print_cb, void *print_state,
print_cb->print_event(print_state, topic, pinfo->name,
print_cb->print_event(print_state,
void print_libpfm_events(const struct print_callbacks *print_cb, void *print_state)
print_libpfm_event(print_cb, print_state, &pinfo, &info, &storage);
void print_libpfm_events(const struct print_callbacks *print_cb, void *print_state);
void *print_state __maybe_unused)
void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, void *print_state)
bool skip_duplicate_pmus = print_cb->skip_duplicate_pmus(print_state);
print_cb->print_event(print_state,
void perf_pmus__print_raw_pmu_events(const struct print_callbacks *print_cb, void *print_state)
bool skip_duplicate_pmus = print_cb->skip_duplicate_pmus(print_state);
print_cb->print_event(print_state,
void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, void *print_state);
void perf_pmus__print_raw_pmu_events(const struct print_callbacks *print_cb, void *print_state);
print_cb->print_event(print_state,
void metricgroup__print(const struct print_callbacks *print_cb, void *print_state)
print_cb->print_metric(print_state,
void print_events(const struct print_callbacks *print_cb, void *print_state)
perf_pmus__print_pmu_events(print_cb, print_state);
print_cb->print_event(print_state,
perf_pmus__print_raw_pmu_events(print_cb, print_state);
print_cb->print_event(print_state,
print_sdt_events(print_cb, print_state);
metricgroup__print(print_cb, print_state);
print_libpfm_events(print_cb, print_state);
void print_sdt_events(const struct print_callbacks *print_cb, void *print_state)
void (*print_start)(void *print_state);
void (*print_end)(void *print_state);
void (*print_event)(void *print_state, const char *topic,
void (*print_metric)(void *print_state,
bool (*skip_duplicate_pmus)(void *print_state);
void print_events(const struct print_callbacks *print_cb, void *print_state);
void print_sdt_events(const struct print_callbacks *print_cb, void *print_state);
void metricgroup__print(const struct print_callbacks *print_cb, void *print_state);
static struct print_state printstate;