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

ردگیری‌ها اغلب بهترین منبع اطلاعاتی هنگام بررسی اولیه مشکل عملکرد هستند. این گزارش‌ها به شما امکان می‌دهند فرضیه‌ای درباره مشکل و اینکه از کجا باید جستجو را شروع کنید شکل دهید.

دو سطح ردیابی در Android پشتیبانی می‌شود: ردیابی سیستم و ردیابی روش.

ازآنجایی‌که ردیابی سیستم فقط مناطقی را ردیابی می‌کند که به‌طور خاص برای ردیابی علامت‌گذاری شده‌اند، سربار کمی دارد و تأثیر زیادی بر عملکرد برنامه‌تان نمی‌گذارد. ردیابی سیستم برای دیدن اینکه بخش‌های خاصی از کد شما چقدر طول می‌کشد تا اجرا شود عالی است.

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

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

ردیابی ترکیب‌بندی توابع ترکیب‌پذیر را در ردیابی‌های سیستم نشان می‌دهد. این ویژگی مزیت ردیابی سیستم را با سطح جزئیات ردیابی روش‌ها در ترکیب‌بندی به شما ارائه می‌دهد.

راه‌اندازی ردیابی ترکیب‌بندی

برای امتحان کردن ردیابی بازترکیب در پروژه‌تان، باید حداقل به نسخه‌های زیر به‌روزرسانی کنید:

  • استودیو Android فلامینگو
  • Compose UI: 1.3.0
  • Compose Compiler: 1.3.0

دستگاه یا شبیه‌سازی که ردیابی را در آن اجرا می‌کنید باید حداقل سطح API‏ ۳۰ داشته باشد.

علاوه‌براین، باید وابستگی جدیدی به Compose Runtime Tracing اضافه کنید:

implementation("androidx.compose.runtime:runtime-tracing:1.12.1")

اگر از Compose BOM استفاده می‌کنید، لازم نیست نسخه را مشخص کنید:

val composeBom = platform("androidx.compose:compose-bom:2026.09.00")
implementation(composeBom)
// ...

// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")

با این وابستگی، وقتی ردیابی سیستمی را که شامل بازترکیب است انجام می‌دهید، می‌توانید توابع ترکیب‌پذیر را به‌طور خودکار ببینید.

ردیابی سیستم

برای ردیابی سیستم و دیدن ردیابی بازترکیب جدید در عمل، این مراحل را دنبال کنید:

  1. نمایه‌ساز را باز کنید:

    استودیو Android - شروع نمایه‌سازی
    شکل ۲. استودیو Android - شروع نمایه‌سازی
  2. روی خط زمان CPU کلیک کنید

    نمایه‌ساز «استودیو Android» - خط زمان واحد پردازش مرکزی
    شکل ۳. نمایه‌ساز «استودیو Android» - خط زمان CPU
  3. برنامه‌تان را به واسط کاربری‌ای که می‌خواهید ردیابی کنید هدایت کنید و سپس ردیابی سیستم و ضبط را انتخاب کنید

    گزینه‌های ردیابی - ردیابی سیستم
    شکل ۴. گزینه‌های ردیابی - ردیابی سیستم
  4. از برنامه‌تان برای ایجاد بازترکیب و توقف ضبط استفاده کنید. وقتی ردیابی پردازش شد و ظاهر شد، اکنون باید بتوانید composableها را در ردیابی بازترکیب ببینید. می‌توانید از صفحه‌کلید و موشواره برای بزرگ‌نمایی و جابه‌جایی در ردگیری استفاده کنید؛ اگر با پیمایش ردگیری آشنا نیستید، به سند ضبط ردگیری مراجعه کنید.

    نمونه‌ای از دیداری‌سازی ردیابی سیستم در «استودیو Android».
    شکل ۵. ردیابی سیستم

    با دوکلیک کردن روی یک composable در نمودار، به کد منبع آن می‌روید.

  5. همچنین می‌توانید composable را در «نمودار شعله‌ای» به‌همراه فایل و شماره خط ببینید:

    نمونه‌ای از نمودار شعله‌ای که توابع ترکیب‌پذیر را نمایش می‌دهد.
    شکل ۶. نمودار شعله‌ای

هشدارها

هنگام استفاده از ردیابی ترکیب‌بندی، هشدارهای زیر را درباره اندازه APK و عملکرد درنظر بگیرید.

سربار اندازه APK

