هنگامی که برای اولین بار به یک مشکل عملکرد نگاه می کنید، ردیابی ها اغلب بهترین منبع اطلاعات هستند. آنها به شما این امکان را می دهند که فرضیه ای در مورد اینکه موضوع چیست و از کجا شروع کنید، تشکیل دهید.
دو سطح از ردیابی در اندروید پشتیبانی می شود: ردیابی سیستم و ردیابی روش.
از آنجایی که ردیابی سیستم فقط مناطقی را که به طور خاص برای ردیابی مشخص شده اند ردیابی می کند، سربار کمی دارد و بر عملکرد برنامه شما تأثیر زیادی نمی گذارد. ردیابی سیستم برای مشاهده اینکه بخش های خاصی از کد شما چقدر طول می کشد تا اجرا شوند عالی است.
ردیابی روش هر فراخوانی عملکرد را در برنامه شما ردیابی می کند. این بسیار گران است و بنابراین عملکرد برنامه شما را بسیار تحت تأثیر قرار می دهد، اما تصویری کلی از آنچه اتفاق می افتد، عملکردهایی که فراخوانی می شوند و هر چند وقت یکبار فراخوانی می شوند به شما ارائه می دهد.
به طور پیشفرض، ردیابیهای سیستم شامل توابع منفرد قابل ترکیب نمیشوند . آنها در ردیابی روش موجود هستند.
ما در حال حاضر در حال آزمایش عملکرد جدید ردیابی سیستم برای نشان دادن توابع قابل ترکیب در داخل ردیابی های سیستم هستیم. این به شما نفوذ کم از ردیابی سیستم را می دهد، با روش ردیابی سطوح جزئیات در ترکیب.
برای ردیابی ترکیب تنظیم کنید
برای آزمایش ردیابی ترکیب مجدد در پروژه خود، باید حداقل به نسخه های زیر به روز رسانی کنید:
- Android Studio Flamingo
- نوشتن رابط کاربری: 1.3.0
- Compose Compiler: 1.3.0
دستگاه یا شبیهسازی که ردیابی خود را روی آن اجرا میکنید نیز باید در حداقل سطح API 30 باشد.
علاوه بر این، باید یک وابستگی جدید به Compose Runtime Tracing اضافه کنید:
implementation("androidx.compose.runtime:runtime-tracing:1.7.5")
اگر از Compose BOM استفاده می کنید، لازم نیست نسخه را مشخص کنید:
val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
با این وابستگی، هنگامی که یک ردیابی سیستم را که شامل ترکیب مجدد است می گیرید، می توانید توابع قابل ترکیب را به طور خودکار مشاهده کنید.
یک ردیابی سیستمی بگیرید
برای گرفتن ردیابی سیستم و مشاهده ردیابی ترکیب مجدد جدید در عمل، این مراحل را دنبال کنید:
نمایه ساز را باز کنید:
روی جدول زمانی CPU کلیک کنید
برنامه خود را به رابط کاربری که می خواهید ردیابی کنید بروید و سپس System Trace and Record را انتخاب کنید
از برنامه خود برای ایجاد ترکیب مجدد و توقف ضبط استفاده کنید. هنگامی که ردیابی پردازش شد و ظاهر شد، اکنون باید بتوانید ترکیبات قابل ترکیب را در ردیابی مجدد مشاهده کنید. می توانید از صفحه کلید و ماوس برای بزرگنمایی و حرکت در اطراف ردیابی استفاده کنید. اگر با پیمایش یک ردیابی آشنا نیستید، به مستندات ثبت ردیابی ها مراجعه کنید.
با دوبار کلیک کردن بر روی یک Composable در نمودار شما را به کد منبع آن می برد.
همچنین میتوانید ترکیبپذیرها را به همراه فایل و شماره خط در نمودار شعله مشاهده کنید:
هشدارها
سربار اندازه APK
در حالی که هدف ما این بود که تا حد امکان هزینه های اضافی این ویژگی را به حداقل برسانیم، افزایش اندازه APK برای برنامه های Compose ناشی از ردیابی رشته های تعبیه شده در APK توسط کامپایلر Compose است. اگر برنامه شما از Compose زیاد یا بزرگتر برای برنامه های Compose کامل استفاده نمی کند، این افزایش اندازه می تواند نسبتاً کوچک باشد. این رشتههای ردیابی بهعلاوه بدون ابهام هستند، بنابراین میتوانند در ابزارهای ردیابی ظاهر شوند، همانطور که قبلا نشان داده شد. کامپایلر Compose آنها را به همه برنامه ها تزریق می کند، از نسخه 1.3.0 شروع می شود.
رشته های ردیابی را می توان در ساخت تولید شما با افزودن قانون پیشگیر زیر حذف کرد:
-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 نمایهشده همان فایلی است که کاربران برنامه اجرا میکنند.
زمان بندی دقیق
برای نمایهسازی دقیق، مانند هر آزمایش عملکردی، باید برنامه را طبق برنامههای Profileable profileable
و non-debuggable
کنید.
از ترمینال ردی بگیرید
گرفتن رد ترکیب از ترمینال امکان پذیر است. برای این کار باید مراحلی را که اندروید استودیو به طور معمول برای شما انجام می دهد به صورت خودکار انجام دهید.
وابستگی ها را اضافه کنید
ابتدا وابستگی های اضافی را به برنامه خود اضافه کنید.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
یک دستور رکورد ایجاد کنید
- با استفاده از Perfetto یک دستور رکورد ایجاد کنید.
به صورت دستی بخش منبع داده
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
ردیابی را ثبت کنید
- برنامه را راه اندازی کنید و بخشی را که می خواهید ردیابی کنید آماده کنید.
با صدور پخش، ردیابی را در برنامه فعال کنید.
# 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
دستور ضبط خود را که قبلا ایجاد کرده اید شروع کنید.
ردیابی را باز کنید
adb pull <location>
(مکان مشخص شده در دستور رکورد).در Perfetto باز کنید.
با Jetpack Macrobenchmark ردی ثبت کنید
میتوانید عملکرد را با Jetpack Macrobenchmark اندازهگیری کنید، که ردیابیهایی را به عنوان نتایج ارائه میکند. برای فعال کردن ردیابی ترکیب با ماکرو بنچمارک ها، باید:
این وابستگی های اضافی را به ماژول تست Macrobenchmark اضافه کنید:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
androidx.benchmark.fullTracing.enable=true
را قبل از اجرای معیارها اضافه کنید. برای اطلاعات بیشتر در مورد آرگومان های ابزار دقیق Macrobenchmark، آرگومان های ابزار دقیق Macrobenchmark را بررسی کنید.
بازخورد
ما دوست داریم نظرات شما را در مورد این ویژگی، اشکالاتی که در آن پیدا می کنید و درخواست هایی که دارید بشنویم. می توانید بازخورد خود را از طریق ردیاب مشکل برای ما ارسال کنید.