Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Використання профайлера ObjectDB

Починаючи з Godot 4.6, у нижній панелі налагоджувача з'явилася нова вкладка ObjectDB Profiler. Цей профайлер дозволяє робити знімки поточного стану ObjectDB, тобто бази даних, що містить усі класи, похідні від class_object, що наразі розміщені в пам'яті. Це корисно для виявлення витоків пам'яті та розуміння використання пам'яті вашим проектом.

Крім того, цей інструмент здатний візуалізувати відмінності між двома знімками. Це можна використовувати для виявлення покращень або регресій у використанні пам'яті після внесення змін до вашого проєкту. Зменшення використання пам'яті може призвести до кращої продуктивності, навіть у випадках, коли пам'ять не є вузьким місцем. Зменшуючи використання пам'яті, ви можете виконувати менше розподілів, що може бути дорогою операцією, особливо якщо їх виконувати у великих обсягах під час гри.

Дивись також

Див. Коли і як уникати використання вузлів для всього для отримання інформації про використання легших альтернатив вузлам, які можуть допомогти зменшити використання пам'яті у вашому проєкті.

Попередження

Профайлер ObjectDB не відстежує кожен біт пам'яті, що використовується рушієм або зовнішніми бібліотеками. Класи рідного рушія, які не доступні API сценаріїв, не відображатимуться у знімках.

Якщо вам потрібен доступ до цієї інформації, розгляньте можливість використання зовнішніх інструментів профілювання пам'яті.

Використання

Відкрийте вкладку ObjectDB Profiler у нижній панелі Debugger. Ви потрапите на сторінку зведення, де ще не зроблено жодних знімків.

Зведення профайлера ObjectDB без зроблених знімків

Зведення профайлера ObjectDB без зроблених знімків

Запустіть проєкт, а потім дійдіть до точки, де ви хочете зробити знімок (наприклад, після завантаження рівня). Натисніть Take ObjectDB Snapshot, щоб зробити знімок у поточний момент часу. Якщо кнопка неактивна, переконайтеся, що проєкт запущено.

Зведення профайлера ObjectDB з одним зробленим знімком

Зведення профайлера ObjectDB з одним зробленим знімком

Ви можете зробити кілька знімків під час одного запуску проєкту. Також ви можете клацнути правою кнопкою миші на знімку у списку знімків, щоб перейменувати його, відобразити в менеджері файлів або видалити.

Порада

Гарною ідеєю є перейменувати знімки після їх створення, щоб дати їм описові назви (наприклад, before_optimization, after_optimization). Незалежно від назви, дата створення знімка залишається збереженою у самому файлі знімків.

Файли знімків мають розширення .odb_snapshot та знаходяться в user://objectdb_snapshots/ (див. деталі Шляхи до даних). Їх можна безпечно копіювати на різні пристрої, оскільки вони не залежать від платформи.

Перегляд відмінностей між знімками

Після створення щонайменше двох знімків стає доступним випадаюче меню Diff Against. Тут ви можете вибрати інший знімок для порівняння поточного вибраного знімка.

Випадаюче меню «Різниця проти» у лівому нижньому куті профайлера ObjectDB

Випадаюче меню «Різниця проти» у лівому нижньому куті профайлера ObjectDB

На сторінці зведення буде показано відмінності між двома знімками:

Два знімки, що порівнюються на вкладці «Підсумок»

Два знімки, що порівнюються на вкладці «Підсумок»

Це також стосується кожної іншої вкладки в профайлері ObjectDB, яка відображатиме відмінності між двома знімками в додаткових стовпцях.

Класи

На вкладці «Класи» ви можете переглянути, скільки екземплярів кожного класу було створено на момент створення знімка:

Один знімок, що переглядається на вкладці «Заняття»

Один знімок, що переглядається на вкладці «Заняття»

У режимі порівняння буде показано кількість екземплярів класу для поточного вибраного знімка (стовпець A) та знімка, з яким виконується порівняння (стовпець B). Також буде показано різницю в кількості екземплярів у стовпці «Дельта».

