perf stat: Move perf_counts struct and functions into separate object
authorJiri Olsa <jolsa@redhat.com>
Fri, 7 Aug 2015 10:51:03 +0000 (12:51 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 8 Aug 2015 17:16:49 +0000 (14:16 -0300)
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: Jiri 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.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-stat.c
tools/perf/util/Build
tools/perf/util/counts.c [new file with mode: 0644]
tools/perf/util/counts.h [new file with mode: 0644]
tools/perf/util/evsel.h
tools/perf/util/python-ext-sources
tools/perf/util/stat.c
tools/perf/util/stat.h

index a054ddc0b2a013aca7023ee9cfb2b3840f4827d5..7aa039bd379a42e3d10cdd4e76115fccbc6bb881 100644 (file)
@@ -58,6 +58,7 @@
 #include "util/cpumap.h"
 #include "util/thread.h"
 #include "util/thread_map.h"
+#include "util/counts.h"
 
 #include <stdlib.h>
 #include <sys/prctl.h>
index 2ee81d74cf457d56309def6dde816a72a597c2f1..1ce0adc8b3cb5fc155c2c8b62deae2f998943e07 100644 (file)
@@ -68,6 +68,7 @@ libperf-y += target.o
 libperf-y += rblist.o
 libperf-y += intlist.o
 libperf-y += vdso.o
+libperf-y += counts.o
 libperf-y += stat.o
 libperf-y += stat-shadow.o
 libperf-y += record.o
diff --git a/tools/perf/util/counts.c b/tools/perf/util/counts.c
new file mode 100644 (file)
index 0000000..e3fde31
--- /dev/null
@@ -0,0 +1,52 @@
+#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;
+}
diff --git a/tools/perf/util/counts.h b/tools/perf/util/counts.h
new file mode 100644 (file)
index 0000000..34d8baa
--- /dev/null
@@ -0,0 +1,37 @@
+#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 */
index 6a129081f3ad918cd6832b3700de90d7ede0255b..b948f69d255888463abd2ed6d76c9564624355a3 100644 (file)
@@ -9,7 +9,7 @@
 #include "xyarray.h"
 #include "symbol.h"
 #include "cpumap.h"
-#include "stat.h"
+#include "counts.h"
 
 struct perf_evsel;
 
index 0766d98c5da59dd1aa44c41aaee1791502ac9a0d..51be28b1bca26430de01a86649b976e382bb1198 100644 (file)
@@ -16,7 +16,7 @@ util/util.c
 util/xyarray.c
 util/cgroup.c
 util/rblist.c
-util/stat.c
+util/counts.c
 util/strlist.c
 util/trace-event.c
 ../lib/rbtree.c
index c5c709cdc3ce7da55f450922bb5109da754d5db0..415c359de4654be8f68a30effa530dd06696b52b 100644 (file)
@@ -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)
 {
        int i;
index 0b897b083682bb0eee9e400a1a3329ac3ee2374f..62448c8175d3de587eb6b9546df7bc4088b2bfa1 100644 (file)
@@ -33,23 +33,6 @@ enum aggr_mode {
        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 {
        enum aggr_mode  aggr_mode;
        bool            scale;
@@ -57,12 +40,6 @@ struct perf_stat_config {
        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);
 double avg_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,
 void perf_stat__print_shadow_stats(FILE *out, struct perf_evsel *evsel,
                                   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);
 int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel);
 void perf_evsel__free_stat_priv(struct perf_evsel *evsel);