Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB

Qt 5.12 LTS - путь к более быстрому запуску приложений QML

QML, Qt, Quick

Компания Qt уже давно использует такие тесты, как QMLBench, которые помогают нам узнать, когда изменение вызывает снижение производительности, но также важно видеть, как Qt работает на более высоком уровне, позволяя компонентам взаимодействовать таким образом, чего детальные тесты, такие как QMLBench не могут нам показать этого. В этой статье мы рассмотрим результаты тестирования запуска нового приложения из более реального приложения для тестирования QML.

Бенчмарк

Для этих тестов было разработано относительно простое приложение QML, которое использует множество объектов QtDeclarative и QtGraphicalEffects. Код приложения был написан, так как бы его написал обычный разработчик без оптимизации запуска, потребления памяти или производительности. Поскольку мы проводим сравнительный анализ, то приложение не использует интерактивные элементы или пользовательский ввод. Приложение имеет низкую сложность, без расходящейся логики, поэтому результаты как можно более согласованы между запусками теста. Хотя ни один эталонный тест не сможет действительно имитировать реальную производительность при взаимодействии с пользователем, а обсуждаемый тест направлен на более точное представление реальной рабочей нагрузки QML, чем QMLBench или пример «Galery» QtQuickControls.

Тестовое приложение. Оно объединяет текстуры, анимацию, формы QML, повторители, сложный текст, эффекты частиц и шейдеры GL для имитации более тяжелого, более реального приложения, чем другие тесты QML, такие как QMLBench.

Тестовое приложение. Оно объединяет текстуры, анимацию, формы QML, повторители, сложный текст, эффекты частиц и шейдеры GL для имитации более тяжелого, более реального приложения, чем другие тесты QML, такие как QMLBench.

Загрузить исходный код можно по ссылке.

Ранее Ларс писал о приверженности компании Qt улучшению производительности Qt, и с недавним выпуском Qt 5.12 LTS, предпринятые усилия действительно показывают это, особенно в QML. Среди улучшений большое количество было направлено на улучшение производительности запуска. Из протестированных платформ наибольшее улучшение производительности при запуске было отмечено на тестируемом нами устройстве с низким энергопотреблением - Toradex Apalis i.MX6. Давайте рассмотрим это.

Производительность при запуске

Диаграмма выше показывает, как возможности Qt 5.12 LTS действительно снижаeт производительность запуска, уменьшая время до первого кадра с 5912 мс в Qt 5.6 до всего 1258 мс в Qt 5.12.0, что на 79% меньше! Это благодаря ряду новых функций, которые можно объединить для повышения производительности при запуске. Давайте пройдемся по каждому.

Диаграмма выше показывает, как возможности Qt 5.12 LTS действительно снижаeт производительность запуска, уменьшая время до первого кадра с 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.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
МБ
April 21, 2019, 9:40 a.m.
Моисей Бушуев

Qt - Test 001. Signals and slots

  • Result:0points,
  • Rating points-10
AA
April 17, 2019, 7:40 p.m.
Anton Ablin

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
E
April 17, 2019, 6:16 p.m.
Evgeny

Qt - Test 001. Signals and slots

  • Result:100points,
  • Rating points10
Last comments
April 21, 2019, 4:22 p.m.
Евгений Легоцкой

Через метод setIcon table.horizontalHeaderItem(0).setIcon("qrc://path/to/icon.png")
April 21, 2019, 3:48 p.m.
Евгений Легоцкой

Добрый день! Спасибо за комментарий. Там действительно лучше будет сделать с инициализацией по умолчанию.
U
April 18, 2019, 3:37 p.m.
Unreal_man

А как иконку в хедер задать?
u
April 18, 2019, 2:15 a.m.
uaa

доброго времени,большое спасибо за пример для начинающего)при адаптации к своему проекту столкнулся с таким ньансом:в vepolyline.h в 47 строке нужна инициализация по умолчанию: int m_pointF...
E
April 11, 2019, 12:49 p.m.
Evgeny

Спасибо за ответ) У меня компоновщик на нее ругался просто. Оказалось, просто забыл Q_OBJECT в начале класса указать.
Now discuss on the forum
April 23, 2019, 6:39 p.m.
BlinCT

Вопрос закрыт) проблема найдена
April 21, 2019, 4:16 p.m.
Евгений Легоцкой

Приветствую Нужно сохранять где-то выбранное значение, а потом восстанавливать его. Или использовать QSettings или добавить метод open(), в который передавать начальные значения для того...
R
April 19, 2019, 9:55 a.m.
RED_Spider

мені важко це зараз навіть перевірити, тому що знайшов коміт, це ще було в 2016 році, і цей код не буде працювати коректно зараз, єдине скажу що це були QThread
i
April 17, 2019, 3:03 p.m.
ilya.guzikov

BlinCT, на стороне ++ это делать необходимо так как в qml при использовании функции append происходит перерисовка всех точек лини(как я понимаю) и из-за этого при использовании больших массиво...
Join us in social networks

For registered users on the site there is a minimum amount of advertising