Используйте SQL для поиска определенных состояний в трассировках Winscope Perfetto. Используйте средство просмотра глобального поиска в пользовательском интерфейсе Winscope для выполнения запросов и визуализации результатов в виде таблиц:
Рисунок 1. Вкладка просмотра поиска.
Средство просмотра поиска позволяет писать и выполнять пользовательские SQL-запросы к трассировкам Perfetto, а также получать доступ к недавним и сохраненным запросам. Winscope предоставляет специализированные представления SQL для облегчения поиска трассировок SurfaceFlinger и транзакций.
Используйте следующие соглашения для всех представлений:
Для столбцов
property
иflat_property
:- Имена свойств записываются в змеином регистре,
visible_region
изLayerProto
. Для представления вложенных свойств используется точечная нотация,
visible_region.rect
.Повторяющиеся поля в
property
выделяются квадратными скобками:Например, в двух экземплярах повторяющегося поля
visible_region.rect
top
поле представленоvisible_region.rect[0].top
иvisible_region.rect[1].top
.Повторяющиеся поля в
flat_property
неразличимы:Например, в двух экземплярах повторяющегося поля
visible_region.rect
top
поле представленоvisible_region.rect.top
в обоих экземплярах.
- Имена свойств записываются в змеином регистре,
Для столбцов
value
иprevious_value
:- Логические значения представлены как
'0'
(False
) или'1'
(True
).
- Логические значения представлены как
Представления SQL SurfaceFlinger
Прото-данные SurfaceFlinger используют следующие форматы:
Данные слоя находятся в формате
LayerProto
.Корневые данные иерархии имеют формат
LayersSnapshotProto
.
Для поиска данных слоя используйте представление sf_layer_search
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
state_id | Уникальный идентификатор записи, которой принадлежит слой |
ts | Временная метка записи, которой принадлежит слой |
layer_id | Идентификатор слоя |
parent_id | Идентификатор родительского слоя |
layer_name | Имя слоя |
property | Учет имени свойства для повторяющихся полей |
flat_property | Имя свойства не учитывает повторяющиеся поля |
value | Значение свойства в строковом формате |
previous_value | Значение свойства из предыдущей записи в строковом формате |
Для поиска корневых данных иерархии используйте представление sf_hierarchy_root_search
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
state_id | Уникальный идентификатор записи |
ts | Временная метка записи |
property | Учет имени свойства для повторяющихся полей |
flat_property | Имя свойства не учитывает повторяющиеся поля |
value | Значение свойства в строковом формате |
previous_value | Значение свойства из предыдущей записи в строковом формате |
Примеры запросов
Найдите все кадры, в которых слой
IME
имеет допустимые границы экрана:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
Найдите все кадры, в которых изменяется
color.a
слояTaskbar
(альфа):SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
Найдите все кадры, в которых нижняя граница
Wallpaper
меньше или равна 2400:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
Перечислите все свойства дисплеев с допустимым стеком слоев:
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, ']') ), '%' )
Представление транзакций SQL
Протоданные транзакций используют формат TransactionTraceEntry
.
Для поиска данных о транзакциях используйте представление transactions_search
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
state_id | Уникальный идентификатор записи, которой принадлежит свойство proto. |
ts | Временная метка записи, которой принадлежит свойство proto |
transaction_id | Идентификатор транзакции, если доступен |
property | Учет имени свойства для повторяющихся полей |
flat_property | Имя свойства не учитывает повторяющиеся поля |
value | Значение свойства в строковом формате |
Примеры запросов
Найдите кадр, в котором была применена транзакция для изменения позиции слоя x на -54,0:
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
Найдите кадр, в который был добавлен слой
ImeContainer
:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
Представление SQL переходов
Протоданные переходов используют формат ShellTransition
.
Для поиска данных о переходах используйте представление transitions_search
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
ts | Время отправки — возвращается ко времени отправки, если доступно, иначе 0 |
transition_id | Идентификатор перехода |
property | Учет имени свойства для повторяющихся полей |
flat_property | Имя свойства не учитывает повторяющиеся поля |
value | Значение свойства в строковом формате |
Примеры запросов
Найдите свойства переходов, обрабатываемых DefaultMixedHandler
:
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
Представление ViewCapture SQL
Протоданные ViewCapture используют формат View
.
Для поиска данных ViewCapture используйте представление viewcapture_search
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
state_id | Уникальный идентификатор состояния, к которому принадлежит представление. |
ts | Временная метка состояния, к которому принадлежит представление |
package_name | Имя пакета |
window_name | Имя окна |
class_name | Посмотреть название класса |
property | Учет имени свойства для повторяющихся полей |
flat_property | Имя свойства не учитывает повторяющиеся поля |
value | Значение свойства в строковом формате |
previous_value | Значение свойства из предыдущего состояния в строковом формате |
Примеры запросов
Найдите все состояния, когда SearchContainerView
перемещался в направлении y:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
SQL-таблица ProtoLog
Протоданные ProtoLog используют формат ProtoLogMessage
. Это представление включает в себя следующие столбцы:
Столбец | Описание |
---|---|
ts | Временная метка журнала |
level | Уровень журнала |
tag | Тег группы журналирования |
message | Записать сообщение |
stacktrace | Трассировка стека (если имеется) |
location | Местоположение кода, откуда исходит сообщение |
Примеры запросов
Найдите все журналы с сообщением, содержащим
transition
:SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
Найдите все журналы, содержащие действительные идентификаторы транзакций:
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, '%');
Запуск запросов
При использовании левой панели запускается поиск трассировки. Это занимает несколько секунд. Пока он начинается, временная шкала недоступна.
После инициализации поиска трассировки введите запрос в поле поиска и нажмите «Выполнить поисковый запрос» или нажмите Enter на клавиатуре, чтобы запустить его.
По завершении на средней панели отобразится таблица результатов. Ваш запрос появится под полем поиска с полем для сохранения запроса между сеансами.
Вы можете получить доступ к сохраненным запросам, щелкнув вкладку «Сохраненные » на левой панели, а также получить доступ к недавно выполненным запросам, щелкнув вкладку «Последние» .
Рисунок 2. Левая панель средства поиска.
Результаты
Все запросы возвращают результаты в виде таблицы, отображаемые в прокручиваемом представлении с интерактивным поведением, аналогичным средствам просмотра трассировки на основе журналов, таким как Transactions и ProtoLog:
Рисунок 3. Результаты просмотра поиска.
Если результирующая таблица содержит столбец ts
, значения в этом столбце интерпретируются как метки времени и добавляются на наложение временной шкалы как новая строка записей. Щелкните эту строку и используйте клавиши со стрелками влево и вправо для перемещения между записями:
Рисунок 4. Временная шкала поиска.