Sử dụng SQL để tìm các trạng thái cụ thể trong dấu vết Winscope Perfetto. Sử dụng trình xem Tìm kiếm chung trong giao diện người dùng Winscope để chạy các truy vấn và trực quan hoá kết quả dạng bảng:
Hình 1. Thẻ Tìm kiếm người xem.
Trình xem Tìm kiếm cho phép bạn viết và chạy các truy vấn SQL tuỳ chỉnh trên dấu vết Perfetto, cũng như truy cập vào các truy vấn gần đây và đã lưu. Winscope cung cấp các khung hiển thị SQL chuyên biệt để hỗ trợ việc tìm kiếm các dấu vết SurfaceFlinger, Giao dịch, Chuyển đổi và ViewCapture.
Hãy sử dụng các quy ước sau cho tất cả các khung hiển thị:
Đối với cột
property
vàflat_property
:- Tên thuộc tính ở dạng snake case, ví dụ:
visible_region
từLayerProto
. Ký hiệu dấu chấm biểu thị các thuộc tính lồng nhau, ví dụ:
visible_region.rect
.Các trường lặp lại trong
property
được phân biệt bằng dấu ngoặc vuông:Ví dụ: trong hai thực thể của trường lặp lại
visible_region.rect
, trườngtop
được biểu thị bằngvisible_region.rect[0].top
vàvisible_region.rect[1].top
.Các trường lặp lại trong
flat_property
không phân biệt được:Ví dụ: trong hai thực thể của trường lặp lại
visible_region.rect
, trườngtop
được biểu thị bằngvisible_region.rect.top
trong cả hai thực thể.
- Tên thuộc tính ở dạng snake case, ví dụ:
Đối với các cột
value
vàprevious_value
, các giá trị boolean được biểu thị bằng0
(False
) hoặc1
(True
).
Winscope tạo các khung hiển thị này bằng cách kết hợp dữ liệu từ các bảng dành riêng cho dấu vết với bảng Perfetto args
.
Bạn có thể truy vấn trực tiếp các bảng này. Trong bảng args
, các cột key
, flat_key
và display_value
tương tự như các cột trong chế độ xem property
, flat_property
và value
tương ứng.
args
bảng:
Cột | Mô tả |
---|---|
arg_set_id |
Được dùng để liên kết một nhóm đối số |
flat_key |
Tên thuộc tính từ thông báo proto, không tính đến các trường lặp lại |
key |
Tên thuộc tính trong thông báo giao thức, tính đến các trường lặp lại |
value_type |
Loại giá trị thuộc tính |
int_value |
Giá trị thuộc tính nếu loại giá trị là số nguyên |
string_value |
Giá trị thuộc tính nếu loại giá trị là một chuỗi |
real_value |
Giá trị thuộc tính nếu loại giá trị là số thực |
display_value |
Giá trị thuộc tính được truyền đến chuỗi |
Các chế độ xem SQL của SurfaceFlinger
Dữ liệu proto SurfaceFlinger sử dụng các định dạng sau:
Dữ liệu lớp ở định dạng
LayerProto
.Dữ liệu gốc của hệ phân cấp ở định dạng
LayersSnapshotProto
.
Để tìm kiếm dữ liệu lớp, hãy sử dụng chế độ xem sf_layer_search
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
state_id |
Mã hàng của mục mà lớp thuộc về |
ts |
Dấu thời gian của mục mà lớp thuộc về |
layer_id |
Mã lớp |
parent_id |
Mã lớp của lớp mẹ |
layer_name |
Tên lớp |
property |
Tên tài sản tính đến các trường lặp lại |
flat_property |
Tên thuộc tính không tính đến các trường lặp lại |
value |
Giá trị thuộc tính ở định dạng chuỗi |
previous_value |
Giá trị thuộc tính của mục nhập trước ở định dạng chuỗi |
Để tìm kiếm dữ liệu gốc của hệ phân cấp, hãy sử dụng chế độ xem sf_hierarchy_root_search
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
state_id |
Mã hàng của mục |
ts |
Dấu thời gian của mục nhập |
property |
Tên tài sản tính đến các trường lặp lại |
flat_property |
Tên thuộc tính không tính đến các trường lặp lại |
value |
Giá trị thuộc tính ở định dạng chuỗi |
previous_value |
Giá trị thuộc tính của mục nhập trước ở định dạng chuỗi |
Cụm từ tìm kiếm mẫu
Tìm tất cả khung hình mà lớp
IME
có ranh giới hợp lệ trên màn hình:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
Tìm tất cả khung hình có lớp
Taskbar
color.a
(alpha) thay đổi:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
Tìm tất cả khung hình có giới hạn dưới
Wallpaper
nhỏ hơn hoặc bằng 2400:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
Liệt kê tất cả các thuộc tính cho màn hình có ngăn xếp lớp hợp lệ:
SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON INNER JOIN sf_hierarchy_root_search STATE ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack' AND STATE_WITH_DISPLAY_ON.value!='4294967295' AND STATE.property LIKE CONCAT( SUBSTRING( STATE_WITH_DISPLAY_ON.property, 0, instr(STATE_WITH_DISPLAY_ON.property, ']') ), '%' )
Tìm tất cả các khung hình có cử chỉ vuốt về sau
SELECT DISTINCT STATE.ts FROM sf_layer_search STATE WHERE STATE.layer_name LIKE 'EdgeBackGestureHandler%'
Bảng dữ liệu
Các khung hiển thị SurfaceFlinger được tạo bằng các bảng cơ bản sau.
surfaceflinger_layers_snapshot
:
Cột | Mô tả |
---|---|
id |
Mã hàng của mục |
ts |
Dấu thời gian của mục nhập |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với mục này |
surfaceflinger_layer
:
Cột | Mô tả |
---|---|
id |
Mã hàng của lớp |
snapshot_id |
Mã hàng của mục trong surfaceflinger_layers_snapshot mà lớp thuộc về |
arg_set_id |
Mã dùng để liên kết các hàng trong bảng args với lớp này |
Chế độ xem SQL về giao dịch
Dữ liệu proto giao dịch sử dụng định dạng TransactionTraceEntry
.
Để tìm kiếm dữ liệu dấu vết Giao dịch, hãy sử dụng chế độ xem transactions_search
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
state_id |
Mã hàng của mục mà thuộc tính giao thức thuộc về |
ts |
Dấu thời gian của mục mà thuộc tính giao thức thuộc về |
transaction_id |
Mã giao dịch (nếu có) |
property |
Tên tài sản tính đến các trường lặp lại |
flat_property |
Tên thuộc tính không tính đến các trường lặp lại |
value |
Giá trị thuộc tính ở định dạng chuỗi |
Cụm từ tìm kiếm mẫu
Tìm khung hình mà một giao dịch được áp dụng để thay đổi vị trí x của lớp thành -54.0:
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
Tìm khung hình mà bạn đã thêm lớp
ImeContainer
:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
Bảng dữ liệu
Khung hiển thị SQL về giao dịch được tạo bằng các bảng cơ bản sau.
surfaceflinger_transactions
:
Cột | Mô tả |
---|---|
id |
Mã hàng của mục |
ts |
Dấu thời gian của mục nhập |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với mục này |
vsync_id |
Mã VSync được liên kết với tất cả giao dịch trong mục này |
android_surfaceflinger_transaction
:
Cột | Mô tả |
---|---|
id |
Mã hàng của giao dịch |
snapshot_id |
Mã hàng của mục trong surfaceflinger_transactions mà giao dịch thuộc về |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với giao dịch này |
transaction_id |
Mã giao dịch lấy từ thông báo giao thức |
pid |
PID giao dịch lấy từ thông báo giao thức |
uid |
UID giao dịch lấy từ thông báo proto |
layer_id |
Mã nhận dạng của lớp được liên kết với giao dịch (nếu có) |
display_id |
Mã nhận dạng của màn hình liên kết với giao dịch (nếu có) |
flags_id |
Mã nhận dạng dùng để truy xuất các cờ liên kết từ android_surfaceflinger_transaction_flag |
transaction_type |
Loại giao dịch |
android_surfaceflinger_transaction_flag
:
Cột | Mô tả |
---|---|
flags_id |
Tương ứng với giá trị trong một hàng trong android_surfaceflinger_transaction |
flag |
Chuỗi cờ được dịch |
Các giao dịch riêng lẻ được thêm vào bảng args từ các định dạng thông báo proto khác nhau dựa trên loại giao dịch:
LAYER_ADDED
: Định dạngLayerCreationArgs
LAYER_CHANGED
: Định dạngLayerState
DISPLAY_ADDED
: Định dạngDisplayState
DISPLAY_CHANGED
: Định dạngDisplayState
LAYER_DESTROYED
: Không có đối sốLAYER_HANDLE_DESTROYED
: Không có đối sốDISPLAY_REMOVED
: Không có đối sốNOOP
: Không có đối số
Chuyển đổi chế độ xem SQL
Dữ liệu proto chuyển đổi sử dụng định dạng ShellTransition
.
Để tìm kiếm dữ liệu về Chuyển đổi, hãy sử dụng chế độ xem transitions_search
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
ts |
Thời gian gửi hàng; chuyển về thời gian gửi nếu có, nếu không thì là 0 |
transition_id |
Mã nhận dạng chuyển đổi lấy từ thông báo giao thức |
property |
Tên tài sản tính đến các trường lặp lại |
flat_property |
Tên thuộc tính không tính đến các trường lặp lại |
value |
UID giao dịch lấy từ thông báo proto |
Cụm từ tìm kiếm mẫu
Tìm các thuộc tính của hiệu ứng chuyển cảnh do DefaultMixedHandler
xử lý:
SELECT
PROPS.ts,
PROPS.transition_id,
PROPS.property,
PROPS.value
FROM transitions_search HANDLER_MATCH
INNER JOIN transitions_search PROPS
ON HANDLER_MATCH.transition_id = PROPS.transition_id
WHERE HANDLER_MATCH.property = 'handler'
AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
ORDER BY PROPS.transition_id, PROPS.property
Bảng dữ liệu
Khung hiển thị Chuyển đổi được tạo bằng các bảng cơ bản sau.
window_manager_shell_transitions
:
Cột | Mô tả |
---|---|
id |
Mã hàng cho quá trình chuyển đổi |
ts |
Thời gian gửi hàng; chuyển về thời gian gửi nếu có, nếu không thì là 0 |
transition_id |
Mã nhận dạng chuyển đổi lấy từ thông báo giao thức |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với quá trình chuyển đổi này |
transition_type |
Loại chuyển đổi lấy từ thông báo proto |
send_time_ns |
Thời gian gửi chuyển đổi lấy từ thông báo giao thức |
dispatch_time_ns |
Thời gian chuyển đổi được lấy từ thông báo giao thức |
duration_ns |
Thời lượng chuyển đổi (nếu có thời gian bắt đầu và kết thúc) |
handler |
Trình xử lý chuyển đổi: truy xuất bản dịch từ window_manager_shell_transition_handlers |
status |
Trạng thái chuyển đổi: played , merged hoặc aborted |
flags |
Cờ chuyển đổi lấy từ thông báo giao thức |
window_manager_shell_transition_handlers
:
Cột | Mô tả |
---|---|
handler_id |
Mã nhận dạng tương ứng với giá trị trong cột handler của window_manager_shell_transitions |
handler_name |
Dịch chuỗi |
android_window_manager_shell_transition_participants
:
Cột | Mô tả |
---|---|
transition_id |
Mã nhận dạng chuyển đổi lấy từ thông báo proto thô |
layer_id |
Mã nhận dạng của người tham gia lớp SurfaceFlinger |
window_id |
Mã nhận dạng của người tham gia vùng chứa WindowManager |
Khung hiển thị ViewCapture SQL
Dữ liệu proto ViewCapture sử dụng định dạng View
.
Để tìm kiếm dữ liệu ViewCapture, hãy sử dụng chế độ xem viewcapture_search
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
state_id |
Mã nhận dạng hàng của trạng thái mà khung hiển thị thuộc về |
ts |
Dấu thời gian của trạng thái mà khung hiển thị thuộc về |
package_name |
Tên gói |
window_name |
Tên cửa sổ |
class_name |
Xem tên lớp học |
property |
Tên tài sản tính đến các trường lặp lại |
flat_property |
Tên thuộc tính không tính đến các trường lặp lại |
value |
Giá trị thuộc tính ở định dạng chuỗi |
previous_value |
Giá trị thuộc tính từ trạng thái trước ở định dạng chuỗi |
Cụm từ tìm kiếm mẫu
Tìm tất cả các trạng thái khi SearchContainerView
di chuyển theo hướng y:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
Bảng dữ liệu
Khung hiển thị ViewCapture được tạo bằng các bảng cơ bản sau.
android_viewcapture
:
Cột | Mô tả |
---|---|
id |
Mã hàng của mục |
ts |
Dấu thời gian của mục nhập |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với mục này |
android_viewcapture_view
:
Cột | Mô tả |
---|---|
id |
Mã hàng cho khung hiển thị |
snapshot_id |
Mã hàng của mục trong android_viewcapture mà khung hiển thị thuộc về |
arg_set_id |
Mã nhận dạng dùng để liên kết các hàng trong bảng args với khung hiển thị này |
Bảng SQL ProtoLog
Dữ liệu proto ProtoLog sử dụng định dạng ProtoLogMessage
. Chế độ xem này bao gồm các cột sau:
Cột | Mô tả |
---|---|
ts |
Dấu thời gian của nhật ký |
level |
Cấp độ nhật ký |
tag |
Thẻ nhóm ghi nhật ký |
message |
Thông điệp nhật ký |
stacktrace |
Dấu vết ngăn xếp (nếu có) |
location |
Vị trí mã nơi thông báo bắt nguồn |
Cụm từ tìm kiếm mẫu
Tìm tất cả nhật ký có thông báo chứa
transition
:SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
Tìm tất cả nhật ký có mã giao dịch hợp lệ:
CREATE PERFETTO VIEW valid_tx_ids AS SELECT DISTINCT transaction_id FROM transactions_search WHERE transaction_id IS NOT NULL AND transaction_id != '0'; SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS INNER JOIN protolog LOGS ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
Chạy truy vấn
Bạn có thể chạy các cụm từ tìm kiếm bằng bảng TÌM KIẾM TOÀ CẦU ở bên trái trình xem Tìm kiếm.
Khi bạn tương tác lần đầu với bảng điều khiển GLOBAL SEARCH (TÌM KIẾM TOÀN CẦU), tính năng tìm kiếm dấu vết sẽ khởi động và Winscope sẽ tạo các khung hiển thị SQL trợ giúp. Quá trình này mất vài giây. Dòng thời gian sẽ không hoạt động trong khi tính năng tìm kiếm dấu vết đang khởi động.
Để bắt đầu một truy vấn, hãy viết truy vấn vào hộp tìm kiếm rồi nhấp vào Chạy truy vấn tìm kiếm hoặc nhấn phím Enter trên bàn phím để chạy truy vấn đó.
Khi hoàn tất, bảng kết quả sẽ xuất hiện trong bảng điều khiển ở giữa. Cụm từ tìm kiếm của bạn xuất hiện bên dưới hộp tìm kiếm, cùng với một trường để lưu cụm từ tìm kiếm giữa các phiên.
Bạn có thể truy cập vào các truy vấn đã lưu bằng cách nhấp vào thẻ Đã lưu trong bảng điều khiển bên trái và truy cập vào các truy vấn đã chạy gần đây bằng cách nhấp vào thẻ Gần đây:
Hình 2. Tìm kiếm trong bảng điều khiển bên trái của trình xem.
Kết quả
Tất cả các truy vấn đều trả về kết quả dạng bảng, xuất hiện trong một khung hiển thị có thể cuộn với hành vi tương tác tương tự như các trình xem dấu vết dựa trên nhật ký, chẳng hạn như Giao dịch và ProtoLog:
Hình 3. Kết quả tìm kiếm của người xem.
Nếu bảng kết quả chứa một cột ts
, các giá trị trong cột đó sẽ được diễn giải dưới dạng dấu thời gian và được thêm vào lớp phủ dòng thời gian dưới dạng một hàng mới gồm các mục. Nhấp vào hàng này rồi dùng phím mũi tên trái và phải để di chuyển giữa các mục:
Hình 4. Tìm kiếm dòng thời gian.