]> git.ipfire.org Git - thirdparty/kernel/linux.git/blobdiff - tools/perf/util/ordered-events.c
perf top: Add processing thread
[thirdparty/kernel/linux.git] / tools / perf / util / ordered-events.c
index 1904e7f6ec84d88d57fd658cde91c73b0b0c9ff1..c5412db05683b9847e39e69b952144af1fcd0478 100644 (file)
@@ -219,13 +219,13 @@ int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
        return 0;
 }
 
-static int __ordered_events__flush(struct ordered_events *oe)
+static int __ordered_events__flush(struct ordered_events *oe,
+                                  bool show_progress)
 {
        struct list_head *head = &oe->events;
        struct ordered_event *tmp, *iter;
        u64 limit = oe->next_flush;
        u64 last_ts = oe->last ? oe->last->timestamp : 0ULL;
-       bool show_progress = limit == ULLONG_MAX;
        struct ui_progress prog;
        int ret;
 
@@ -272,12 +272,16 @@ int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
                "HALF ",
        };
        int err;
+       bool show_progress = false;
 
        if (oe->nr_events == 0)
                return 0;
 
        switch (how) {
        case OE_FLUSH__FINAL:
+               show_progress = true;
+               __fallthrough;
+       case OE_FLUSH__TOP:
                oe->next_flush = ULLONG_MAX;
                break;
 
@@ -308,7 +312,7 @@ int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
                   str[how], oe->nr_events);
        pr_oe_time(oe->max_timestamp, "max_timestamp\n");
 
-       err = __ordered_events__flush(oe);
+       err = __ordered_events__flush(oe, show_progress);
 
        if (!err) {
                if (how == OE_FLUSH__ROUND)
@@ -324,7 +328,8 @@ int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
        return err;
 }
 
-void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver)
+void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver,
+                         void *data)
 {
        INIT_LIST_HEAD(&oe->events);
        INIT_LIST_HEAD(&oe->cache);
@@ -332,6 +337,7 @@ void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t d
        oe->max_alloc_size = (u64) -1;
        oe->cur_alloc_size = 0;
        oe->deliver        = deliver;
+       oe->data           = data;
 }
 
 static void
@@ -375,5 +381,5 @@ void ordered_events__reinit(struct ordered_events *oe)
 
        ordered_events__free(oe);
        memset(oe, '\0', sizeof(*oe));
-       ordered_events__init(oe, old_deliver);
+       ordered_events__init(oe, old_deliver, oe->data);
 }