diff options
author | Ingo Molnar <mingo@elte.hu> | 2011-10-15 16:57:48 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-10-15 16:57:48 +0200 |
commit | c73a3cb356f94b443aa7624b539493191dbf44c1 (patch) | |
tree | a813dbd5e3e2cf77ce33729e07f6fda3a819e3bb /tools/perf/util/hist.c | |
parent | 910e94dd0cc5abacebf0bd5ffd859f61b9583857 (diff) | |
parent | 6c3c5b26d08569ed80e10d3e02d3c997ed1e6e7c (diff) | |
download | linux-c73a3cb356f94b443aa7624b539493191dbf44c1.tar.gz |
Merge branch 'perf/core' of git://github.com/acmel/linux into perf/core
Diffstat (limited to 'tools/perf/util/hist.c')
-rw-r--r-- | tools/perf/util/hist.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 50c8fece1681..a7193c5a0422 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -100,13 +100,15 @@ static void hist_entry__decay(struct hist_entry *he) static bool hists__decay_entry(struct hists *hists, struct hist_entry *he) { + if (he->period == 0) + return true; hists->stats.total_period -= he->period; hist_entry__decay(he); hists->stats.total_period += he->period; return he->period == 0; } -void hists__decay_entries(struct hists *hists) +static void __hists__decay_entries(struct hists *hists, bool threaded) { struct rb_node *next = rb_first(&hists->entries); struct hist_entry *n; @@ -114,11 +116,15 @@ void hists__decay_entries(struct hists *hists) while (next) { n = rb_entry(next, struct hist_entry, rb_node); next = rb_next(&n->rb_node); - - if (hists__decay_entry(hists, n)) { + /* + * We may be annotating this, for instance, so keep it here in + * case some it gets new samples, we'll eventually free it when + * the user stops browsing and it agains gets fully decayed. + */ + if (hists__decay_entry(hists, n) && !n->used) { rb_erase(&n->rb_node, &hists->entries); - if (sort__need_collapse) + if (sort__need_collapse || threaded) rb_erase(&n->rb_node_in, &hists->entries_collapsed); hist_entry__free(n); @@ -127,6 +133,16 @@ void hists__decay_entries(struct hists *hists) } } +void hists__decay_entries(struct hists *hists) +{ + return __hists__decay_entries(hists, false); +} + +void hists__decay_entries_threaded(struct hists *hists) +{ + return __hists__decay_entries(hists, true); +} + /* * histogram, sorted on item, collects periods */ |