ردیابی انتقال پنجره با استفاده از Winscope

Winscope یک ابزار وب است که به کاربران اجازه می دهد تا وضعیت چندین سرویس سیستم را در طول و بعد از انیمیشن ها و انتقال ها ضبط، پخش و تجزیه و تحلیل کنند. Winscope تمام وضعیت های مربوط به سرویس سیستم را در یک فایل ردیابی ثبت می کند. با استفاده از رابط کاربری Winscope همراه با فایل ردیابی، می‌توانید وضعیت این سرویس‌ها را برای هر فریم انیمیشن، با یا بدون ضبط صفحه، با پخش مجدد، استپ کردن و اشکال‌زدایی از طریق انتقال بررسی کنید.

سرویس های سیستمی که ردیابی هایی را تولید می کنند که می توانند در Winscope بارگذاری شوند به شرح زیر است:

  • سرفیس فلینگر
  • WindowManager
  • WMShel
  • IME
  • پرتاب کننده

نمایشگر ردیابی Winscope را اجرا کنید

ردیابی Winscope بخشی از خدمات روی پلتفرم است. این بخش مراحل مورد نیاز برای دانلود، ساخت و اجرای نمایشگر ردیابی Winscope را تشریح می کند.

مراحل زیر را برای تنظیم رایانه شخصی خود برای اجرای ردیاب Winscope دنبال کنید:

  1. سورس اندروید را دانلود کنید .
  2. به پوشه Winscope بروید:

    cd development/tools/winscope
    
  3. وابستگی ها را با استفاده از:

    npm install
    

    برای مشاهده لیستی از دستورات موجود، اجرا کنید: npm run

  4. تمام اهداف تولید و آزمایش را با استفاده از:

    npm run build:prod
    
  5. Winscope را با استفاده از:

    npm run start
    

ردیابی را ثبت کنید

می‌توانید از طریق Winscope یا از طریق دستورات Android Debug Bridge (adb) ردیابی روی دستگاه بگیرید.

ردیابی روی دستگاه

برای جمع‌آوری داده‌ها هنگام ثبت اشکالات مربوط به مشکلات انیمیشن، ردیابی روی دستگاه بگیرید. همه ردیابی‌های رابط کاربری با این روش ثبت می‌شوند، زیرا پیکربندی را نمی‌توان سفارشی کرد.

در دستگاه اندرویدی شما:

  1. گزینه های توسعه دهنده را فعال کنید .
  2. System Tracing را در قسمت Developer Options انتخاب کنید.
  3. جمع آوری آثار Winscope را فعال کنید.
  4. تحت متفرقه :
    1. پیوست کردن ضبط‌ها به گزارش‌های اشکال را فعال کنید.
    2. نمایش کاشی تنظیمات سریع را فعال کنید.
  5. به جایی که باید اشکال را تکرار کنید بروید.
  6. برای شروع ضبط، تنظیمات سریع را باز کنید و ضبط ردیابی را انتخاب کنید:

    quick_setting_winscope

    شکل 1. منوی تنظیمات سریع با Record Trace.

  7. فقط مراحل لازم برای تولید مجدد اشکال را اجرا کنید.

  8. برای توقف ضبط، تنظیمات سریع را باز کرده و توقف ردیابی را انتخاب کنید.

  9. گزارش گرفته شده را با استفاده از یکی از گزینه های فهرست شده مانند Gmail، Drive یا BetterBug به اشتراک بگذارید.

ردیابی را از طریق Winscope ثبت کنید

می‌توانید با استفاده از Winscope برای توسعه محلی و اشکال‌زدایی، ردیابی‌ها را ثبت کنید. Winscope از adb استفاده می کند که از اتصال دستگاه از طریق USB یا Wi-Fi پشتیبانی می کند.

