ChimbaBench 1.0: Разрабатываю первую версию бенчмарка
Предисловие
Ранее я решил, что буду разрабатывать несколько версий бенчмарка, основную ChimbaBench на основе OpenGL 3.0 (Godot Engine 3.5.2), и ChimbaBench Vulkan на основе Vulkan API (Godot Engine 4.0).
реклама
Сейчас я как раз буду работать над основной версией ChimbaBench (OpenGL), сразу скажу, у меня нет никакого технического задания и конкретного плана, я начал разработку по принципу "захотел - сделал", мне просто нужен удобный инструмент для сравнения производительности разных систем, и я делаю этот инструмент.
Что мне собственно нужно? Да ничего особого, мне просто нужен бенчмарк, который я смогу запустить без линуксоидного мракобесия с репозиториями и зависимостями.
Так я и начал разработку ChimbaBench, раз линуксоиды не способны на разработку дружелюбного к пользователю софта (User-Friendly), значит это буду делать я, надоели уже со своим гнилым линуксоидным зоопарком, одно обновилось - другое сломалось, третье отвалилось, и танцуй над бубном как хочешь...
реклама
-
Размышления
Так как я разрабатываю новый проект, есть смысл подумать над его реализацией.
Конечно же разрабатывать проект буду в Godot Engine 3.5.2, ибо я хочу максимальный охват устройств, а Godot Engine 4.0 такое не позволяет реализовать, ибо он заточен для работы с Vulkan API в основном.
реклама
Первым делом нужно настроить проект, и я предусматриваю возможность работы с OpenGL 2.0 если система не поддерживает OpenGL 3.0, но здесь есть важный нюанс, при откате до OpenGL 2.0 проект может работать не так как должен, потому в будущем я возможно уберу возможность отката до предыдущей версии API.
Да и вообще, настройки могут быть изменены в процессе разработки, так что особо не буду заострять внимание на настройках проекта.
А чтобы проект не был пустой, я набросал небольшую сцену.
реклама
На этом этапе важно начать формирование структуры каталогов, чтобы в будущем всё не валялось в одной куче.
У каждого разработчика есть свои предпочтения, не спорю, но мои предпочтения сейчас такие, и могут быть изменены в будущем, не нравится - сделайте своё, я никому не мешаю разрабатывать софт.
Дальше смотрим один забавный комментарий оставленный под одной из моих прошлых статей, не знаю пока про какие он там ключи дешифровки и CSV файлы говорит, но почему бы не предоставить пользователям возможность переводить приложение на разные языки?
Вообще вынести локализацию в отдельный файл не проблема при использовании Godot Engine, проблема совсем не в том, чтобы предоставить возможность пользователям переводить приложение, проблема гораздо банальнее, она закралась в шрифтах:
Думаете легко найти подходящий шрифт для работы с разными языками? Думаете у разработчиков есть желание подтягивать сотню разных шрифтов под каждый язык? Да еще следить, чтобы каждый шрифт выглядел вменяемо, и ничего не поплыло никуда...
Мало предоставить пользователю файл и сказать, вот вам файл, берите и переводите... Нет, так не работает.
Одно дело разные кодировки, но совсем другое дело шрифты, можно конечно и выбор шрифта оставить на плечи пользователей, чтобы вручную качали и устанавливали в приложение подходящие шрифты, но разве это выход? Думаю нет, хотя всякое возможно...
Что там дальше, само собой все настройки приложения обязаны быть вместе с приложением в одной папке, я не собираюсь заставлять пользователя танцевать над бубном в поисках файла настроек, линуксоиды конечно вскрикнут из унитаза, но я скажу так, пользователь не обязан изучать операционную систему, чтобы нормально использовать моё приложение.
В Linux дистрибутивах и без меня бурлит болото зависимостей, чтобы не кричали линуксоиды, я не собираюсь разводить помойку в операционных системах обычных пользователей, тем более мне самому ещё использовать свой софт.
Хотя с настройками в среде Android могут возникнуть сложности, ведь я хочу чтобы пользователь имел доступ к файлам настроек, но с этим разберусь по ходу дела как-нибудь.
В общем хватит болтовни, пора работать над проектом.
-
--
---
Выбор шрифта
В проекте Chi Calculator я использовал шрифт FreeMono (FreeMonospaced), в принципе для работы с русским и английским языком его хватало, но не для проекта с поддержкой множества языков...
В итоге я нашел несколько подходящих для проекта шрифтов, Determination2 (Anonymous) и Xarrovv Font (Dmitri Zdorov). Очевидно, что для проекта я выбрал шрифт Determination2, ибо он поддерживает больше языков, но и шрифт Xarrovv я оставлю в проекте, ибо он может быть полезен.
![]() |
![]() |
Так гораздо лучше:
Раз уж я начал думать о поддержке разных языков, неплохо бы создать тест для шрифтов.
Здесь то меня и ждал подвох, выбранные шрифты плохо переносят разные языки... Конечно, шрифт Determination2 гораздо лучше справился, чем Xarrovv, но китайцы явно будут не в восторге от "прозрачных" иероглифов, ибо некоторые иероглифы нормально видны, но некоторые вообще не видны.
![]() |
![]() |
Эй, диванные переводчики, как вы собрались переводить проекты на другие языки, когда используемые шрифты просто не поддерживают ряд языков? Действительно ли, какие-то там ключи шифрования и CSV файлы главная проблема перевода?
Да и если разработчик настолько озабоченный, и всеми силами препятствует пользователям переводить его проект, то может ну его нафиг, такого разработчика и его софт?
В итоге я решил подойти к проблеме с другой стороны, было бы хорошо одним шрифтом поддерживать все языки, но суровая реальность не позволяет, потому я просто задействую Determination2 в качестве основного шрифта, и предоставлю пользователю возможность выбрать свой шрифт.
Таким образом появились две кнопки, они меняют шрифт, и как можно заметить, это сработало:
![]() |
![]() |
Осталось это дело сделать удобным для конечного пользователя, хотя вряд ли я это сделаю в пределах текущей статьи...
На предыдущем скриншоте я назначал шрифт с помощью add_font_override, но можно немного иначе это сделать, просто задать параметр объекту через "set".
Попутно я добавил шрифт "по умолчанию" в функции _ready, код выглядит весьма скверно, но разве это будет волновать обычного пользователя? Кому будет дело до того, что там "под капотом" если оно работает и выполняет задачу?
Пока работает - всё хорошо!
А вообще это всё очень нехорошо, я же тест производительности вроде собирался разрабатывать, а разные шрифты будут по-разному влиять на производительность, а значит и разные результаты будут у системы при использовании разных шрифтов...
Впрочем, функционал для смены шрифтов весьма полезен, и было бы глупо лишать пользователей такого функционала, а решить проблему можно используя один стандартный шрифт, просто выводить в информации текущий используемый шрифт.
Конечно, стандартные шрифты будут в пакете ресурсов самого бенчмарка упакованы, но можно ведь загружать шрифты находящиеся рядом с исполняемым файлом:
Только есть небольшая проблема, мой текущий код работает только при запуске скомпилированного приложения, при запуске в редакторе Godot всё идет мягко говоря не по плану, ибо исполняемый путь в таком случае это путь исполняемого файла Godot Engine, а не проекта.
Я не просто так оставил условие для проверки наличия папки "Font", и при её отсутствии создание данной папки, ведь приложение создало папку там, где исполняемый файл Godot Engine, и это наглядно показывает, что работа с файлами может быть весьма небезопасным занятием.
Так как мне не нужно создавать папки, я могу вполне спокойно убрать данный функционал, теперь если приложение не находит папку, то загружает стандартный шрифт, но это не решает проблему загрузки несуществующего файла при наличии папки...
Впрочем, эта проблема решаема проверкой "file_exists", теперь даже при наличии папки, шрифт не будет загружен если он отсутствует в папке, осталось только сделать настройку для выбора нужного шрифта, хотя нет, ведь настройку нужно сохранять, а это снова писать код для работы с файлами...
Что-то моя статья превратилась в какой-то самоучитель...
Пожалуй на этом пора заканчивать, пора бы скомпилировать проект и выложить в репозиторий GitHub, но он уже весит более 100 МиБ, а это очень плохо, что же там так много весит?
Да, это шрифты от Google, таких три папки под разные языки, и это дело весит 102 МиБ вместе взятое, по ~26 МиБ на японский и корейский языки, и чуть больше 48 МиБ на китайский...
Извините, но тут уж как-нибудь сами, без меня, я не собирают такой объем держать в проекте ради китайского языка, без обид.
Если бы в файле шрифта содержались все языки вместе взятые, и этот файл весил несколько сотен МиБ, я бы еще подумал в таком случае, ибо потратить много места ради поддержки всех языков разом вполне целесообразно, но лишний раз тратить место на неполноценную поддержку языков, извольте.
Так уже гораздо лучше:
Дальше настраиваю шаблоны экспорта, и экспортирую проект под разные платформы:
Проверять работоспособность я уже буду на следующий день, а то ночевать буду занимаясь бенчмарком и попутным написанием статьи...
Вот и настало утро, и я понял, что рановато проверять свой бенчмарк на разных устройствах и операционных системах, ведь я забыл самое главное...
Теперь видно сколько FPS, название и версия бенчмарка, и количество вызовов отрисовки, для начала сойдет:
Создаю файл с историей изменений:
Снова компилирую проект под разные платформы:
Отправляю проект в репозиторий GitHub (исходный код), добавляю папку ".import" в игнор, чтобы GitHub не отправлял этот мусор в репозиторий:
Да, я еще даже не проверил проект на работоспособность, а уже синхронизирую с репозиторием, впрочем, ничего страшного, еще успею проверить.
Ставлю на загрузку первый выпуск, и нужно будет поправить названия папок в шаблонах экспорта, ибо мне пришлось переименовывать вручную всё, а оно мне нужно? Пусть само собирает сразу куда нужно, но это в следующей версии.
Пока загружались файлы на GitHub я проверил два смартфона, Lenovo P70-A и Xiaomi MI8, они ограничились вертикальной синхронизацией, хотя она отключена в настройках проекта, тут скорее всего уже виноват композитор Android который принуждает к вертикальной синхронизации.
Нужно будет подумать над принуждением уже самого композитора к отключению вертикальной синхронизации...
![]() |
![]() |
В среде Windows проблем никаких, всё работает как положено:
Далее Ubuntu 13.04, так как я делал совместимость с OpenGL 2.0, скорее всего дистрибутив откатился именно на эту версию API, но я забыл вывести используемую версию API, потому я не знаю в каком именно режиме работает сейчас бенчмарк
![]() |
![]() |
Далее Fedora Workstation 37, если отключить 3D ускорение в настройках виртуальной машины, то бенчмарк работает нормально, хоть и с низким FPS, даже ниже чем в древней Ubuntu 13.04, но если включить 3D ускорение, то ничего хорошего не происходит, Fedora смогла только в интерфейс бенчмарка...
Я конечно понимаю, драйвер графики у VirtualBox весьма паршивый, как и большинство "свободного ПО", но чтобы не суметь в OpenGL 3.0...
А еще в среде Fedora шрифт из папки "Font" не загрузился, хотя в других дистрибутивах он загружается нормально, да и в Fedora путь к шрифту явно правильно прописался, что видно по строчке в самом низу.
![]() |
![]() |
Неужели эти все проблемы благодаря чудесному Wayland? Да нет, линуксоиды голос надрывая кричат, какой Wayland прекрасный, и что проблемы у всех вокруг, но только не у святого Wayland...
Далее Simply Linux 10.1, и он явно производительнее Федоры справился с бенчмарком, хотя версия LLVM явно более старая, неужели в 15 версии LVMM все так плохо, что 11 версия показывает на ~34% больше FPS? Хотя LLVM 3.2 вообще показывал 43 FPS, но там часть окна была за пределами рабочего стола, так что не буду сравнивать напрямую.
Какая-то деградация производительности происходит с каждой новой версией LLVM, весьма неприятный факт однако, впрочем, для полноценных тестов нужно устанавливать дистрибутивы на реальный ПК, а не виртуальную машину.
![]() |
![]() |
-
--
---
Заключение
Пожалуй на этом завершу статью, первая версия ChimbaBench наконец выпущена.
Осталось подумать как работать над Vulkan версией ChimbaBench, ведь нельзя просто взять и перенести старый код в новую IDE, да и накладно будет постоянно адаптировать код созданный для OpenGL версии, под Vulkan.
Ресурсы конечно можно перенести из основной версии проекта во второстепенную, но код всё же лучше писать новый, иначе выйдет весьма странный мутант...
Сейчас бенчмарк весьма неидеален, но чего вы ожидали от первого наброска?
Так или иначе начало положено, осталось только набрасывать код и выпускать новые версии бенчмарка.
Чуть не забыл, ссылка на репозиторий: ( github.com/Shedou/ChimbaBench ).
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Бодрый доширак выходит на сцену!
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила