perf report: Support instruction latency
[linux-2.6-microblaze.git] / tools / perf / util / hist.c
index 4038b08..c82f5fc 100644 (file)
@@ -209,6 +209,8 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
        hists__new_col_len(hists, HISTC_LOCAL_WEIGHT, 12);
        hists__new_col_len(hists, HISTC_GLOBAL_WEIGHT, 12);
        hists__new_col_len(hists, HISTC_MEM_BLOCKED, 10);
+       hists__new_col_len(hists, HISTC_LOCAL_INS_LAT, 13);
+       hists__new_col_len(hists, HISTC_GLOBAL_INS_LAT, 13);
        if (symbol_conf.nanosecs)
                hists__new_col_len(hists, HISTC_TIME, 16);
        else
@@ -287,12 +289,13 @@ static long hist_time(unsigned long htime)
 }
 
 static void he_stat__add_period(struct he_stat *he_stat, u64 period,
-                               u64 weight)
+                               u64 weight, u64 ins_lat)
 {
 
        he_stat->period         += period;
        he_stat->weight         += weight;
        he_stat->nr_events      += 1;
+       he_stat->ins_lat        += ins_lat;
 }
 
 static void he_stat__add_stat(struct he_stat *dest, struct he_stat *src)
@@ -304,6 +307,7 @@ static void he_stat__add_stat(struct he_stat *dest, struct he_stat *src)
        dest->period_guest_us   += src->period_guest_us;
        dest->nr_events         += src->nr_events;
        dest->weight            += src->weight;
+       dest->ins_lat           += src->ins_lat;
 }
 
 static void he_stat__decay(struct he_stat *he_stat)
@@ -592,6 +596,7 @@ static struct hist_entry *hists__findnew_entry(struct hists *hists,
        int64_t cmp;
        u64 period = entry->stat.period;
        u64 weight = entry->stat.weight;
+       u64 ins_lat = entry->stat.ins_lat;
        bool leftmost = true;
 
        p = &hists->entries_in->rb_root.rb_node;
@@ -610,11 +615,11 @@ static struct hist_entry *hists__findnew_entry(struct hists *hists,
 
                if (!cmp) {
                        if (sample_self) {
-                               he_stat__add_period(&he->stat, period, weight);
+                               he_stat__add_period(&he->stat, period, weight, ins_lat);
                                hist_entry__add_callchain_period(he, period);
                        }
                        if (symbol_conf.cumulate_callchain)
-                               he_stat__add_period(he->stat_acc, period, weight);
+                               he_stat__add_period(he->stat_acc, period, weight, ins_lat);
 
                        /*
                         * This mem info was allocated from sample__resolve_mem
@@ -725,6 +730,7 @@ __hists__add_entry(struct hists *hists,
                        .nr_events = 1,
                        .period = sample->period,
                        .weight = sample->weight,
+                       .ins_lat = sample->ins_lat,
                },
                .parent = sym_parent,
                .filtered = symbol__parent_filter(sym_parent) | al->filtered,