On Mon, Nov 20, 2017 at 10:43:39PM +0800, Jin Yao wrote:

SNIP

> diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
> index 045e129..6f28782 100644
> --- a/tools/perf/util/stat-shadow.c
> +++ b/tools/perf/util/stat-shadow.c
> @@ -110,19 +110,32 @@ static void saved_value_delete(struct rblist *rblist 
> __maybe_unused,
>  
>  static struct saved_value *saved_value_lookup(struct perf_evsel *evsel,
>                                             int cpu,
> -                                           bool create)
> +                                           bool create,
> +                                           enum stat_type type,
> +                                           int ctx,
> +                                           struct runtime_stat *stat)
>  {
> +     struct rblist *rblist;
>       struct rb_node *nd;
>       struct saved_value dm = {
>               .cpu = cpu,
>               .evsel = evsel,
> +             .type = type,
> +             .ctx = ctx,
> +             .stat = stat,
>       };
> -     nd = rblist__find(&runtime_saved_values, &dm);
> +
> +     if (stat)
> +             rblist = &stat->value_list;
> +     else
> +             rblist = &rt_stat.value_list;

please pass the correct 'struct runtime_stat *stat',

I don't see a reason noot to pass &rt_stat directly below:


> diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
> index 151e9ef..50bb16d 100644
> --- a/tools/perf/util/stat.c
> +++ b/tools/perf/util/stat.c
> @@ -278,9 +278,16 @@ process_counter_values(struct perf_stat_config *config, 
> struct perf_evsel *evsel
>                       perf_evsel__compute_deltas(evsel, cpu, thread, count);
>               perf_counts_values__scale(count, config->scale, NULL);
>               if (config->aggr_mode == AGGR_NONE)
> -                     perf_stat__update_shadow_stats(evsel, count->val, cpu);
> -             if (config->aggr_mode == AGGR_THREAD)
> -                     perf_stat__update_shadow_stats(evsel, count->val, 0);
> +                     perf_stat__update_shadow_stats(evsel, count->val, cpu,
> +                                                    NULL);
> +             if (config->aggr_mode == AGGR_THREAD) {
> +                     if (config->stats)
> +                             perf_stat__update_shadow_stats(evsel,
> +                                     count->val, 0, &config->stats[thread]);
> +                     else
> +                             perf_stat__update_shadow_stats(evsel,
> +                                     count->val, 0, NULL);

here

> +             }
>               break;
>       case AGGR_GLOBAL:
>               aggr->val += count->val;
> @@ -362,7 +369,7 @@ int perf_stat_process_counter(struct perf_stat_config 
> *config,
>       /*
>        * Save the full runtime - to allow normalization during printout:
>        */
> -     perf_stat__update_shadow_stats(counter, *count, 0);
> +     perf_stat__update_shadow_stats(counter, *count, 0, NULL);

and here

thanks,
jirka

Reply via email to