ردیابی ترکیب

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

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

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

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

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

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

تنظیمات ردیابی ترکیب

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

  • اندروید استودیو فلامینگو
  • رابط کاربری آهنگسازی: ۱.۳.۰
  • کامپایلر Compose: ۱.۳.۰

دستگاه یا شبیه‌سازی که ردیابی خود را روی آن اجرا می‌کنید نیز باید حداقل سطح API 30 داشته باشد.

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

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

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

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

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

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

ردیابی سیستم را انجام دهید

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

  1. پروفایلر را باز کنید:

    اندروید استودیو - شروع پروفایلینگ
    شکل 2. اندروید استودیو - شروع پروفایلینگ
  2. روی جدول زمانی CPU کلیک کنید

    پروفایلر اندروید استودیو - جدول زمانی پردازنده
    شکل 3. پروفایلر اندروید استودیو - جدول زمانی CPU
  3. برنامه خود را به رابط کاربری که می‌خواهید ردیابی کنید، هدایت کنید و سپس System Trace and Record را انتخاب کنید.

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

    ردیابی سیستم
    شکل ۵. ردیابی سیستم

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

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

    نمودار شعله
    شکل 6. نمودار شعله

هشدارها

سربار حجم 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 applications profileable و non-debuggable کنید.

ضبط ردیابی از ترمینال

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

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

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

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. با انتشار یک broadcast، ردیابی را در برنامه فعال کنید.

    # 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. در پرفتو باز است.

ثبت ردپا با 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 instrumentation را اضافه کنید. برای اطلاعات بیشتر در مورد آرگومان‌های ابزار دقیق Macrobenchmark، آرگومان‌های ابزار دقیق Macrobenchmark را بررسی کنید.

بازخورد

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