در وینسکوپ:

  1. در صفحه Collect Traces ، روی ADB Proxy کلیک کنید:

    capture_traces_winscope

    شکل 2. ردیابی در Winscope.

  2. پراکسی Winscope ADB Connect را راه اندازی کنید تا ردیابی ها را مستقیماً از مرورگر خود ثبت کنید.

  3. دستور را اجرا کنید:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. برای شروع ضبط، در صفحه جمع آوری ردیابی، اهداف و پیکربندی را انتخاب کنید و روی Start trace کلیک کنید:

    collect_traces_winscope

    شکل 3. ردیابی ها را روی Winscope جمع آوری کنید.

  5. برای توقف ضبط، روی پایان ردیابی کلیک کنید:

    end_trace_winscope

    شکل 4. پایان ردیابی در وینسکوپ.

همانطور که ابزار ردیابی ها را در رابط کاربری Winscope آپلود می کند، پیام های Fetching and Parsing Proto Files روی صفحه ظاهر می شوند.

با استفاده از Winscope، State Dump را ایجاد کنید

برای گرفتن حالت dump با استفاده از Winscope، در صفحه Collect Traces زبانه Dump را انتخاب کنید و سپس روی Dump state کلیک کنید:

dump-winscope

شکل 5. حالت تخلیه در Winscope.

ردیابی از طریق دستورات adb

قبل از اجرای دستورات adb shell برای هر یک از ردیابی های زیر adb root اجرا کنید. در پایان ردیابی، فایل های ردیابی در /data/misc/wmtrace موجود هستند. برای کپی کردن یک فایل یا دایرکتوری و زیرشاخه‌های آن از یک دستگاه، به کپی فایل‌ها به و از دستگاه مراجعه کنید. برای اطلاعات بیشتر به adb مراجعه کنید.

ردیابی های WindowManager

برای گرفتن ردپای WindowManager:

  • فعال کردن ردیابی:

    adb shell wm tracing start
    
  • غیرفعال کردن ردیابی:

    adb shell wm tracing stop
    
  • هنگام اجرای ردیابی، داده‌های گزارش را در فایل ذخیره کنید:

    adb shell wm tracing save-for-bugreport
    
  • ردیابی گزارش یک بار در هر فریم:

    adb shell wm tracing frame
    
  • ثبت هر تراکنش:

    adb shell wm tracing transaction
    
  • حداکثر اندازه گزارش را تنظیم کنید (در کیلوبایت):

    adb shell wm tracing size
    
  • وضعیت ردیابی چاپ:

    adb shell wm tracing status
    
  • سطح گزارش را روی critical (فقط پنجره های قابل مشاهده با اطلاعات کاهش یافته)، trim (همه پنجره های با اطلاعات کاهش یافته) یا all (همه پنجره ها و اطلاعات) تنظیم کنید:

    adb shell wm tracing level
    

ProtoLog

دستورات زیر برای سیستم ProtoLog استفاده می شود.

در فرآیند system_server :

  • شروع ProtoLog:

    adb shell cmd window logging start
    
  • توقف ProtoLog:

    adb shell cmd window logging stop
    
  • فعال کردن ProtoLog برای گروه های گزارش داده شده:

    adb shell cmd window logging enable [group...]
    
  • غیرفعال کردن ProtoLog برای گروه های گزارش داده شده:

    adb shell cmd window logging disable [group...]
    
  • Logcat logging را برای گروه های گزارش داده شده فعال کنید:

    adb shell cmd window logging enable-text [group...]
    
  • غیرفعال کردن Logcat logging برای گروه های گزارش داده شده:

    adb shell cmd window logging disable-text [group...]
    

در WMSell:

  • شروع ProtoLog:

    adb shell dumpsys activity service SystemUIService WMShell
    

ردیابی انتقال

برای ردیابی انتقال از دستورات زیر استفاده می شود:

در فرآیند system_server :

  • شروع یک ردیابی:

    adb shell cmd window shell tracing start
    
  • توقف یک ردیابی:

    adb shell cmd window shell tracing stop
    
  • شروع یک ردیابی در WMSell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • توقف ردیابی در WMSell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

ویرایشگر روش ورودی

دستورات زیر برای ردیابی Input Method Editor (IME) استفاده می شود:

  • ردیابی IME را برای مشتریان روش ورودی (IM)، سرویس روش ورودی (IMS) و سرویس مدیریت روش ورودی (IMMS) شروع کنید:

    adb shell ime tracing start
    
  • ردیابی مشتریان IME، IMS و IMMS را شروع کنید:

    adb shell ime tracing stop
    

