سرعت رندر را بررسی کنید

اندروید شامل برخی گزینه‌های توسعه‌دهنده روی دستگاه است که به شما کمک می‌کند تا تجسم کنید که برنامه شما در کجا ممکن است با مشکلاتی در رندر رابط کاربری خود مواجه شود، مانند انجام کار رندرینگ بیشتر از حد لازم، یا اجرای عملیات طولانی thread و GPU. این صفحه نحوه اشکال‌زدایی از overdraw GPU و پروفایل رندرینگ GPU را شرح می‌دهد.

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

سرعت رندر پروفایل GPU

ابزار رندرینگ پردازنده گرافیکی پروفایل (Profile GPU Rendering) به صورت یک هیستوگرام پیمایشی، مدت زمان لازم برای رندر فریم‌های یک پنجره رابط کاربری را نسبت به معیار ۱۶.۶۷ میلی‌ثانیه برای هر فریم، به صورت بصری نمایش می‌دهد.

در پردازنده‌های گرافیکی ضعیف‌تر، نرخ پر شدن (سرعتی که پردازنده گرافیکی می‌تواند بافر فریم را پر کند) می‌تواند بسیار پایین باشد. با افزایش تعداد پیکسل‌های مورد نیاز برای ترسیم یک فریم، پردازنده گرافیکی ممکن است برای پردازش دستورات جدید زمان بیشتری صرف کند و باعث شود بقیه سیستم منتظر بماند تا پردازنده گرافیکی بتواند به آن برسد.

ابزار پروفایلینگ به شما کمک می‌کند تا تشخیص دهید چه زمانی پردازنده گرافیکی (GPU) در تلاش برای ترسیم پیکسل‌ها دچار مشکل می‌شود یا چه زمانی تحت فشار بیش از حد بارگذاری (overdraw) قرار می‌گیرد.

فعال کردن پروفایلر

قبل از شروع، مطمئن شوید که از دستگاهی با اندروید ۴.۱ (سطح API ۱۶) یا بالاتر استفاده می‌کنید و گزینه‌های توسعه‌دهنده را فعال کرده‌اید . برای شروع پروفایل‌بندی رندر GPU دستگاه هنگام استفاده از برنامه، مراحل زیر را دنبال کنید:

  1. در دستگاه خود، به تنظیمات (Settings) بروید و روی گزینه‌های توسعه‌دهنده (Developer Options) ضربه بزنید.
  2. در بخش نظارت ، بسته به نسخه اندروید در حال اجرا روی دستگاه، گزینه Profile GPU Rendering یا Profile HWUI rendering را انتخاب کنید.
  3. در پنجره Profile GPU Rendering، گزینه On screen as bars را انتخاب کنید تا نمودارها روی صفحه دستگاه شما نمایش داده شوند.
  4. برنامه‌ای را که می‌خواهید نمایه‌سازی کنید، باز کنید.

خروجی را بررسی کنید

در تصویر بزرگ‌شده‌ی نمودار رندرینگ پردازنده‌ی گرافیکی پروفایل که در شکل ۱ نشان داده شده است، می‌توانید بخش رنگی را همانطور که در اندروید ۶.۰ (سطح API ۲۳) نمایش داده شده است، مشاهده کنید.

شکل ۱. نمودار رندرینگ پردازنده گرافیکی با پروفایل بزرگ‌شده.

در مورد خروجی، چند نکته قابل توجه است:

  • برای هر برنامه قابل مشاهده، این ابزار یک نمودار نمایش می‌دهد.
  • هر نوار عمودی در امتداد محور افقی، نشان دهنده یک فریم است و ارتفاع هر نوار عمودی، مدت زمانی را که فریم برای رندر شدن صرف کرده است (بر حسب میلی ثانیه) نشان می‌دهد.
  • خط سبز افقی نشان‌دهنده‌ی ۱۶.۶۷ میلی‌ثانیه است. برای دستیابی به ۶۰ فریم در ثانیه، نوار عمودی هر فریم باید زیر این خط قرار گیرد. هر زمان که نوار از این خط فراتر رود، ممکن است در انیمیشن‌ها مکث ایجاد شود.
  • این ابزار فریم‌هایی را که از آستانه ۱۶.۶۷ میلی‌ثانیه فراتر می‌روند، با پهن‌تر کردن و کاهش شفافیت نوار مربوطه، برجسته می‌کند.
  • هر نوار دارای اجزای رنگی است که به یک مرحله در خط لوله رندرینگ نگاشت می‌شوند. تعداد اجزا بسته به سطح API دستگاه متفاوت است.

