دیباگ پویانمایی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
یکی از دشوارترین مشکلات برای توسعه دهندگان اپلیکیشن، اطمینان از انیمیشن روان، بدون اشکال و بدون جک است. این به ویژه هنگامی که سیستم در حال انجام وظایف پسزمینه با منابع فشرده است سخت است. هیچ راه آسانی برای تعیین اینکه آیا برخی از جابجایی ها توسط برنامه یا سیستم شما ایجاد شده است وجود ندارد. با این حال، یک ابزار نمایه ساز وجود دارد که می تواند به شما در شناسایی منبع احتمالی رفتار بد کمک کند.
رندر در ChromeOS
یک برنامه با تنظیم دقیق، مانند یک بازی، معمولاً از بافر مضاعف استفاده می کند تا زمان پاسخگویی کاربر را تا حد امکان پایین نگه دارد. با این حال، چیزهای زیادی وجود دارد که می تواند عملکرد را کاهش دهد. به عنوان مثال، اگر رندر یک فریم بیش از حد طول بکشد، نتیجه رندر شده برای تعویض بافر بعدی آماده نیست و در نتیجه فریم قبلی تکرار می شود.
سپس، رندر نمی تواند رندر فریم بعدی را شروع کند و مشکلات بیشتری را ایجاد می کند. این سناریو برای توسعه دهندگان موبایل اندرویدی آشناست. هنگامی که یک برنامه در ChromeOS اجرا می شود، زمینه حتی پیچیده تر می شود.
برنامهای که روی دسکتاپ اجرا میشود مستقیماً به قاب نمایشگر نمایش داده نمیشود. در عوض داده های خود را به یک بافت تبدیل می کند. معمولا چندین برنامه وجود دارد که هر کدام گرافیک خود را به یک بافت تبدیل می کنند. این سیستم نمای روی صفحه را با استفاده از یک کامپوزیتور می سازد تا تمام بافت ها را در یک تصویر دسکتاپ واحد ترکیب کند.
آهنگساز به صورت شفاف در پس زمینه کار می کند. با این حال، یک تاخیر زمانی یک فریم برای به حداکثر رساندن استفاده از خط لوله GPU معرفی می کند. در دنیای ایده آل ممکن است این کار ضروری نباشد، اما نوسانات عملکرد سیستم را هموار می کند و به تعادل بار نامتقارن کمک می کند.
هنگامی که سیستم عامل بسیار سخت کار می کند، GPU ممکن است فشرده شود. ممکن است از زمان نمایش فریم تا نمایش آن بر روی صفحه تاخیر وجود داشته باشد. بسته به سخت افزار، سیستم ممکن است از بافر چهارگانه برای جبران استفاده کند. حتی با وجود بافر عمیق تر، خط لوله گرافیکی همچنان ممکن است دچار مشکل شود.
ردیاب گرافیکی ARC
ChromeOS یک ابزار نمایهسازی دارد که نشان میدهد چگونه بافرها در سیستم نفوذ میکنند، زمان تعویض حافظه، چقدر CPU/GPU مشغول است و برنامه شما در یک زمان معین چه کاری انجام میدهد، که در تصویر زیر نشان داده شده است:

پروفایلر را تنظیم کنید
برای استفاده از پروفایلر، باید M75 یا بالاتر را اجرا کنید. برای بهترین نتیجه، از دستگاه اینتل استفاده کنید.
قبل از استفاده از پروفایلر، برنامه خود را با ردیابی بکار ببرید. Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
به کد خود در هر کجا که می خواهید یک ردیابی اضافه کنید. از Event
استفاده کنید که با پیشوند customTrace
شروع می شود. پیشوند در پیام ردیابی ظاهر نمی شود.
برای راه اندازی پروفایلر، مراحل زیر را دنبال کنید:
- حالت توسعه دهنده را روشن کنید.
- تنظیمات Chrome را روشن کنید و ابزار تجسم بافرهای گرافیکی ARC را فعال کنید.
- به
chrome://arc-graphics-tracing
بروید.
پروفایلر را اجرا کنید
- stop on jank را انتخاب کنید.
- برنامه اندروید را اجرا کنید.
- وقتی برنامه اندروید فعال است و فوکوس دارد، Control + Shift + G را فشار دهید.
وقتی مقداری jank اتفاق می افتد، یک پنجره مرورگر ظاهر می شود. از کلیدهای W و S برای بزرگنمایی و کوچک کردن جدول زمانی استفاده کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Debug animation jank\n\nOne of the most difficult problems for app developers is\nensuring smooth, glitchless, and jank-free animation. This is especially hard to\ndebug when the system is also performing resource-intensive background\ntasks. There is no easy way to determine whether some jank is caused by your app or\nthe system. However, there is a profiler tool that can help you identify the\npossible source of the bad behavior.\n\nRender on ChromeOS\n------------------\n\nA fine-tuned app, like a game, usually uses double buffering to keep the user\nresponse time as low as possible. Still, there are many things that can degrade\nperformance. For example, if rendering a frame takes too long, the rendered\nresult is not ready for the next buffer swap, and consequently the previous\nframe repeats.\n\nThen, the renderer can't start rendering the next frame,\ncausing even more problems. This scenario is familiar to Android mobile\ndevelopers; when an app runs on ChromeOS, the context is even more complicated.\n\nAn app running on the desktop doesn't render directly to the screen's display\nframe. It renders its data into a texture instead. There are usually multiple\napps, each rendering its graphics into a texture. The system constructs the view\non the screen using a compositor to combine all the textures into a single\ndesktop image.\n\nThe compositor works transparently in the background. However, it introduces a\none-frame time delay to maximize the use of the GPU pipeline. In an ideal\nworld this might not be necessary, but it smooths system performance\nfluctuations and helps balance an asymmetrical load.\n\nWhen the OS is working very hard, the GPU might get squeezed. There can be a\ndelay from the time a frame renders to when it appears on the\nscreen. Depending on the hardware, the system might use quadruple buffering to\ncompensate. Even with deeper buffering, the graphic pipeline can still glitch.\n\nThe ARC graphics tracer\n-----------------------\n\nChromeOS has a profiling tool that shows how the buffers are percolating\nthrough the system, when memory swaps occur, how busy the CPU/GPU is, and what\nyour application is doing at a given time, shown in the following image:\n\n### Set up the profiler\n\nTo use the profiler, you must run M75 or later.\nFor best results, use an Intel device.\n\nBefore using the profiler, seed your app with traces.\nAdd `Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, \"Event\", \u003cnumber\u003e);` to your code\nwherever you'd like to include a trace. Use an `Event` that begins with\nthe prefix `customTrace`. The prefix doesn't appear in the trace message.\n\nTo set up the profiler, follow these steps:\n\n1. Turn on developer mode.\n2. Turn on Chrome settings and enable the **ARC graphic buffers visualization tool**.\n3. Navigate to `chrome://arc-graphics-tracing`.\n\n### Run the profiler\n\n1. Select **stop on jank**.\n2. Run the Android app.\n3. When the Android app is active and has focus, press \u003ckbd\u003eControl\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eG\u003c/kbd\u003e.\n\nWhen some jank happens, a browser window pops up.\nUse the \u003ckbd\u003eW\u003c/kbd\u003e and \u003ckbd\u003eS\u003c/kbd\u003e keys to zoom and shrink the timeline."]]