*Компанія Qt вже давно використовує такі тести, як QMLBench, які допомагають нам дізнатися, коли зміна викликає зниження продуктивності, але також важливо бачити, як Qt працює на вищому рівні, дозволяючи компонентам взаємодіяти таким чином, чого детальні тести, такі як QMLBench не можуть нам показати це. У цій статті ми розглянемо результати тестування запуску нової програми з більш реальної програми для тестування QML.
Контроль
Для цих тестів було розроблено відносно простий додаток QML, який використовує безліч об'єктів QtDeclarative та QtGraphicalEffects. Код програми був написаний, тому що його написав звичайний розробник без оптимізації запуску, споживання пам'яті або продуктивності. Оскільки ми проводимо порівняльний аналіз, то програма не використовує інтерактивні елементи або введення користувача. Додаток має низьку складність, без логіки, тому результати якомога більш узгоджені між запусками тесту. Хоча жоден еталонний тест не зможе дійсно імітувати реальну продуктивність при взаємодії з користувачем, а тест, що обговорюється, спрямований на більш точне представлення реального робочого навантаження QML, ніж QMLBench або приклад «Galery» QtQuickControls.
Тестовий додаток. Воно поєднує текстури, анімацію, форми QML, повторювачі, складний текст, ефекти частинок і шейдери GL для імітації важчого, реальнішого застосування, ніж інші тести QML, такі як QMLBench.
Завантажити вихідний код можна за посиланням.
Раніше Ларс писав про прихильність компанії Qt поліпшити продуктивність Qt, і з недавнім випуском Qt 5.12 LTS, зроблені зусилля дійсно показують це, особливо в QML. Серед покращень велика кількість була спрямована на покращення продуктивності запуску. З протестованих платформ найбільше поліпшення продуктивності при запуску було відзначено на пристрої, що тестується нами з низьким енергоспоживанням - Toradex Apalis i.MX6. Давайте розглянемо це.
Продуктивність при запуску
[![Діаграма вище показує, як можливості Qt 5.12 LTS дійсно знижує продуктивність запуску, зменшуючи час до першого кадру з 5912 мс у Qt 5.6 до всього 1258 мс у Qt 5.12.0, що на 79% менше! Це завдяки ряду нових функцій, які можна поєднати для підвищення продуктивності при запуску. Давайте пройдемося по кожному. ]
Діаграма вище показує, як можливості Qt 5.12 LTS дійсно знижує продуктивність запуску, зменшуючи час до першого кадру з 5912 мс у Qt 5.6 до всього 1258 мс у Qt 5.12.0, що на 79% менше! Це завдяки ряду нових функцій, які можна поєднати для підвищення продуктивності при запуску. Давайте пройдемося по кожному.
Шейдерний кеш впроваджений у Qt 5.9 LTS
Кеш шейдерів зберігає скомпіловані шейдери OpenGL на диск, завдяки чому можна уникнути перекомпіляції шейдерів GL при кожному виконанні.
Плюси:
зменшує час запуску та дозволяє уникнути затримки програми при виявленні нового шейдера, якщо шейдер вже знаходиться в кеші.
Мінус:
Системи з невеликим сховищем можуть іноді очищати кеш шейдерів. Якщо ваша програма використовує дуже складні шейдери і працює на малопотужному пристрої, де компіляція шейдера може призвести до небажаного часу запуску, можлива рекомендація використовувати попередньо скомпіловані шейдери, щоб уникнути проблем із кешуванням. Немає жодної різниці у продуктивності між кешованими шейдерами та попередньо скомпільованими шейдерами.
Складності використання:
ні! Цей процес є автоматичним та не вимагає виконання вручну.
Скомпільований QML
Без використання швидкого компілятора Qt, детально описаного нижче, програми QML, створені на версіях Qt до 5.9 LTS, завжди компілюватимуться під час виконання при кожному запуску програми. Залежно від розміру програми та можливостей обробки хоста, ця дія може призвести до небажано довгого часу запуску. Два поліпшення Qt тепер дозволяють значно прискорити запуск складних додатків QML. Обидва забезпечують однакове підвищення продуктивності при запуску.
Це Qt Quick Cache та попередньо згенерований QML (Qt Quick Compiler)
Qt Quick Cache - представлений у Qt 5.9 LTS
Qt Quick Cache зберігає скомпільований під час виконання QML на диск у тимчасовому місці, так що після першого запуску, коли компілюється QML, його можна безпосередньо завантажувати при наступних виконаннях замість виконання дорогих компіляцій щоразу.
Плюси : може значно прискорити складні програми з великою кількістю файлів QML.
Мінуси: якщо ваш пристрій має дуже маленький запам'ятовуючий пристрій, то операційна система може автоматично очищати кеші, що іноді призводить до несподівано довгого запуску.
Складності використання: ні! Цей процес є автоматичним та не вимагає виконання вручну.
Попередньо згенерований QML (Qt Quick Compiler) - Представлено в Qt 5.3 для комерційних ліцензіатів, як комерційних, так і з відкритим вихідним кодом, Qt 5.11
Швидкий компілятор дозволяє упаковувати та використовувати попередньо скомпільовану QML програму. Спочатку доступний за комерційною ліцензією з Qt 5.3, він доступний як для комерційних користувачів, так і для користувачів з відкритим вихідним кодом, починаючи з Qt 5.11.
Плюси: Перевага використання Quick Compiler полягає в тому, що йому не потрібно покладатися на згенерований кеш QML під час виконання, тому вам не потрібно турбуватися про несподівано довгий час запуску після того, як конкретний хост програми очистить свої тимчасові файли.
Мінуси: ні!
Складнощі використання: низькі. Дивіться відповідну документацію. Часто це так само просто, як додати qtquickcompiler до CONFIG у файлі .pro вашого проекту!Поля відстаней (Distance Fields) - впроваджено в Qt 5.12 LTS
Хоча Qt вже давно використовує поля відстаней при рендерингу шрифтів, щоб мати чистіші, чіткіші, анімовані шрифти, Qt 5.12 є методом попереднього обчислення полів відстаней.
Плюси: використання попередньо згенерованих шрифтів для поля відстані може значно знизити продуктивність при запуску при використанні складних шрифтів, таких як латинські декоративні шрифти, китайський, японський або санскрит. Якщо програма використовує багато тексту, кілька шрифтів або складні шрифти, попередня генерація полів відстані може витратити величезну кількість часу на запуск.
Мінуси: Згенеровані файли шрифтів поля відстані будуть трохи більшими на диску, ніж стандартні шрифти. Це можна оптимізувати, обравши лише ті символи, які відображатимуться у вашій програмі під час використання інструмента «Генератор полів відстаней». Не вибрані гліфи будуть розраховуватися при необхідності під час виконання.
Складнощі використання: низькі. Дивіться відповідну документацію. Ніякого додаткового коду не потрібно, і генерація полів відстані для шрифту займає секунди.Сжатые текстуры - впроваджено в Qt 5.11
Надання OpenGL стислих текстур, готових для завантаження у відеопам'ять прямо з шлюзу, позбавляє Qt необхідності готувати файли інших типів (jpg, png і т. д.) для завантаження.
Плюси: використання стислих текстур забезпечує швидший час запуску, зменшення використання пам'яті. Це може навіть трохи підвищити продуктивність, залежно від того, наскільки інтенсивно використовується ваша текстура і наскільки сильно ви використовуєте стиснення.
Мінуси: Хоча алгоритми стиснення, що використовуються для текстур, за своєю природою вимагають деякого компромісу у візуальній точності, всі схеми стиснення, крім найекстремальніших, зазвичай не будуть відчувати будь-яких видимих втрат точності. Вибір правильної схеми стиснення для використання вашої програми є важливим фактором.
Складнощі використання: низькі. Практично жодного написання коду не потрібно, потрібно лише змінити розширення файлів текстур у вашому коді qt.
Висновки
I.MX6 є відмінним представленням вбудованого обладнання середнього рівня, та покращення продуктивності, включені в Qt 5.12 LTS. Зберіть усі покращення разом, і ви дійсно зможете скоротити час запуску, необхідний для пристроїв з низьким енергоспоживанням.
З цими останніми результатами випробувань для апаратного забезпечення з низьким енергоспоживанням Qt 5.12 може допомогти вашій розробці, значно скоротивши час запуску, особливо при роботі на пристроях низького і середнього рівня. Ці нові покращення продуктивності легко впровадити, вимагаючи лише незначних змін у вашій кодовій базі, тому є дуже мало причин не відразу починати використовувати Qt 5.12, особливо якщо ваш проект втисне важкі програми QML в SoC маленького розміру. Нижче наведена таблиця є показником того, що можливо з Qt 5.12 LTS.