On 11/21/2017 11:17 PM, Jiri Olsa wrote:
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


Fine, I will pass &rt_stat to perf_stat__update_shadow_stats to replace the NULL.

The change maybe needs to let the rt_stat be a global variable.

Thanks
Jin Yao

Reply via email to