اگرچه هدف ما این بود که سربار این ویژگی را تا حد امکان به حداقل برسانیم، اما اندازه APK برای برنامه‌های Compose به‌دلیل رشته‌های ردیابی جاسازی‌شده در APK توسط کامپایلر Compose افزایش می‌یابد. اگر برنامه‌تان از Compose زیاد استفاده نمی‌کند، این افزایش اندازه می‌تواند نسبتاً کوچک باشد، اما برای برنامه‌هایی که کاملاً از Compose استفاده می‌کنند، این افزایش اندازه بیشتر خواهد بود. این رشته‌های ردیابی علاوه‌براین مبهم‌سازی نشده‌اند تا بتوانند در ابزارهای ردیابی نشان داده شوند، همان‌طور که قبلاً نشان داده شد. کامپایلر Compose آن‌ها را از نسخه ۱.۳.۰ به بعد در همه برنامه‌ها تزریق می‌کند.

رشته‌های ردیابی را می‌توان با افزودن قانون Proguard زیر در ساخت تولید حذف کرد:

-assumenosideeffects public class androidx.compose.runtime.ComposerKt {

   boolean isTraceInProgress();

   void traceEventStart(int,int,int,java.lang.String);

   void traceEventStart(int,java.lang.String);

   void traceEventEnd();

}

این توابع ممکن است در آینده تغییر کنند، اما هرگونه تغییر در یادداشت‌های انتشار Compose ذکر خواهد شد.

توجه داشته باشید که نگه داشتن توابع، درحالی‌که مقداری هزینه اندازه APK را به‌همراه دارد، تضمین می‌کند که APK نمایه‌شده همان APK است که کاربران برنامه اجرا می‌کنند.

زمان‌بندی دقیق بود

برای نمایه‌سازی دقیق، مانند هر آزمایش عملکردی، باید برنامه را طبق برنامه‌های نمایه‌سازی profileable و non-debuggable کنید.

ضبط کردن ردیابی از پایانه

می‌توان رد ترکیب‌بندی را از پایانه ضبط کرد. برای انجام این کار، باید مراحلی را که Android Studio معمولاً به‌طور خودکار برای شما انجام می‌دهد، خودتان انجام دهید.

افزودن وابستگی‌ها

ابتدا وابستگی‌های اضافی را به برنامه‌تان اضافه کنید.

implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")

تولید فرمان ضبط

  1. فرمان ضبط را بااستفاده از Perfetto تولید کنید.
  2. بخش منبع داده track_event را به‌صورت دستی طبق نمونه زیر اضافه کنید:

    adb shell perfetto \
      -c - --txt \
      -o /data/misc/perfetto-traces/trace \
    <<EOF
    buffers: {
        size_kb: 63488
        fill_policy: RING_BUFFER
    }
    buffers: {
        size_kb: 2048
        fill_policy: RING_BUFFER
    }
    data_sources: {
        config {
            name: "track_event"
        }
    }
    duration_ms: 10000
    flush_period_ms: 30000
    incremental_state_config {
        clear_period_ms: 5000
    }
    EOF

ضبط ردیابی

  1. برنامه را راه‌اندازی کنید و بخشی را که می‌خواهید ردیابی کنید آماده کنید.
  2. ردیابی را با صدور یک همه‌فرستی در برنامه فعال کنید.

    # set app package variable, e.g. com.google.samples.apps.nowinandroid.debug
    # can be found through `adb shell ps -ef` or `adb shell cmd package list packages`
    package=<your app process>
    
    # issue a broadcast to enable tracing
    adb shell am broadcast \
    -a androidx.tracing.perfetto.action.ENABLE_TRACING \
    $package/androidx.tracing.perfetto.TracingReceiver
    
  3. فرمان شروع ضبط را که قبلاً ایجاد کرده‌اید بگویید.

باز کردن ردگیری

  1. adb pull <location> ردیابی از دستگاه (مکان مشخص‌شده در فرمان ضبط).

  2. در Perfetto باز کنید.

ردگیری با Jetpack Macrobenchmark

می‌توانید عملکرد را با Jetpack Macrobenchmark بسنجید، که ردگیری‌ها را به‌عنوان نتایج ارائه می‌دهد. برای فعال کردن ردیابی ترکیب‌بندی با macrobenchmarks، باید:

  1. این وابستگی‌های اضافی را به واحد آزمایشی Macrobenchmark اضافه کنید:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. قبل‌از اجرای محک‌ها، آرگومان ابزارسازی androidx.benchmark.fullTracing.enable=true را اضافه کنید. برای اطلاعات بیشتر درباره آرگومان‌های ابزار Macrobenchmark، آرگومان‌های ابزار Macrobenchmark را بررسی کنید.

بازخورد

دوست داریم بازخوردتان را درباره این ویژگی، اشکالاتی که در آن پیدا می‌کنید، و درخواست‌هایتان بشنویم. می‌توانید بااستفاده از ردیاب مشکل برای ما بازخورد ارسال کنید.