Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Android.bp
Original file line number Diff line number Diff line change
Expand Up @@ -16646,6 +16646,7 @@ genrule {
"src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql",
"src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql",
"src/trace_processor/perfetto_sql/stdlib/android/kernel_wakelocks.sql",
"src/trace_processor/perfetto_sql/stdlib/android/lock_contention.sql",
"src/trace_processor/perfetto_sql/stdlib/android/memory/dmabuf.sql",
"src/trace_processor/perfetto_sql/stdlib/android/memory/dmabuf_spans.sql",
"src/trace_processor/perfetto_sql/stdlib/android/memory/heap_graph/class_relationship.sql",
Expand Down
1 change: 1 addition & 0 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3703,6 +3703,7 @@ perfetto_filegroup(
"src/trace_processor/perfetto_sql/stdlib/android/job_scheduler.sql",
"src/trace_processor/perfetto_sql/stdlib/android/job_scheduler_states.sql",
"src/trace_processor/perfetto_sql/stdlib/android/kernel_wakelocks.sql",
"src/trace_processor/perfetto_sql/stdlib/android/lock_contention.sql",
"src/trace_processor/perfetto_sql/stdlib/android/monitor_contention.sql",
"src/trace_processor/perfetto_sql/stdlib/android/network_packets.sql",
"src/trace_processor/perfetto_sql/stdlib/android/oom_adjuster.sql",
Expand Down
1 change: 1 addition & 0 deletions src/trace_processor/perfetto_sql/stdlib/android/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ perfetto_sql_source_set("android") {
"job_scheduler.sql",
"job_scheduler_states.sql",
"kernel_wakelocks.sql",
"lock_contention.sql",
"monitor_contention.sql",
"network_packets.sql",
"oom_adjuster.sql",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
INCLUDE PERFETTO MODULE android.monitor_contention;

-- Extracts the owner tid from a lock contention slice name.
CREATE PERFETTO FUNCTION android_extract_lock_contention_owner_tid(
-- Name of the slice.
slice_name STRING
)
-- The owner tid.
RETURNS LONG AS
SELECT
cast_int!(STR_SPLIT(STR_SPLIT($slice_name, "(owner tid: ", 1), ")", 0));

-- Contains parsed lock contention events, including the owner tid and blocked/blocking thread names.
CREATE PERFETTO TABLE android_lock_contention (
-- Slice ID.
id LONG,
-- Timestamp.
ts LONG,
-- Duration.
dur LONG,
-- Slice name.
name STRING,
-- Owner TID.
owner_tid LONG,
-- Blocked thread name.
blocked_thread_name STRING,
-- Blocking thread name.
blocking_thread_name STRING
) AS
SELECT
s.id,
s.ts,
s.dur,
s.name,
android_extract_lock_contention_owner_tid(s.name) AS owner_tid,
bt.name AS blocked_thread_name,
obt.name AS blocking_thread_name
FROM slice AS s
JOIN thread_track AS tt
ON s.track_id = tt.id
JOIN thread AS bt
USING (utid)
LEFT JOIN thread AS obt
ON obt.tid = android_extract_lock_contention_owner_tid(s.name)
AND obt.upid = bt.upid
WHERE
s.name GLOB 'Lock contention*' AND s.name GLOB '*(owner tid: *)*';

-- Contains the union of all lock contention events from both ART and Monitor contention sources.
CREATE PERFETTO TABLE android_all_lock_contentions (
-- Slice ID.
id LONG,
-- Timestamp.
ts LONG,
-- Duration.
dur LONG,
-- Slice name.
name STRING,
-- Owner TID.
owner_tid LONG,
-- Blocked thread name.
blocked_thread_name STRING,
-- Blocking thread name.
blocking_thread_name STRING
) AS
SELECT
id,
ts,
dur,
'[Lock Owner] Blocking: ' || name AS name,
owner_tid,
blocked_thread_name,
blocking_thread_name
FROM android_lock_contention
UNION ALL
SELECT
id,
ts,
coalesce(dur, -1) AS dur,
'[Lock Owner] Blocking: Lock contention on a monitor lock (owner tid: ' || coalesce(blocking_tid, '-') || ')' AS name,
blocking_tid AS owner_tid,
blocked_thread_name,
blocking_thread_name
FROM android_monitor_contention_chain;

-- Index on owner_tid to speed up layout window functions.
CREATE PERFETTO INDEX android_all_lock_contentions_owner_tid ON android_all_lock_contentions(owner_tid);
Loading
Loading