LINUX.ORG.RU

SDL_Flip high CPU load

 ,


0

1

Ткните меня пожалуста носом.

Есть у меня маленькая, никому не нужная поделка на SDL: link, link, которуя я иногда под настроение пилю и запускаю.

Всё в принципе работает как надо, но заметил странный баг. Раз от разу оно кушает то 5% CPU, то 85%. Причём во втором случае 80% из 85%-и съедает X11.

Методом научного тыка определил, что проблема в SDL_Flip. Т.е. чтение данных, FFT, прорисовка в буфер, SDL_PoolEvent практически не создают нагрузку. А вот конечный SDL_Flip то так, то эдак.

Драйвер: i915 — на него на данный момент и грешу, но смущает, что другие SDL программы этой проблемы вроде не имеют.

А теперь вопрос: где я слона не приметил?

★★★★★

Последнее исправление: beastie (всего исправлений: 1)

УМВР;)

Кстати, заметь, что если не стоит флага SDL_DOUBLEDUF и вроде SDL_HWSURFACE, что SDL_Flip вызывает обычный SDL_UpdateRect (или как-то так)

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

Оба указаны, но игнорируются. Меня смущает такой странный разброс в нагрузке. Если бы оно было всегда на 30-50% — то чёрт с ним. Но так: то 5, то 95 — o_O.

beastie ★★★★★
() автор топика
Ответ на: комментарий от beastie

Да, и я дико извиняюсь, но есть SDL_WM_ToggleFullScreen. Или хотя бы освободи ресурсы, когда f жмыхаешь. И quit обработай верно.

Оба указаны, но игнорируются.

Странно. Ну тогда если UpdateRect вписать, то должно быть всё то же самое. Попробуй, если хочешь.

amphibrakhij
()
Ответ на: комментарий от beastie

А ещё у тебя отрисовка, как я понял, идет в while(!die) без какой-либо паузы. Это нехорошо. Запили ограничитель fps (готовый есть в SDL_gfx)

amphibrakhij
()
Ответ на: комментарий от amphibrakhij

если UpdateRect вписать

Уже пробовал, тоже самое.

есть SDL_WM_ToggleFullScreen

Изменил.

А ещё у тебя отрисовка, как я понял, идет в while(!die) без какой-либо паузы.

sio_read — блокирующий, но может быть проблема и в этом.

beastie ★★★★★
() автор топика
Ответ на: комментарий от x0r

Интернеты я уже перерыл. Если оно и в самом деле vsync ждёт, то я не знаю, как с ним ссинхронизироваться.

beastie ★★★★★
() автор топика
Ответ на: комментарий от x0r

Если я ничего не путаю, то хардварный рендеринг возможен только в fullscreen модусе. Нужные флаги то я ставлю, но они игнораятся (проверял).

Со скоростью я в принципе доволен, меня только смущает такой сильный разброс в производительности. Или всё работает гладко и жрёт не больше 5-10% или всё дёргается и жрёт 85-95%. o_O При этом вся нагрузка идёт от X11.

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от amphibrakhij

Добавил framerate manager, вроде слегка полегчало. Спасибо, топик закрываю.

beastie ★★★★★
() автор топика
6 июня 2013 г.

История успеха

Выкинул SDL, переписал на Xlib. Load програмы: 0.00%, load X11 ~4.00%. Вот так вот.

beastie ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.