لایه های SurfaceFlinger

ردیابی لایه SurfaceFlinger از Trace Perfetto برای ضبط استفاده می کند. برای اطلاعات پیکربندی به پیکربندی Trace مراجعه کنید.

مثال زیر از یک پیکربندی برای ردیابی لایه SurfaceFlinger را ببینید:

unique_session_name: "surfaceflinger_layers_active"
buffers: {
    size_kb: 63488
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.layers"
        surfaceflinger_layers_config: {
            mode: MODE_ACTIVE
            trace_flags: TRACE_FLAG_INPUT
            trace_flags: TRACE_FLAG_COMPOSITION
            trace_flags: TRACE_FLAG_HWC
            trace_flags: TRACE_FLAG_BUFFERS
            trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
        }
    }
}

دستور مثال زیر را برای ایجاد ردیابی برای لایه‌های SurfaceFlinger ببینید:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

تراکنش های SurfaceFlinger

ردیابی تراکنش SurfaceFlinger از Trace Perfetto برای ضبط استفاده می کند. برای اطلاعات پیکربندی به پیکربندی Trace مراجعه کنید.

مثال زیر از پیکربندی Perfetto برای ردیابی فعال SurfaceFlinger را ببینید:

unique_session_name: "surfaceflinger_transactions_active"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_ACTIVE
        }
    }
}
write_into_file: true
file_write_period_ms: 100

مثال زیر از پیکربندی Perfetto برای ردیابی پیوسته SurfaceFlinger را ببینید:

unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_CONTINUOUS
        }
    }
}

دستور مثال زیر را برای ایجاد ردیابی برای تراکنش های SurfaceFlinger ببینید:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

ایجاد حالت dump با استفاده از adb

Winscope یک عکس فوری از وضعیت های WindowManager و SurfaceFlinger را از گزارش های باگ می خواند. گزارش‌های اشکال، حالت‌ها را به‌عنوان فایل‌های پروتو جداگانه در پوشه proto ذخیره می‌کنند. برای ایجاد حالت dump با استفاده از adb، دستورات زیر را اجرا کنید.

برای WindowManager:

adb exec-out dumpsys window --proto > window_dump.winscope

برای SurfaceFlinger:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

ردیابی را تجزیه و تحلیل کنید

برای رفع اشکال حالت‌های گذرا و نامعتبر که باعث مشکلات انیمیشن می‌شوند، Winscope فایل‌های ردیابی مختلف را جمع‌آوری می‌کند، جستجو و تجسم را روی فریم‌ها و جدول‌های زمانی ارائه می‌دهد، و پیام‌های پروتوباف را به شیوه‌ای منسجم ارائه می‌کند. تجزیه و تحلیل ردیابی ها در Winscope به شناسایی دقیق لایه، فریم و وضعیت وقوع باگ کمک می کند.

از Winscope استفاده کنید

