Skip to content

Commit

Permalink
perf hists: Don't free decayed entries if in the annotation browser
Browse files Browse the repository at this point in the history
Just let it there till the user exits the annotation browser.

Cc: David Ahern <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
acmel committed Oct 13, 2011
1 parent 900e14a commit df71d95
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
10 changes: 8 additions & 2 deletions tools/perf/util/hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ 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;
Expand All @@ -114,8 +116,12 @@ 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)
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/sort.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ struct hist_entry {

bool init_have_children;
char level;
bool used;
u8 filtered;
struct symbol *parent;
union {
Expand Down
6 changes: 5 additions & 1 deletion tools/perf/util/ui/browsers/hists.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,9 +976,13 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events,
he = hist_browser__selected_entry(browser);
if (he == NULL)
continue;

/*
* Don't let this be freed, say, by hists__decay_entry.
*/
he->used = true;
hist_entry__tui_annotate(he, evsel->idx, nr_events,
timer, arg, delay_secs);
he->used = false;
ui_browser__update_nr_entries(&browser->b, browser->hists->nr_entries);
} else if (choice == browse_map)
map__browse(browser->selection->map);
Expand Down

0 comments on commit df71d95

Please sign in to comment.