Binder: Add timestamp to transaction record
authorChuang Zhang <zhangchuang3@xiaomi.com>
Mon, 24 Apr 2023 11:05:14 +0000 (19:05 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 13 May 2023 11:38:12 +0000 (20:38 +0900)
This patch adds a timestamp field to the binder_transaction
structure to track the time consumed during transmission
when reading binder_transaction records.

Signed-off-by: Chuang Zhang <zhangchuang3@xiaomi.com>
Acked-by: Carlos Llamas <cmllamas@google.com>
Link: https://lore.kernel.org/r/5ac8c0d09392290be789423f0dd78a520b830fab.1682333709.git.zhangchuang3@xiaomi.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/android/binder.c
drivers/android/binder_internal.h

index fb56bfc..b641365 100644 (file)
@@ -66,6 +66,7 @@
 #include <linux/syscalls.h>
 #include <linux/task_work.h>
 #include <linux/sizes.h>
+#include <linux/ktime.h>
 
 #include <uapi/linux/android/binder.h>
 
@@ -2904,6 +2905,7 @@ static void binder_transaction(struct binder_proc *proc,
        binder_size_t last_fixup_min_off = 0;
        struct binder_context *context = proc->context;
        int t_debug_id = atomic_inc_return(&binder_last_id);
+       ktime_t t_start_time = ktime_get();
        char *secctx = NULL;
        u32 secctx_sz = 0;
        struct list_head sgc_head;
@@ -3145,6 +3147,7 @@ static void binder_transaction(struct binder_proc *proc,
        binder_stats_created(BINDER_STAT_TRANSACTION_COMPLETE);
 
        t->debug_id = t_debug_id;
+       t->start_time = t_start_time;
 
        if (reply)
                binder_debug(BINDER_DEBUG_TRANSACTION,
@@ -5930,17 +5933,19 @@ static void print_binder_transaction_ilocked(struct seq_file *m,
 {
        struct binder_proc *to_proc;
        struct binder_buffer *buffer = t->buffer;
+       ktime_t current_time = ktime_get();
 
        spin_lock(&t->lock);
        to_proc = t->to_proc;
        seq_printf(m,
-                  "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
+                  "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d elapsed %lldms",
                   prefix, t->debug_id, t,
                   t->from ? t->from->proc->pid : 0,
                   t->from ? t->from->pid : 0,
                   to_proc ? to_proc->pid : 0,
                   t->to_thread ? t->to_thread->pid : 0,
-                  t->code, t->flags, t->priority, t->need_reply);
+                  t->code, t->flags, t->priority, t->need_reply,
+                  ktime_ms_delta(current_time, t->start_time));
        spin_unlock(&t->lock);
 
        if (proc != to_proc) {
index 28ef5b3..92e6400 100644 (file)
@@ -528,6 +528,7 @@ struct binder_transaction {
        long    priority;
        long    saved_priority;
        kuid_t  sender_euid;
+       ktime_t start_time;
        struct list_head fd_fixups;
        binder_uintptr_t security_ctx;
        /**