]> Git Repo - linux.git/blobdiff - tools/perf/scripts/python/export-to-sqlite.py
Merge tag 'spi-fix-v5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi
[linux.git] / tools / perf / scripts / python / export-to-sqlite.py
index 021326c46285d6b7936822b76d66fefde2cf8ef2..8043a7272a56dcacc8ea3924cfd7a94b8d517adc 100644 (file)
@@ -177,7 +177,10 @@ do_query(query, 'CREATE TABLE threads ('
                'tid            integer)')
 do_query(query, 'CREATE TABLE comms ('
                'id             integer         NOT NULL        PRIMARY KEY,'
-               'comm           varchar(16))')
+               'comm           varchar(16),'
+               'c_thread_id    bigint,'
+               'c_time         bigint,'
+               'exec_flag      boolean)')
 do_query(query, 'CREATE TABLE comm_threads ('
                'id             integer         NOT NULL        PRIMARY KEY,'
                'comm_id        bigint,'
@@ -303,6 +306,17 @@ do_query(query, 'CREATE TABLE pwrx ('
                'last_cstate    integer,'
                'wake_reason    integer)')
 
+do_query(query, 'CREATE TABLE context_switches ('
+               'id             integer         NOT NULL        PRIMARY KEY,'
+               'machine_id     bigint,'
+               'time           bigint,'
+               'cpu            integer,'
+               'thread_out_id  bigint,'
+               'comm_out_id    bigint,'
+               'thread_in_id   bigint,'
+               'comm_in_id     bigint,'
+               'flags          integer)')
+
 # printf was added to sqlite in version 3.8.3
 sqlite_has_printf = False
 try:
@@ -527,6 +541,29 @@ do_query(query, 'CREATE VIEW power_events_view AS '
        ' INNER JOIN selected_events ON selected_events.id = evsel_id'
        ' WHERE selected_events.name IN (\'cbr\',\'mwait\',\'exstop\',\'pwre\',\'pwrx\')')
 
+do_query(query, 'CREATE VIEW context_switches_view AS '
+       'SELECT '
+               'context_switches.id,'
+               'context_switches.machine_id,'
+               'context_switches.time,'
+               'context_switches.cpu,'
+               'th_out.pid AS pid_out,'
+               'th_out.tid AS tid_out,'
+               'comm_out.comm AS comm_out,'
+               'th_in.pid AS pid_in,'
+               'th_in.tid AS tid_in,'
+               'comm_in.comm AS comm_in,'
+               'CASE     WHEN context_switches.flags = 0 THEN \'in\''
+                       ' WHEN context_switches.flags = 1 THEN \'out\''
+                       ' WHEN context_switches.flags = 3 THEN \'out preempt\''
+                       ' ELSE context_switches.flags '
+               'END AS flags'
+       ' FROM context_switches'
+       ' INNER JOIN threads AS th_out ON th_out.id   = context_switches.thread_out_id'
+       ' INNER JOIN threads AS th_in  ON th_in.id    = context_switches.thread_in_id'
+       ' INNER JOIN comms AS comm_out ON comm_out.id = context_switches.comm_out_id'
+       ' INNER JOIN comms AS comm_in  ON comm_in.id  = context_switches.comm_in_id')
+
 do_query(query, 'END TRANSACTION')
 
 evsel_query = QSqlQuery(db)
@@ -536,7 +573,7 @@ machine_query.prepare("INSERT INTO machines VALUES (?, ?, ?)")
 thread_query = QSqlQuery(db)
 thread_query.prepare("INSERT INTO threads VALUES (?, ?, ?, ?, ?)")
 comm_query = QSqlQuery(db)
-comm_query.prepare("INSERT INTO comms VALUES (?, ?)")
+comm_query.prepare("INSERT INTO comms VALUES (?, ?, ?, ?, ?)")
 comm_thread_query = QSqlQuery(db)
 comm_thread_query.prepare("INSERT INTO comm_threads VALUES (?, ?, ?)")
 dso_query = QSqlQuery(db)
@@ -568,6 +605,8 @@ exstop_query = QSqlQuery(db)
 exstop_query.prepare("INSERT INTO exstop VALUES (?, ?)")
 pwrx_query = QSqlQuery(db)
 pwrx_query.prepare("INSERT INTO pwrx VALUES (?, ?, ?, ?)")
+context_switch_query = QSqlQuery(db)
+context_switch_query.prepare("INSERT INTO context_switches VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")
 
 def trace_begin():
        printdate("Writing records...")
@@ -576,7 +615,7 @@ def trace_begin():
        evsel_table(0, "unknown")
        machine_table(0, 0, "unknown")
        thread_table(0, 0, 0, -1, -1)
-       comm_table(0, "unknown")
+       comm_table(0, "unknown", 0, 0, 0)
        dso_table(0, 0, "unknown", "unknown", "")
        symbol_table(0, 0, 0, 0, 0, "unknown")
        sample_table(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
@@ -603,6 +642,8 @@ def trace_end():
        if perf_db_export_calls:
                do_query(query, 'CREATE INDEX pcpid_idx ON calls (parent_call_path_id)')
                do_query(query, 'CREATE INDEX pid_idx ON calls (parent_id)')
+               do_query(query, 'ALTER TABLE comms ADD has_calls boolean')
+               do_query(query, 'UPDATE comms SET has_calls = 1 WHERE comms.id IN (SELECT DISTINCT comm_id FROM calls)')
 
        printdate("Dropping unused tables")
        if is_table_empty("ptwrite"):
@@ -615,6 +656,8 @@ def trace_end():
                drop("pwrx")
                if is_table_empty("cbr"):
                        drop("cbr")
+       if is_table_empty("context_switches"):
+               drop("context_switches")
 
        if (unhandled_count):
                printdate("Warning: ", unhandled_count, " unhandled events")
@@ -642,7 +685,7 @@ def thread_table(*x):
        bind_exec(thread_query, 5, x)
 
 def comm_table(*x):
-       bind_exec(comm_query, 2, x)
+       bind_exec(comm_query, 5, x)
 
 def comm_thread_table(*x):
        bind_exec(comm_thread_query, 3, x)
@@ -748,3 +791,6 @@ def synth_data(id, config, raw_buf, *x):
                pwrx(id, raw_buf)
        elif config == 5:
                cbr(id, raw_buf)
+
+def context_switch_table(*x):
+       bind_exec(context_switch_query, 9, x)
This page took 0.036483 seconds and 4 git commands to generate.