استخدِم SQL للعثور على حالات معيّنة في عمليات تتبُّع Winscope Perfetto. استخدِم أداة عرض البحث العامة في واجهة مستخدم Winscope لتنفيذ طلبات البحث وعرض النتائج في جداول:
الشكل 1. علامة التبويب "البحث في العارض"
يتيح لك عارض البحث كتابة طلبات بحث SQL مخصّصة وتنفيذها على عمليات تتبُّع Perfetto، بالإضافة إلى الوصول إلى طلبات البحث الأخيرة والمحفوظة. توفّر أداة Winscope طرق عرض SQL متخصّصة للمساعدة في البحث عن عمليات تتبُّع SurfaceFlinger والمعاملات وعمليات الانتقال وViewCapture.
استخدِم الاصطلاحات التالية لجميع طرق العرض:
بالنسبة إلى العمودَين
property
وflat_property
:- تكون أسماء السمات بتنسيق snake case، مثل
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 case، مثل
بالنسبة إلى العمودَين
value
وprevious_value
، يتم تمثيل القيم المنطقية بالرمز0
(False
) أو1
(True
).
ينشئ Winscope هذه العروض من خلال ربط البيانات من الجداول الخاصة بالتتبُّع بجدول Perfettoargs
.
يمكنك الاستعلام عن هذه الجداول مباشرةً. في جدول args
، يتشابه العمود key
والعمود flat_key
والعمود display_value
مع أعمدة العرض property
وflat_property
وvalue
على التوالي.
جدول args
:
العمود | الوصف |
---|---|
arg_set_id |
تُستخدَم لربط مجموعة من الوسيطات |
flat_key |
اسم السمة من رسالة النموذج الأوّلي، بدون احتساب الحقول المتكرّرة |
key |
اسم الموقع من رسالة proto، مع مراعاة الحقول المتكرّرة |
value_type |
نوع قيمة الموقع |
int_value |
قيمة السمة إذا كان نوع القيمة عددًا صحيحًا |
string_value |
قيمة السمة إذا كان نوع القيمة سلسلة |
real_value |
قيمة السمة إذا كان نوع القيمة حقيقيًا |
display_value |
تحويل قيمة السمة إلى سلسلة |
طرق عرض 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'
ابحث عن جميع اللقطات التي تتغيّر فيها
Taskbar
الطبقةcolor.a
(قناة ألفا):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, ']') ), '%' )
العثور على جميع اللقطات التي تظهر فيها إيماءة التمرير السريع للرجوع
SELECT DISTINCT STATE.ts FROM sf_layer_search STATE WHERE STATE.layer_name LIKE 'EdgeBackGestureHandler%'
جداول البيانات
يتم إنشاء طرق عرض SurfaceFlinger باستخدام الجداول الأساسية التالية.
surfaceflinger_layers_snapshot
:
العمود | الوصف |
---|---|
id |
معرّف الصف للإدخال |
ts |
الطابع الزمني للإدخال |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من الجدول args بهذا الإدخال |
surfaceflinger_layer
:
العمود | الوصف |
---|---|
id |
معرّف الصف للطبقة |
snapshot_id |
معرّف الصف للإدخال من surfaceflinger_layers_snapshot الذي تنتمي إليه الطبقة |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من الجدول args بهذه الطبقة |
طريقة عرض SQL للمعاملات
تستخدم بيانات بروتوكول المعاملات التنسيق
TransactionTraceEntry
.
للبحث في بيانات تتبُّع المعاملات، استخدِم طريقة العرض transactions_search
. يتضمّن هذا العرض الأعمدة التالية:
العمود | الوصف |
---|---|
state_id |
معرّف الصف للإدخال الذي تنتمي إليه السمة الأولية |
ts |
الطابع الزمني للإدخال الذي تنتمي إليه السمة الأولية |
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 للمعاملات باستخدام الجداول الأساسية التالية.
surfaceflinger_transactions
:
العمود | الوصف |
---|---|
id |
معرّف الصف للإدخال |
ts |
الطابع الزمني للإدخال |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من الجدول args بهذا الإدخال |
vsync_id |
معرّف VSync المرتبط بجميع المعاملات في هذا الإدخال |
android_surfaceflinger_transaction
:
العمود | الوصف |
---|---|
id |
معرّف الصف للمعاملة |
snapshot_id |
معرّف الصف للإدخال من surfaceflinger_transactions الذي تنتمي إليه المعاملة |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من جدول args بهذه المعاملة |
transaction_id |
معرّف المعاملة مأخوذ من رسالة النموذج الأوّلي |
pid |
معرّف المنتج الدائم للمعاملة مأخوذ من رسالة النموذج الأولي |
uid |
معرّف UID للمعاملة مأخوذ من رسالة النموذج الأوّلي |
layer_id |
معرّف الطبقة المرتبطة بالمعاملة، إذا كان ذلك منطبقًا |
display_id |
معرّف الشاشة المرتبط بالمعاملة، إذا كان ذلك منطبقًا |
flags_id |
المعرّف المستخدَم لاسترداد العلامات المرتبطة من android_surfaceflinger_transaction_flag |
transaction_type |
نوع المعاملة |
android_surfaceflinger_transaction_flag
:
العمود | الوصف |
---|---|
flags_id |
تتوافق مع القيمة في أحد الصفوف في android_surfaceflinger_transaction |
flag |
سلسلة العلامات المترجَمة |
تتم إضافة المعاملات الفردية إلى جدول args من تنسيقات مختلفة لرسائل proto استنادًا إلى نوع المعاملة:
-
LAYER_ADDED
:LayerCreationArgs
التنسيق -
LAYER_CHANGED
:LayerState
التنسيق -
DISPLAY_ADDED
:DisplayState
التنسيق -
DISPLAY_CHANGED
:DisplayState
التنسيق LAYER_DESTROYED
: ما مِن وسيطاتLAYER_HANDLE_DESTROYED
: ما مِن وسيطاتDISPLAY_REMOVED
: ما مِن وسيطاتNOOP
: ما مِن وسيطات
طريقة عرض SQL لعناصر الانتقال
تستخدم بيانات بروتوكول الانتقالات التنسيق
ShellTransition
.
للبحث في بيانات "عمليات الانتقال"، استخدِم العرض transitions_search
. يتضمّن هذا العرض الأعمدة التالية:
العمود | الوصف |
---|---|
ts |
وقت الإرسال، أو وقت الإرسال إذا كان متاحًا، وإلا 0 |
transition_id |
رقم تعريف الانتقال مأخوذ من رسالة النموذج الأوّلي |
property |
اسم السمة التي تتضمّن حقولاً متكرّرة |
flat_property |
اسم الموقع لا يراعي الحقول المتكرّرة |
value |
معرّف UID للمعاملة مأخوذ من رسالة النموذج الأوّلي |
نماذج طلبات بحث
ابحث عن خصائص عمليات الانتقال التي يتم التعامل معها من خلال 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
جداول البيانات
يتم إنشاء طريقة العرض "عمليات الانتقال" باستخدام الجداول الأساسية التالية.
window_manager_shell_transitions
:
العمود | الوصف |
---|---|
id |
معرّف الصف لعملية النقل |
ts |
وقت الإرسال، أو وقت الإرسال إذا كان متاحًا، وإلا 0 |
transition_id |
رقم تعريف الانتقال مأخوذ من رسالة النموذج الأوّلي |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من جدول args بهذا الانتقال |
transition_type |
نوع الانتقال مأخوذ من رسالة النموذج الأوّلي |
send_time_ns |
وقت إرسال الانتقال مأخوذ من رسالة النموذج الأوّلي |
dispatch_time_ns |
وقت إرسال الانتقال مأخوذ من رسالة النموذج الأوّلي |
duration_ns |
مدة الانتقال، إذا كان وقت البدء ووقت الانتهاء متاحَين |
handler |
معالج الانتقال: استرداد الترجمة من window_manager_shell_transition_handlers |
status |
حالة الانتقال: played أو merged أو aborted |
flags |
علامات الانتقال مأخوذة من رسالة النموذج الأوّلي |
window_manager_shell_transition_handlers
:
العمود | الوصف |
---|---|
handler_id |
المعرّف الذي يتوافق مع القيمة في العمود handler من window_manager_shell_transitions |
handler_name |
ترجمة السلاسل |
android_window_manager_shell_transition_participants
:
العمود | الوصف |
---|---|
transition_id |
معرّف الانتقال مأخوذ من رسالة النموذج الأوّلي الأولية |
layer_id |
معرّف المشارك في طبقة SurfaceFlinger |
window_id |
معرّف المشارك في حاوية WindowManager |
طريقة عرض 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
جداول البيانات
يتم إنشاء طريقة العرض ViewCapture باستخدام الجداول الأساسية التالية.
android_viewcapture
:
العمود | الوصف |
---|---|
id |
معرّف الصف للإدخال |
ts |
الطابع الزمني للإدخال |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من الجدول args بهذا الإدخال |
android_viewcapture_view
:
العمود | الوصف |
---|---|
id |
معرّف الصف للعرض |
snapshot_id |
رقم تعريف الصف للإدخال من android_viewcapture الذي ينتمي إليه العرض |
arg_set_id |
المعرّف المستخدَم لربط الصفوف من جدول args بهذا العرض |
جدول 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, '%');
تنفيذ طلبات البحث
يمكنك تنفيذ طلبات بحث باستخدام لوحة البحث العام على يمين عارض البحث.
عندما تتفاعل لأول مرة مع لوحة البحث العام، يتم بدء البحث بالتتبُّع، وينشئ Winscope طرق عرض SQL المساعدة. يستغرق هذا الإجراء بضع ثوانٍ. أثناء تهيئة عملية البحث عن الأخطاء، لا يتوفّر المخطط الزمني.
لبدء طلب بحث، اكتب طلب بحث في مربّع البحث وانقر على تنفيذ طلب البحث أو اضغط على Enter في لوحة المفاتيح لتنفيذه.
عند الانتهاء، يظهر جدول النتائج في اللوحة الوسطى. يظهر طلب البحث أسفل مربّع البحث، مع حقل لحفظ طلب البحث بين الجلسات.
يمكنك الوصول إلى طلبات البحث المحفوظة من خلال النقر على علامة التبويب محفوظة في اللوحة اليمنى، ويمكنك الوصول إلى طلبات البحث التي تم تنفيذها مؤخرًا من خلال النقر على علامة التبويب الأخيرة:
الشكل 2. اللوحة اليمنى في عارض البحث
النتائج
تعرض جميع طلبات البحث نتائج مجدولة، وتظهر في عرض قابل للتمرير مع سلوك تفاعلي مشابه لعارضات التتبّع المستندة إلى السجلّ، مثل "المعاملات" وProtoLog:
الشكل 3. نتائج "عارض البحث"
إذا كان الجدول الناتج يحتوي على عمود ts
، سيتم تفسير القيم في هذا العمود على أنّها طوابع زمنية وإضافتها إلى التراكب على المخطط الزمني كصف جديد من الإدخالات. انقر على هذا الصف واستخدِم مفتاحَي السهمين المتّجهَين لليمين ولليسار للتنقّل بين الإدخالات:
الشكل 4 مخطط البحث الزمني