This field will be used by commands which print counter deltas on regular timer intervals, such as perf stat -T.
Signed-off-by: Stephane Eranian <eran...@google.com> --- tools/perf/util/evsel.c | 21 +++++++++++++++++++++ tools/perf/util/evsel.h | 1 + 2 files changed, 22 insertions(+) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 1b16dd1..132da7c 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -646,6 +646,17 @@ int __perf_evsel__read_on_cpu(struct perf_evsel *evsel, if (readn(FD(evsel, cpu, thread), &count, nv * sizeof(u64)) < 0) return -errno; + if (evsel->prev_raw_counts) { + struct perf_counts_values tmp; + + tmp = evsel->prev_raw_counts->cpu[cpu]; + evsel->prev_raw_counts->cpu[cpu] = count; + + count.val = count.val - tmp.val; + count.ena = count.ena - tmp.ena; + count.run = count.run - tmp.run; + } + if (scale) { if (count.run == 0) count.val = 0; @@ -684,6 +695,16 @@ int __perf_evsel__read(struct perf_evsel *evsel, } } + if (evsel->prev_raw_counts) { + struct perf_counts_values tmp = evsel->prev_raw_counts->aggr; + + evsel->prev_raw_counts->aggr = *aggr; + + aggr->val = aggr->val - tmp.val; + aggr->ena = aggr->ena - tmp.ena; + aggr->run = aggr->run - tmp.run; + } + evsel->counts->scaled = 0; if (scale) { if (aggr->run == 0) { diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 3d2b801..63ea570 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -53,6 +53,7 @@ struct perf_evsel { struct xyarray *sample_id; u64 *id; struct perf_counts *counts; + struct perf_counts *prev_raw_counts; int idx; u32 ids; struct hists hists; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/