linux/tools/perf/util/counts.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <errno.h>
   3#include <stdlib.h>
   4#include "evsel.h"
   5#include "counts.h"
   6#include <linux/zalloc.h>
   7
   8struct perf_counts *perf_counts__new(int ncpus, int nthreads)
   9{
  10        struct perf_counts *counts = zalloc(sizeof(*counts));
  11
  12        if (counts) {
  13                struct xyarray *values;
  14
  15                values = xyarray__new(ncpus, nthreads, sizeof(struct perf_counts_values));
  16                if (!values) {
  17                        free(counts);
  18                        return NULL;
  19                }
  20
  21                counts->values = values;
  22
  23                values = xyarray__new(ncpus, nthreads, sizeof(bool));
  24                if (!values) {
  25                        xyarray__delete(counts->values);
  26                        free(counts);
  27                        return NULL;
  28                }
  29
  30                counts->loaded = values;
  31        }
  32
  33        return counts;
  34}
  35
  36void perf_counts__delete(struct perf_counts *counts)
  37{
  38        if (counts) {
  39                xyarray__delete(counts->loaded);
  40                xyarray__delete(counts->values);
  41                free(counts);
  42        }
  43}
  44
  45static void perf_counts__reset(struct perf_counts *counts)
  46{
  47        xyarray__reset(counts->loaded);
  48        xyarray__reset(counts->values);
  49}
  50
  51void perf_evsel__reset_counts(struct evsel *evsel)
  52{
  53        perf_counts__reset(evsel->counts);
  54}
  55
  56int perf_evsel__alloc_counts(struct evsel *evsel, int ncpus, int nthreads)
  57{
  58        evsel->counts = perf_counts__new(ncpus, nthreads);
  59        return evsel->counts != NULL ? 0 : -ENOMEM;
  60}
  61
  62void perf_evsel__free_counts(struct evsel *evsel)
  63{
  64        perf_counts__delete(evsel->counts);
  65        evsel->counts = NULL;
  66}
  67