از SQL برای یافتن حالت های خاص در ردیابی های Winscope Perfetto استفاده کنید. از نمایشگر جستجوی جهانی در رابط کاربری Winscope برای اجرای پرس و جوها و تجسم نتایج جدول بندی شده استفاده کنید:
شکل 1. جستجوی تب نمایشگر.
نمایشگر جستجو به شما امکان می دهد پرس و جوهای SQL سفارشی را روی ردیابی Perfetto بنویسید و اجرا کنید و به جستارهای اخیر و ذخیره شده دسترسی داشته باشید. Winscope برای کمک به جستجوی SurfaceFlinger و Transactions نماهای تخصصی SQL را ارائه می دهد.
از قراردادهای زیر برای همه نماها استفاده کنید:
برای ستون های
property
وflat_property
:- نام ویژگی ها در حروف snake هستند، به عنوان مثال
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
در هر دو نمونه نشان داده می شود.
- نام ویژگی ها در حروف snake هستند، به عنوان مثال
برای ستون های
value
وprevious_value
:- مقادیر بولی با
'0'
(False
) یا'1'
(True
) نشان داده می شود.
- مقادیر بولی با
نماهای SurfaceFlinger SQL
دادههای اولیه 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'
همه فریم هایی را پیدا کنید که در آن لایه
Taskbar
color.a
(alpha) تغییر می کند: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
نمای SQL ViewCapture
داده پروتو 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
جدول ProtoLog SQL
داده های اولیه ProtoLog از فرمت ProtoLogMessage
استفاده می کند. این نما شامل این ستون ها می شود:
ستون | توضیحات |
---|---|
ts | مهر زمانی گزارش |
level | سطح گزارش |
tag | ثبت تگ گروه |
message | پیام ورود |
stacktrace | 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, '%');
کوئری ها را اجرا کنید
هنگامی که از پانل سمت چپ استفاده می کنید، جستجوی ردیابی شروع می شود. این چند ثانیه طول می کشد. زمانی که شروع می شود، خط زمانی در دسترس نیست.
پس از شروع جستجوی ردیابی، یک پرس و جو در کادر جستجو بنویسید و روی Run Search Query کلیک کنید یا Enter را روی صفحه کلید خود فشار دهید تا آن را اجرا کنید.
پس از اتمام، جدول نتایج در پانل میانی نشان داده می شود. درخواست شما در زیر کادر جستجو ظاهر می شود، با فیلدی برای ذخیره پرس و جو بین جلسات.
میتوانید با کلیک کردن روی برگه ذخیرهشده در پانل سمت چپ به درخواستهای ذخیرهشده دسترسی داشته باشید و با کلیک کردن روی برگه اخیر به سؤالات اخیراً اجرا شده دسترسی پیدا کنید:
شکل 2. صفحه سمت چپ نمایشگر را جستجو کنید.
نتایج
همه جستارها نتایج جدولبندی شده را برمیگردانند که در یک نمای پیمایشی با رفتار تعاملی شبیه به نمایشگرهای ردیابی مبتنی بر گزارش، مانند Transactions و ProtoLog نشان داده شدهاند:
شکل 3. جستجوی نتایج بیننده.
اگر جدول به دست آمده حاوی یک ستون ts
باشد، مقادیر آن ستون به عنوان مهر زمانی تفسیر شده و به عنوان یک ردیف جدید از ورودی ها به همپوشانی خط زمانی اضافه می شود. روی این ردیف کلیک کنید و از کلیدهای جهت دار چپ و راست برای پیمایش بین ورودی ها استفاده کنید:
شکل 4. جدول زمانی جستجو.