هنگامی که ردیابی را ثبت کردید، ردیابی ها را در Winscope تجزیه و تحلیل کنید:

  1. ردیابی های ذخیره شده خود را با استفاده از پانل سمت راست آپلود کنید. می‌توانید ردپای آپلود شده را حذف کنید یا ردپای بیشتری را آپلود کنید.

    upload_traces_winscope

    شکل 6. ردیابی را در Winscope بارگذاری کنید.

  2. برای تجسم ردیابی های آپلود شده روی View Traces کلیک کنید. برگه های هر ردیابی در پانل بالای پنجره ظاهر می شود. اگر فایل آپلود شده حاوی ردپای مربوطه باشد، یک نمای شناور از ردیاب ضبط شده روی صفحه نمایش پوشیده می شود.

    view_traces_winscope

    شکل 7. آثار را در Winscope مشاهده کنید.

    برای تغییر نام از رابط کاربری در بالاترین پانل پنجره استفاده کنیدویرایش نام و ردیابی آپلود شده خود را دانلود کنیددانلود_ردیابی یا برای آپلود یک مورد جدید.

  3. با استفاده از ابزار لغزنده زمان در پانل پایین پنجره، در ردیابی ها در طول زمان حرکت کنید. برای پیمایش زمان اضافی، از ویژگی های زیر استفاده کنید، همانطور که در شکل 8 نشان داده شده است:

    • برای پیمایش به یک زمان یا رویداد خاص، از مکان نما (لغزنده زمان) یا سمت چپ استفاده کنیدarrow_left_time و راستarrow_right_time فلش ها در کادر نمایش زمان (گوشه سمت چپ پایین)، یا فلش های چپ و راست روی صفحه کلید شما.
    • برای نمایش ردپای رنگی انتخاب شده در خط زمانی، از منوی کشویی (سمت چپ نوار لغزنده زمان) استفاده کنید. به طور پیش فرض، سه رد آخر مشاهده شده با استفاده از برگه های ردیابی در جدول زمانی نمایش داده می شوند.
    • برای مشاهده ریز همه ردیابی های آپلود شده، از بزرگنمایی استفاده کنیدzoom_in_time یا بزرگنمایی کنیدzoom_out_time ابزار (زیر نوار لغزنده زمان)، یا روی صفحه کلید خود اسکرول کنید. از دکمه تنظیم مجدد برای تنظیم مجدد سطح بزرگنمایی استفاده کنید.
    • برای مشاهده گسترده توزیع ردیابی در طول زمان، روی فلش بالا کلیک کنیدarrow_up_time (گوشه سمت راست پایین).

    time_nav_winscope

    شکل 8. پیمایش زمان در Winscope.

    در نمای گسترش یافته (شکل 9)، برای بازرسی بهتر، بازه های زمانی خاص را انتخاب کرده و بزرگنمایی کنید:

    expand_time_winscope

    شکل 9. جدول زمانی گسترده در Winscope.

  4. برای بررسی آثار، می توانید وضعیت دستگاه را با ضبط صفحه نمایش مشاهده کنید. برای بررسی یک ردیابی خاص، روی برگه ردیابی مربوطه در پانل بالای ابزار کلیک کنید.

    • برای ردیابی Surface Flinger ، سه پنل نماهای متفاوتی از ردیابی را در یک دوره زمانی معین نشان می‌دهند، همانطور که در شکل 10 نشان داده شده است:sf_trace

      شکل 10. ردیابی سطحی فلینگر در وینسکوپ.

      • نمای لایه ها : نمای سه بعدی از لایه ها در پوشش های مستطیلی. عناصر رابط کاربری زیر مستطیل ها را طوری تنظیم می کنند که عناصر گرافیکی را از نظر موقعیت، اندازه، تبدیل و ترتیب z نمایش دهند:

        • نوار لغزنده Rotation (بالا سمت چپ نمای لایه ها) مستطیل های لایه ای را می چرخاند تا آنها را در زوایای انتخاب شده مشاهده کنید.
        • نوار لغزنده Spacing (بالا سمت راست نمای لایه ها) فاصله بین لایه ها را برای ایجاد نمای ترکیبی انتخابی تنظیم می کند.
        • ابزارهای بزرگنمایی (بالا سمت راست نمای لایه ها) بزرگنمایی می کنندzoom_in_time و بزرگنمایی کنیدzoom_out_time برای بازرسی بهتر وارد لایه ها شوید.
        • دکمه ریستreset_sf (بالا سمت راست نمای لایه ها) تنظیمات دوربین را به نمای اصلی باز می گرداند.
        • مستطیل ها را بکشید تا بزرگنمایی بهتر انجام شود.
      • نمای سلسله مراتبی : سلسله مراتب کامل لایه ها.

        • فقط قابل مشاهده است (بالا سمت راست نمای سلسله مراتب)، هنگامی که انتخاب می شود، لایه های نامرئی را از سلسله مراتب پنهان می کند تا به تجسم عناصر روی صفحه کمک کند.
        • Flat (بالا سمت راست نمای سلسله مراتبی)، هنگامی که انتخاب می شود، سلسله مراتب را به عنوان یک لیست مسطح از لایه ها نشان می دهد.
        • نمایش تفاوت (بالا سمت چپ نمای سلسله مراتبی) فقط زمانی انتخاب می شود که یک انتقال حالت وجود داشته باشد. وقتی انتخاب شد، ابزار وضعیت فعلی را با حالت قبلی مقایسه می کند. یک عنصر جدید با رنگ سبز، یک عنصر حذف شده با رنگ قرمز و یک عنصر اصلاح شده با رنگ آبی مشخص می شود.
      • نمای خصوصیات : ویژگی های لایه انتخاب شده. پانل بالای نمای Properties حاوی اطلاعاتی در مورد ویژگی‌های کلیدی، مانند Visibility ، Geometry و Buffer است. پانل پایینی نمای Properties حاوی یک Proto Dump از تمام ویژگی ها است.

        • چک باکس Show Diff (بالا سمت چپ نمای Properties) مانند نمای سلسله مراتبی عمل می کند.
        • نمایش پیش‌فرض‌ها (بالا سمت چپ نمای Properties)، وقتی انتخاب شد، مقادیر پروتو پیش‌فرض را در Proto Dump نمایش می‌دهد. به طور پیش فرض، این مقادیر در Proto Dump فهرست نشده اند. مقادیر پروتو پیش فرض از تعریف فیلد proto گرفته شده است. اگر یک فیلد پروتو دارای مقدار پیش‌فرض غیر تهی نباشد، مقادیر پروتو پیش‌فرض نشان داده شده عبارتند از:
          • رشته ها: پوچ
          • اعداد: 0
          • مقادیر بولی: نادرست
          • اشیاء: پوچ

      انتخاب بین سه نما و ضبط صفحه همگام می‌شود، یعنی وقتی به نقطه‌ای از زمان حرکت می‌کنید، همه ردیابی‌ها به طور همزمان به‌روزرسانی می‌شوند. برای دیدن خصوصیات یک لایه، لایه را با کلیک بر روی آن در نمای سلسله مراتبی یا با کلیک بر روی مستطیل مربوطه در نمای Properties انتخاب کنید. یک مستطیل بنفش نشان می دهد که یک رد دید به این لایه چسبیده است. با دوبار کلیک کردن روی یک لایه بنفش، رابط کاربری برای تغییر به برگه ردیابی مشاهده مربوطه حرکت می کند.

    • همانطور که در شکل 11 نشان داده شده است، برای ردیابی Window Manager ، سه پنل نماهای متفاوتی از ردیابی را در یک بازه زمانی معین نشان می دهند:

      • نمای ویندوز : نمای سه بعدی از لایه ها.
      • نمای سلسله مراتبی : سلسله مراتب کامل لایه ها.
      • نمای Properties شامل یک Proto Dump از همه خواص است.

      انتخاب بین سه نما و ضبط صفحه همگام می‌شود، یعنی وقتی به نقطه‌ای از زمان حرکت می‌کنید، همه ردیابی‌ها به طور همزمان به‌روزرسانی می‌شوند.

      wm_trace

      شکل 11. ردیابی Window Manager در Winscope.

    • برای ردیابی تراکنش‌ها ، تراکنش‌های بین Surface Flinger و Window Manager در قالب جدولی ارائه می‌شوند که با شناسه‌ها، نوع و متن نمایش‌داده‌شده قابل جستجو است، همراه با نمای ویژگی‌هایی که پروتو dump را نشان می‌دهد. انتخاب بین دو نما و ضبط صفحه همگام می شود:

      transaction_trace

      شکل 12. ردیابی تراکنش ها در Winscope.

    • برای ردیابی های ProtoLog ، اطلاعات در قالب جدول ارائه می شود که با برچسب ها، فایل های منبع و متن قابل جستجو است:

      protolog_trace

      شکل 13. ردیابی ProtoLog در Winscope.

    • برای Traces Transitions ، فهرستی از انتقال ها با شناسه، نوع، زمان ارسال، مدت زمان و وضعیت همراه با ویژگی های انتقال انتخاب شده نمایش داده می شود:

      transitions_trace

      شکل 14. ردیابی انتقال در Winscope.