Два знімки, що порівнюються на вкладці «Класи». Тут стовпець A – це ``second_session``, стовпець B – ``first_session``

Два знімки, що порівнюються на вкладці «Класи». Тут стовпець A – це second_session, стовпець B – first_session

Ви можете клацнути на класі у списку праворуч, щоб переглянути його в інспекторі.

Вибраний екземпляр класу переглядається в інспекторі

Вибраний екземпляр класу переглядається в інспекторі

Порада

Попередній перегляд екземплярів в інспекторі також доступний на інших вкладках (Вузли, Об'єкти та Підраховані посилання).

Об'єкти

Вкладка «Об’єкти» схожа, але відрізняється способом представлення даних. Тут кожен екземпляр перелічено лінійно, а не груповано за класом. Вибравши об’єкт, ви побачите список інших об’єктів, на які він посилається, праворуч (Outbound References), а також список об’єктів, на які на нього посилаються (Inbound References).

Це дозволяє переглядати об'єкти або "зверху вниз" (перегляд об'єктів, на які посилається певний об'єкт), або "знизу вгору" (перегляд об'єктів, на які посилається певний об'єкт).

Вкладка «Об’єкти» використовується для перегляду об’єктів «зверху вниз»

Вкладка «Об’єкти» використовується для перегляду об’єктів «зверху вниз»

На зображенні вище, клацання об'єкта default_font у списку переключить вигляд на перспективу цього об'єкта. На цей об'єкт також посилається багато інших об'єктів, що фактично перемикає на перспективу "знизу вгору".

Вкладка «Об’єкти» використовується для перегляду об’єктів «знизу вгору»

Вкладка «Об’єкти» використовується для перегляду об’єктів «знизу вгору»

Вузли

Далі, на вкладці «Вузли» відображається дерево сцени на момент створення знімка.

Вкладка «Вузли» використовується для перегляду дерева сцени

Вкладка «Вузли» використовується для перегляду дерева сцени

Ця вкладка особливо цікава у режимі перегляду різниці, оскільки вона дозволяє візуально відображати різницю між двома знімками. Якщо Combined Diff не позначено, ви можете бачити відмінності поруч.

Окремий перегляд різниці на вкладці Вузли

Окремий перегляд різниці на вкладці Вузли

Коли позначено Combined Diff, ви можете побачити відмінності, об'єднані в одне дерево, з доданими вузлами, виділеними зеленим кольором, а видаленими вузлами, виділеними червоним.

Комбінований перегляд різниці на вкладці Вузли

Комбінований перегляд різниці на вкладці Вузли

Крім того, ви можете переглянути список вузлів-сиріт (вузлів, які не приєднані до кореня дерева сцени) в кінці деревоподібного подання. Ви можете переглянути його легше, згорнувши кореневий вузол, оскільки вони перелічені поза головним деревом сцени.

Сиротські вузли в кінці дерева вузлів у профайлері ObjectDB

Сиротські вузли в кінці дерева вузлів у профайлері ObjectDB

RefCounted

Остання вкладка — це вкладка «Підрахунок посилань». Ця вкладка схожа на вкладку «Об'єкти», але вона відображає кількість посилань на класи, похідні від class_refcounted, безпосередньо в таблиці. Таблиця має чотири стовпці:

  • Власні посилання: Кількість посилань на об'єкт у власному движку.

  • Посилання на ObjectDB: Кількість посилань на об'єкт у ObjectDB.

  • Загальна кількість посилань: Сума власних посилань та посилань ObjectDB.

  • Цикли ObjectDB: Кількість виявлених циклічних посилань.

У режимі перегляду різниці знімок B завжди відображається вище за знімок A, якщо екземпляр RefCounted існує в обох знімках.

У списку праворуч відображається детальна інформація про вибраний екземпляр, зокрема список посилань та інформацію про те, чи є вони дублікатами.

Вкладка RefCounted використовується для перегляду екземплярів RefCounted

Вкладка RefCounted використовується для перегляду екземплярів RefCounted

Примітка

Вкладка RefCounted не відображає об'єкти, що походять безпосередньо від class_object, оскільки вони не використовують підрахунок посилань.