جستجوی ردیابی

از SQL برای یافتن حالت های خاص در ردیابی های Winscope Perfetto استفاده کنید. از نمایشگر جستجوی جهانی در رابط کاربری Winscope برای اجرای پرس و جوها و تجسم نتایج جدول بندی شده استفاده کنید:

search viewer tab

شکل 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 در هر دو نمونه نشان داده می شود.

  • برای ستون های 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 را روی صفحه کلید خود فشار دهید تا آن را اجرا کنید.

پس از اتمام، جدول نتایج در پانل میانی نشان داده می شود. درخواست شما در زیر کادر جستجو ظاهر می شود، با فیلدی برای ذخیره پرس و جو بین جلسات.

می‌توانید با کلیک کردن روی برگه ذخیره‌شده در پانل سمت چپ به درخواست‌های ذخیره‌شده دسترسی داشته باشید و با کلیک کردن روی برگه اخیر به سؤالات اخیراً اجرا شده دسترسی پیدا کنید:

search viewer left panel

شکل 2. صفحه سمت چپ نمایشگر را جستجو کنید.

نتایج

همه جستارها نتایج جدول‌بندی شده را برمی‌گردانند که در یک نمای پیمایشی با رفتار تعاملی شبیه به نمایشگرهای ردیابی مبتنی بر گزارش، مانند Transactions و ProtoLog نشان داده شده‌اند:

search viewer results

شکل 3. جستجوی نتایج بیننده.

اگر جدول به دست آمده حاوی یک ستون ts باشد، مقادیر آن ستون به عنوان مهر زمانی تفسیر شده و به عنوان یک ردیف جدید از ورودی ها به همپوشانی خط زمانی اضافه می شود. روی این ردیف کلیک کنید و از کلیدهای جهت دار چپ و راست برای پیمایش بین ورودی ها استفاده کنید:

search timeline

شکل 4. جدول زمانی جستجو.