Messages in this thread | | | Subject | Re: [PATCH v2 1/3] perf report: Change sort order by a specified event in group | From | "Jin, Yao" <> | Date | Wed, 11 Dec 2019 20:36:26 +0800 |
| |
On 12/11/2019 8:14 PM, Jiri Olsa wrote: > On Wed, Dec 11, 2019 at 08:01:44PM +0800, Jin, Yao wrote: >> >> >> On 12/11/2019 7:38 PM, Jiri Olsa wrote: >>> On Wed, Dec 11, 2019 at 03:30:34PM +0800, Jin Yao wrote: >>> >>> SNIP >>> >>>> + >>>> +static int __hpp__group_sort_idx(struct hist_entry *a, struct hist_entry *b, >>>> + hpp_field_fn get_field, int idx) >>>> +{ >>>> + struct evsel *evsel = hists_to_evsel(a->hists); >>>> + u64 *fields_a, *fields_b; >>>> + int cmp, nr_members, ret, i; >>>> + >>>> + cmp = field_cmp(get_field(a), get_field(b)); >>>> + if (!perf_evsel__is_group_event(evsel)) >>>> + return cmp; >>>> + >>>> + nr_members = evsel->core.nr_members; >>>> + ret = pair_fields_alloc(a, b, get_field, nr_members, >>>> + &fields_a, &fields_b); >>>> + if (ret) { >>>> + ret = cmp; >>>> + goto out; >>>> + } >>>> + >>>> + for (i = 1; i < nr_members; i++) { >>>> + if (i == idx) { >>>> + ret = field_cmp(fields_a[i], fields_b[i]); >>>> + if (ret) >>>> + goto out; >>>> + } >>>> + } >>>> + >>>> + if (cmp) { >>>> + ret = cmp; >>>> + goto out; >>>> + } >>>> + >>>> + for (i = 1; i < nr_members; i++) { >>>> + if (i != idx) { >>>> + ret = field_cmp(fields_a[i], fields_b[i]); >>>> + if (ret) >>>> + goto out; >>>> + } >>> >>> hi, >>> I'm missing why we compare the fields for 2nd time in here >>> >>> thanks, >>> jirka >>> >> >> Hi, >> >> I think we may continue comparing the remaining of fields if the index field >> is equal. :) > > aah, I missed it's actualy == used in the first one ;-) > > why don't you just call it directly? > > ret = field_cmp(fields_a[idx], fields_b[idx]) > if (ret) > goto out; > > jirka >
Oh, yes, we can use simpler code. For example,
if (idx >= 1 && idx < nr_members) { ret = field_cmp(fields_a[idx], fields_b[idx]); if (ret) goto out; }
Thanks Jin Yao
| |