جدول زیر توضیحاتی در مورد هر بخش از یک نوار عمودی در خروجی پروفایلر هنگام استفاده از دستگاهی با اندروید ۶.۰ و بالاتر ارائه می‌دهد.

جزء بار مرحله رندرینگ توضیحات
بافرهای مبادله‌ای نشان دهنده زمانی است که CPU منتظر اتمام کار GPU است. اگر این نوار بلند شود، به این معنی است که برنامه کار زیادی را روی GPU انجام می‌دهد.
مشکل فرمان نشان دهنده زمانی است که رندرکننده دوبعدی اندروید صرف صدور دستورات به OpenGL برای ترسیم و ترسیم مجدد لیست‌های نمایش می‌کند. ارتفاع این نوار مستقیماً با مجموع زمانی که طول می‌کشد تا هر لیست نمایش اجرا شود متناسب است - لیست‌های نمایش بیشتر برابر با نوار قرمز بلندتر است.
همگام‌سازی و آپلود نشان دهنده مدت زمان لازم برای آپلود اطلاعات بیت مپ به پردازنده گرافیکی (GPU) است. یک بخش بزرگ نشان می‌دهد که برنامه برای بارگذاری حجم زیادی از تصاویر گرافیکی، زمان قابل توجهی را صرف می‌کند.
قرعه کشی نشان دهنده زمان صرف شده برای ضبط دستورات ترسیم، مانند drawLine است. در Compose، این مرحله گاهی اوقات می‌تواند شامل عملیات اندازه‌گیری و طرح‌بندی باشد. اگر این نوار بلند است، یک ردیابی سیستم را ضبط کرده و با استفاده از Perfetto آن را برای تجزیه و تحلیل دقیق بررسی کنید.
اندازه‌گیری / چیدمان نشان‌دهنده‌ی میزان زمان صرف‌شده برای موقعیت‌یابی و تعیین اندازه‌ی اجزای رابط کاربری در طول مرحله‌ی طرح‌بندی است که شامل اجرای اصلاح‌کننده‌های اندازه‌گیری و جایگذاری می‌شود. یک بخش بزرگ نشان‌دهنده‌ی محاسبات پیچیده در این اصلاح‌کننده‌ها یا یک درخت طرح‌بندی بیش از حد عمیق است که نیاز به محاسبه‌ی مجدد مکرر دارد.
مدیریت ورودی و انیمیشن نشان دهنده میزان زمانی است که برای ارزیابی فراخوانی‌های API انیمیشن یا مدیریت ورودی اشاره‌گر و فراخوانی‌های آن صرف شده است. اگر این بخش بزرگ باشد، می‌تواند نشان دهد که یک انیمیشن سفارشی یا فراخوانی ورودی، زمان زیادی را صرف پردازش می‌کند. محاسبه حالت و نگاشت داده‌ها هنگام پیمایش در LazyColumn یا LazyRow نیز معمولاً در این بخش رخ می‌دهد و منبع رایج‌تری برای کاهش سرعت در این بخش است.
زمان متفرقه / تأخیر VSync نشان دهنده زمانی است که برنامه صرف اجرای عملیات بین دو فریم متوالی می‌کند. این ممکن است نشانه‌ای از پردازش بیش از حد در نخ رابط کاربری باشد که می‌تواند به نخ دیگری منتقل شود.

جدول ۱. نوارهای کامپوننت در اندروید ۶.۰ و بالاتر.

برای اطلاعات بیشتر در مورد نحوه تفسیر اطلاعات ارائه شده توسط ابزار پروفایلینگ، بخش «تحلیل با رندرینگ پردازنده گرافیکی پروفایل» را مطالعه کنید.