brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 11cd85b Raw
72 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <errno.h>3#include <stdlib.h>4#include <string.h>5#include "evsel.h"6#include "counts.h"7#include <perf/threadmap.h>8#include <linux/zalloc.h>9 10struct perf_counts *perf_counts__new(int ncpus, int nthreads)11{12	struct perf_counts *counts = zalloc(sizeof(*counts));13 14	if (counts) {15		struct xyarray *values;16 17		values = xyarray__new(ncpus, nthreads, sizeof(struct perf_counts_values));18		if (!values) {19			free(counts);20			return NULL;21		}22 23		counts->values = values;24 25		values = xyarray__new(ncpus, nthreads, sizeof(bool));26		if (!values) {27			xyarray__delete(counts->values);28			free(counts);29			return NULL;30		}31 32		counts->loaded = values;33	}34 35	return counts;36}37 38void perf_counts__delete(struct perf_counts *counts)39{40	if (counts) {41		xyarray__delete(counts->loaded);42		xyarray__delete(counts->values);43		free(counts);44	}45}46 47void perf_counts__reset(struct perf_counts *counts)48{49	xyarray__reset(counts->loaded);50	xyarray__reset(counts->values);51}52 53void evsel__reset_counts(struct evsel *evsel)54{55	perf_counts__reset(evsel->counts);56}57 58int evsel__alloc_counts(struct evsel *evsel)59{60	struct perf_cpu_map *cpus = evsel__cpus(evsel);61	int nthreads = perf_thread_map__nr(evsel->core.threads);62 63	evsel->counts = perf_counts__new(perf_cpu_map__nr(cpus), nthreads);64	return evsel->counts != NULL ? 0 : -ENOMEM;65}66 67void evsel__free_counts(struct evsel *evsel)68{69	perf_counts__delete(evsel->counts);70	evsel->counts = NULL;71}72