On Tue, Dec 24, 2013 at 05:22:09PM +0900, Namhyung Kim wrote:
> From: Namhyung Kim <namhyung....@lge.com>
> 
> Maintain accumulated stat information in hist_entry->stat_acc if
> symbol_conf.cumulate_callchain is set.  Fields in ->stat_acc have same
> vaules initially, and will be updated as callchain is processed later.
> 
> Cc: Arun Sharma <asha...@fb.com>
> Cc: Frederic Weisbecker <fweis...@gmail.com>
> Signed-off-by: Namhyung Kim <namhy...@kernel.org>
> ---
>  tools/perf/util/hist.c   | 18 ++++++++++++++++++
>  tools/perf/util/sort.h   |  1 +
>  tools/perf/util/symbol.h |  1 +
>  3 files changed, 20 insertions(+)
> 
> diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
> index 283aa1972b4f..b61e2fa42412 100644
> --- a/tools/perf/util/hist.c
> +++ b/tools/perf/util/hist.c
> @@ -237,6 +237,8 @@ static bool hists__decay_entry(struct hists *hists, 
> struct hist_entry *he)
>               return true;
>  
>       he_stat__decay(&he->stat);
> +     if (symbol_conf.cumulate_callchain)
> +             he_stat__decay(he->stat_acc);
>  
>       if (!he->filtered)
>               hists->stats.total_period -= prev_period - he->stat.period;
> @@ -284,6 +286,15 @@ static struct hist_entry *hist_entry__new(struct 
> hist_entry *template)
>       if (he != NULL) {
>               *he = *template;
>  
> +             if (symbol_conf.cumulate_callchain) {
> +                     he->stat_acc = malloc(sizeof(he->stat));
> +                     if (he->stat_acc == NULL) {
> +                             free(he);
> +                             return NULL;
> +                     }
> +                     memcpy(he->stat_acc, &he->stat, sizeof(he->stat));
> +             }
> +
>               if (he->ms.map)
>                       he->ms.map->referenced = true;
>  
> @@ -295,6 +306,7 @@ static struct hist_entry *hist_entry__new(struct 
> hist_entry *template)
>                        */
>                       he->branch_info = malloc(sizeof(*he->branch_info));
>                       if (he->branch_info == NULL) {
> +                             free(he->stat_acc);
>                               free(he);
>                               return NULL;

hum, he->stat_acc should get freed in hist_entry__free

jirka
--
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/

Reply via email to