perf hists: Introduce perf_hpp_list__for_each_format macro
[deliverable/linux.git] / tools / perf / ui / hist.c
index c877c52ff4bc0560b1848ee43d723324fa996aae..7b5e8cedf853c299032e01272386f1fc8f38544c 100644 (file)
@@ -436,9 +436,10 @@ struct perf_hpp_fmt perf_hpp__format[] = {
        HPP__PRINT_FNS("Period", period, PERIOD)
 };
 
-LIST_HEAD(perf_hpp__list);
-LIST_HEAD(perf_hpp__sort_list);
-
+struct perf_hpp_list perf_hpp_list = {
+       .fields = LIST_HEAD_INIT(perf_hpp_list.fields),
+       .sorts  = LIST_HEAD_INIT(perf_hpp_list.sorts),
+};
 
 #undef HPP__COLOR_PRINT_FNS
 #undef HPP__COLOR_ACC_PRINT_FNS
@@ -504,31 +505,21 @@ void perf_hpp__init(void)
                hpp_dimension__add_output(PERF_HPP__PERIOD);
 }
 
-void perf_hpp__column_register(struct perf_hpp_fmt *format)
-{
-       list_add_tail(&format->list, &perf_hpp__list);
-}
-
-void perf_hpp__column_unregister(struct perf_hpp_fmt *format)
+void perf_hpp_list__column_register(struct perf_hpp_list *list,
+                                   struct perf_hpp_fmt *format)
 {
-       list_del(&format->list);
+       list_add_tail(&format->list, &list->fields);
 }
 
-void perf_hpp__register_sort_field(struct perf_hpp_fmt *format)
+void perf_hpp_list__register_sort_field(struct perf_hpp_list *list,
+                                       struct perf_hpp_fmt *format)
 {
-       list_add_tail(&format->sort_list, &perf_hpp__sort_list);
+       list_add_tail(&format->sort_list, &list->sorts);
 }
 
-void perf_hpp__column_enable(unsigned col)
-{
-       BUG_ON(col >= PERF_HPP__MAX_INDEX);
-       perf_hpp__column_register(&perf_hpp__format[col]);
-}
-
-void perf_hpp__column_disable(unsigned col)
+void perf_hpp__column_unregister(struct perf_hpp_fmt *format)
 {
-       BUG_ON(col >= PERF_HPP__MAX_INDEX);
-       perf_hpp__column_unregister(&perf_hpp__format[col]);
+       list_del(&format->list);
 }
 
 void perf_hpp__cancel_cumulate(void)
@@ -565,7 +556,7 @@ void perf_hpp__setup_output_field(void)
        perf_hpp__for_each_sort_list(fmt) {
                struct perf_hpp_fmt *pos;
 
-               perf_hpp__for_each_format(pos) {
+               perf_hpp_list__for_each_format(&perf_hpp_list, pos) {
                        if (fmt_equal(fmt, pos))
                                goto next;
                }
@@ -581,7 +572,7 @@ void perf_hpp__append_sort_keys(void)
        struct perf_hpp_fmt *fmt;
 
        /* append output fields to sort keys */
-       perf_hpp__for_each_format(fmt) {
+       perf_hpp_list__for_each_format(&perf_hpp_list, fmt) {
                struct perf_hpp_fmt *pos;
 
                perf_hpp__for_each_sort_list(pos) {
@@ -595,6 +586,12 @@ next:
        }
 }
 
+static void fmt_free(struct perf_hpp_fmt *fmt)
+{
+       if (fmt->free)
+               fmt->free(fmt);
+}
+
 void perf_hpp__reset_output_field(void)
 {
        struct perf_hpp_fmt *fmt, *tmp;
@@ -603,12 +600,14 @@ void perf_hpp__reset_output_field(void)
        perf_hpp__for_each_format_safe(fmt, tmp) {
                list_del_init(&fmt->list);
                list_del_init(&fmt->sort_list);
+               fmt_free(fmt);
        }
 
        /* reset sort keys */
        perf_hpp__for_each_sort_list_safe(fmt, tmp) {
                list_del_init(&fmt->list);
                list_del_init(&fmt->sort_list);
+               fmt_free(fmt);
        }
 }
 
@@ -622,7 +621,7 @@ unsigned int hists__sort_list_width(struct hists *hists)
        bool first = true;
        struct perf_hpp dummy_hpp;
 
-       perf_hpp__for_each_format(fmt) {
+       perf_hpp_list__for_each_format(&perf_hpp_list, fmt) {
                if (perf_hpp__should_skip(fmt, hists))
                        continue;
 
@@ -675,7 +674,7 @@ void perf_hpp__set_user_width(const char *width_list_str)
        struct perf_hpp_fmt *fmt;
        const char *ptr = width_list_str;
 
-       perf_hpp__for_each_format(fmt) {
+       perf_hpp_list__for_each_format(&perf_hpp_list, fmt) {
                char *p;
 
                int len = strtol(ptr, &p, 10);
This page took 0.027906 seconds and 5 git commands to generate.