dbus-latency: rework command line options 61/271461/5
authorAdrian Szyndela <adrian.s@samsung.com>
Wed, 26 Jan 2022 10:36:05 +0000 (11:36 +0100)
committerAdrian Szyndela <adrian.s@samsung.com>
Wed, 9 Mar 2022 13:48:56 +0000 (14:48 +0100)
Remove '--histogram', it is now default.
Make 'count' option work.
Add '--no-gio' and '--no-libdbus' for flexibility.

Change-Id: If1cdc3e9b9d0f99fc636517894b25ae7bea6fa64

tools/dbus-latency.py

index 15e83fd958644f73a1d0e498be941f0bf542eb23..2e997a617fd4636f43ba5b21eba1294f62f9599e 100755 (executable)
@@ -3,31 +3,43 @@
 from bcc import BPF
 from time import sleep
 from ctypes import c_ushort, c_int, c_ulonglong
-from sys import argv
-
-def usage():
-       print("USAGE: %s [--process|histogram]" % argv[0])
-       exit()
-
-count = 100
-interval = 2
+import argparse
+
+parser = argparse.ArgumentParser(
+       description="Measure time interval needed for transporting D-Bus messages",
+       formatter_class=argparse.RawDescriptionHelpFormatter)
+parser.add_argument("--process", action="store_true",
+       help="change output format to top-like")
+parser.add_argument("--no-libdbus", action="store_true",
+       help="exclude messages sent with libdbus")
+parser.add_argument("--no-gio", action="store_true",
+       help="exclude messages sent with gio")
+parser.add_argument("interval", nargs="?", default=2,
+       help="output interval, in seconds")
+parser.add_argument("count", nargs="?", default=-1,
+       help="number of outputs")
+
+args = parser.parse_args()
+interval = int(args.interval)
 loop = 0
+count = int(args.count)
 
-mode = "histogram"
-if len(argv) != 2:
-       usage()
-if argv[1] == "--histogram":
-       mode = "histogram"
-elif argv[1] == "--process":
+if args.process:
        mode = "process"
 else:
-       usage()
+       mode = "histogram"
 
 b = BPF(src_file="dbus-latency.c")
 
-b.attach_uprobe(name="dbus-1", sym="_dbus_message_get_network_data", fn_name="get_msg_addr")
+# catch sending
+if not args.no_libdbus:
+       b.attach_uprobe(name="dbus-1", sym="_dbus_message_get_network_data", fn_name="get_msg_addr")
+if not args.no_gio:
+       b.attach_uprobe(name="gio-2.0", sym="on_worker_message_about_to_be_sent", fn_name="g_get_msg_addr")
+
+# catch receiving - don't disable libdbus or libgio, we still want to know that a gio-based
+# program received a message sent by a libdbus-based program
 b.attach_uprobe(name="dbus-1", sym="_dbus_connection_queue_received_message_link", fn_name="get_msg_latency")
-b.attach_uprobe(name="gio-2.0", sym="on_worker_message_about_to_be_sent", fn_name="g_get_msg_addr")
 b.attach_uprobe(name="gio-2.0", sym="on_worker_message_received", fn_name="g_get_msg_latency")
 
 print("Hit Ctrl-C to end.")
@@ -46,3 +58,6 @@ while (1):
 
        print(" messages being transferred: %d" % len(b["msg_sent_addr"].items()))
 
+       if count == loop:
+               print 'Finished'
+               break