Я работаю над переносным графическим интерфейсом для Linux и Windows и сталкивался с некоторой проблемой производительности. На нескольких системах (как мой нетбук, основанный на печально известной Intel GMA 3650) очень сильно влияет установленный драйвер.X11 GUI performance
Но каков парадокс, когда установлен резервный драйвер VESA, производительность моего кода намного выше, чем у выделенного проприетарного драйвера.
С другой стороны, с проприетарным водителем, , как и ожидалось Производительность компьютера очень хорошая. Аппаратное ускорение работает, видео высокой четкости воспроизводятся без проблем, и таким образом только мой код затрагивается в этом странном обратном порядке.
Мой код использует общие библиотеки, как Xlib, Xft, Pthreads и т.д.
Порт Windows (использует WinApi) работает в большой скорости без каких-либо проблем. Даже в Вине. Как еще один парадокс, та же самая программа, скомпилированная для Windows и работающая в WINE, рисуется намного быстрее, чем компилированная программа Linux.
Что может быть причиной этого эффекта и где его нужно копать, чтобы исправить это.
Репозиторий исходный код managed by fossil scm
Один тестовый пример в trunk/freshlib/TestFreshLib.fpr
(для простого FASM компилировать freshlib/test_code0/TestLib.asm
)
Это портативный пример и может быть скомпилирован для Windows, и Linux, а также.
Обновление 1: После некоторой мысли и изучения кода у меня есть гипотеза. Я использую два разных метода для рисования графики на окнах:
- Использование функций рисования XLib для рисования линий и прямоугольников.
- Использование библиотеки Xft для рисования текстов.
Элементы управления, которые я тестирую, используют двойную буферизацию, где буфер изображения представляет собой pixmap на стороне сервера.
Но IIRC, Xft рисует на стороне клиента, а затем отправляет изображение в виде растрового изображения на X-сервер, в то время как XLib рисует непосредственно на стороне сервера.
Возможно ли возникнуть конфликт между этими двумя методами (и каким-то соединением с аппаратным ускорением), чтобы вызвать ухудшение производительности?
Это звучит невероятно. Вы можете выделить проблему в SSCCE? –
Что такое SSCCE? Заметьте, я не специалист по программированию на C/C++ или даже Linux/X11. :) – johnfound
А, я понял: «Короткий, самосохраненный, правильный, пример». Но, к сожалению, нет. Я могу, конечно, указать вас в репозиторий - это открытый исходный код, но есть довольно большой набор файлов, и я не знаю, где искать проблему. (и это на языке ассемблера :)) – johnfound