提交 d809560b 编写于 作者: J Jiri Olsa 提交者: Arnaldo Carvalho de Melo

perf stat: Move perf_counts struct and functions into separate object

Moving 'struct perf_counts' and associated functions into separate
object, so we could remove stat.c object dependency from python build.

It makes the python code to build properly, because it fails to load due
to missing stat-shadow.c object dependency if some patches from Kan
Liang are applied.

So apply this one, then Kan's.
Signed-off-by: NJiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20150807105103.GB8624@krava.brq.redhat.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 f1d800bf
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
#include "util/cpumap.h" #include "util/cpumap.h"
#include "util/thread.h" #include "util/thread.h"
#include "util/thread_map.h" #include "util/thread_map.h"
#include "util/counts.h"
#include <stdlib.h> #include <stdlib.h>
#include <sys/prctl.h> #include <sys/prctl.h>
......
...@@ -68,6 +68,7 @@ libperf-y += target.o ...@@ -68,6 +68,7 @@ libperf-y += target.o
libperf-y += rblist.o libperf-y += rblist.o
libperf-y += intlist.o libperf-y += intlist.o
libperf-y += vdso.o libperf-y += vdso.o
libperf-y += counts.o
libperf-y += stat.o libperf-y += stat.o
libperf-y += stat-shadow.o libperf-y += stat-shadow.o
libperf-y += record.o libperf-y += record.o
......
#include <stdlib.h>
#include "evsel.h"
#include "counts.h"
struct perf_counts *perf_counts__new(int ncpus, int nthreads)
{
struct perf_counts *counts = zalloc(sizeof(*counts));
if (counts) {
struct xyarray *values;
values = xyarray__new(ncpus, nthreads, sizeof(struct perf_counts_values));
if (!values) {
free(counts);
return NULL;
}
counts->values = values;
}
return counts;
}
void perf_counts__delete(struct perf_counts *counts)
{
if (counts) {
xyarray__delete(counts->values);
free(counts);
}
}
static void perf_counts__reset(struct perf_counts *counts)
{
xyarray__reset(counts->values);
}
void perf_evsel__reset_counts(struct perf_evsel *evsel)
{
perf_counts__reset(evsel->counts);
}
int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus, int nthreads)
{
evsel->counts = perf_counts__new(ncpus, nthreads);
return evsel->counts != NULL ? 0 : -ENOMEM;
}
void perf_evsel__free_counts(struct perf_evsel *evsel)
{
perf_counts__delete(evsel->counts);
evsel->counts = NULL;
}
#ifndef __PERF_COUNTS_H
#define __PERF_COUNTS_H
#include "xyarray.h"
struct perf_counts_values {
union {
struct {
u64 val;
u64 ena;
u64 run;
};
u64 values[3];
};
};
struct perf_counts {
s8 scaled;
struct perf_counts_values aggr;
struct xyarray *values;
};
static inline struct perf_counts_values*
perf_counts(struct perf_counts *counts, int cpu, int thread)
{
return xyarray__entry(counts->values, cpu, thread);
}
struct perf_counts *perf_counts__new(int ncpus, int nthreads);
void perf_counts__delete(struct perf_counts *counts);
void perf_evsel__reset_counts(struct perf_evsel *evsel);
int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus, int nthreads);
void perf_evsel__free_counts(struct perf_evsel *evsel);
#endif /* __PERF_COUNTS_H */
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "xyarray.h" #include "xyarray.h"
#include "symbol.h" #include "symbol.h"
#include "cpumap.h" #include "cpumap.h"
#include "stat.h" #include "counts.h"
struct perf_evsel; struct perf_evsel;
......
...@@ -16,7 +16,7 @@ util/util.c ...@@ -16,7 +16,7 @@ util/util.c
util/xyarray.c util/xyarray.c
util/cgroup.c util/cgroup.c
util/rblist.c util/rblist.c
util/stat.c util/counts.c
util/strlist.c util/strlist.c
util/trace-event.c util/trace-event.c
../lib/rbtree.c ../lib/rbtree.c
......
...@@ -97,55 +97,6 @@ void perf_stat_evsel_id_init(struct perf_evsel *evsel) ...@@ -97,55 +97,6 @@ void perf_stat_evsel_id_init(struct perf_evsel *evsel)
} }
} }
struct perf_counts *perf_counts__new(int ncpus, int nthreads)
{
struct perf_counts *counts = zalloc(sizeof(*counts));
if (counts) {
struct xyarray *values;
values = xyarray__new(ncpus, nthreads, sizeof(struct perf_counts_values));
if (!values) {
free(counts);
return NULL;
}
counts->values = values;
}
return counts;
}
void perf_counts__delete(struct perf_counts *counts)
{
if (counts) {
xyarray__delete(counts->values);
free(counts);
}
}
static void perf_counts__reset(struct perf_counts *counts)
{
xyarray__reset(counts->values);
}
void perf_evsel__reset_counts(struct perf_evsel *evsel)
{
perf_counts__reset(evsel->counts);
}
int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus, int nthreads)
{
evsel->counts = perf_counts__new(ncpus, nthreads);
return evsel->counts != NULL ? 0 : -ENOMEM;
}
void perf_evsel__free_counts(struct perf_evsel *evsel)
{
perf_counts__delete(evsel->counts);
evsel->counts = NULL;
}
void perf_evsel__reset_stat_priv(struct perf_evsel *evsel) void perf_evsel__reset_stat_priv(struct perf_evsel *evsel)
{ {
int i; int i;
......
...@@ -33,23 +33,6 @@ enum aggr_mode { ...@@ -33,23 +33,6 @@ enum aggr_mode {
AGGR_THREAD, AGGR_THREAD,
}; };
struct perf_counts_values {
union {
struct {
u64 val;
u64 ena;
u64 run;
};
u64 values[3];
};
};
struct perf_counts {
s8 scaled;
struct perf_counts_values aggr;
struct xyarray *values;
};
struct perf_stat_config { struct perf_stat_config {
enum aggr_mode aggr_mode; enum aggr_mode aggr_mode;
bool scale; bool scale;
...@@ -57,12 +40,6 @@ struct perf_stat_config { ...@@ -57,12 +40,6 @@ struct perf_stat_config {
unsigned int interval; unsigned int interval;
}; };
static inline struct perf_counts_values*
perf_counts(struct perf_counts *counts, int cpu, int thread)
{
return xyarray__entry(counts->values, cpu, thread);
}
void update_stats(struct stats *stats, u64 val); void update_stats(struct stats *stats, u64 val);
double avg_stats(struct stats *stats); double avg_stats(struct stats *stats);
double stddev_stats(struct stats *stats); double stddev_stats(struct stats *stats);
...@@ -96,13 +73,6 @@ void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count, ...@@ -96,13 +73,6 @@ void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 *count,
void perf_stat__print_shadow_stats(FILE *out, struct perf_evsel *evsel, void perf_stat__print_shadow_stats(FILE *out, struct perf_evsel *evsel,
double avg, int cpu, enum aggr_mode aggr); double avg, int cpu, enum aggr_mode aggr);
struct perf_counts *perf_counts__new(int ncpus, int nthreads);
void perf_counts__delete(struct perf_counts *counts);
void perf_evsel__reset_counts(struct perf_evsel *evsel);
int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus, int nthreads);
void perf_evsel__free_counts(struct perf_evsel *evsel);
void perf_evsel__reset_stat_priv(struct perf_evsel *evsel); void perf_evsel__reset_stat_priv(struct perf_evsel *evsel);
int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel); int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel);
void perf_evsel__free_stat_priv(struct perf_evsel *evsel); void perf_evsel__free_stat_priv(struct perf_evsel *evsel);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册