Russian Qt Forum

Qt => Qt Quick => Тема начата: kuzulis от Март 04, 2015, 16:52



Название: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 04, 2015, 16:52
Всем доброго времени.

Мне нужно полностью отрисовывать некий измеритель (спидометр и прочее) который будет иметь сложную анимацию и кучу градиентов.
Использовать фоновые картинки врятли получится, поэтому все нужно рисовать самому.

Заметил странную тенденцию падения FPS при анимациях..

Например, имею последовательную анимацию изменения некоторого значения от минимума до максимума и обратно.
При изменени этого значения отрисовывается прогресс - дуга окружности с градиентом: что-то вроде поворота на заданный угол
в зависимости от текущего значения параметра. Измеритель имеет несколько дуг окружностей с разнами радиусами.

Обработчик onPaint() прибинжен на проперти текущего значения: при изменении текущего значения вся сцена будет перерисована.

Так вот, если перерисовывать все прогрессы в onPaint() - то FPS низкая: ~13-14 FPS, и onPaint() вызывается где-то раз в 60-70 мсек..
Но если оставить отрисовку только одного прогресса - то она повышается до ~30-40 FPS и onPaint() вызывается где-то раз в 30 мсек..

Все эти замеры делаю в QML профилировщике.. При этом, там видно что каждый onPaint() (со всеми рисовалками и прочим кодом)
занимает около 3,5 мсек времени..

Отсюда вопрос: какого хрена onPaint() вызывается реже? С какого перепугу?
Ведь фактически максимальная FPS может достигать 200 FPS (при задержке каждого onPaint() даже в 5 мсек..)

Такая ситуевина меня вообще не радует.. Елки..

Проект приаттачиваю :)

PS: Там надо кликнуть по счене мышкой для запуска анимации..
PSPS: Используется Qt 5.4.0 / Windowsx32 / MinGW

PSPSPS: Блин, вопрос: что будет если рисовать из C++ кода... Будет ли профит?  :)


Название: Re: Непонятное падение FPS при анимации
Отправлено: navrocky от Март 04, 2015, 17:51
У меня под дебагом в профилировщике FPS в районе 60. onPaint ~600микросекунд. Тормозов я не заметил никаких.

openSuse x64, ноутбучный i7, интелловское видео.


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 04, 2015, 18:43
Обновил проект.. Добавил еще одно кольцо.. И FPS иногда падает до 8-ми.. >:(

PS: Теперь на Qt 5.4.0 / MSVC2013 / Windows8x32 / Radeon 3000

UPD: А используя Qt 5.4.0 / MinGW / так вообще почти всегда 8 FPS.. 
UPD2: А если развернуть на весь экран - то падает до 5 FPS..  :o


Название: Re: Непонятное падение FPS при анимации
Отправлено: nwnclv от Март 05, 2015, 00:48
У меня норм отрисовывается. Я правда не понял, что там должно произойти, там просто какая-то цветная секция туда-сюда прыгает. Но довольно плавно и быстро

debian, графика intel.


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 05, 2015, 11:24
Цитировать
Я правда не понял, что там должно произойти, там просто какая-то цветная секция туда-сюда прыгает.

Ну да.. я об этом же писал выше..  там три секции (прогресс-бара) прыгают. :)

Цитировать
Но довольно плавно и быстро
debian, графика intel.

Везет линуксойдам. :)


Название: Re: Непонятное падение FPS при анимации
Отправлено: Bepec от Март 05, 2015, 13:31
Аналогично никаких падений не заметно, на взгляд  где то 20-30 fps.
W7 x64, intel i5, nvidia

PS а чем можно fps мерить? как то не сталкивался с такой задачей, просто интересно :)


Название: Re: Непонятное падение FPS при анимации
Отправлено: navrocky от Март 05, 2015, 15:46
Дрова то хоть стоят? Может оно у тебя при запуске откатилось до llvmpipe драйвера?


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 05, 2015, 16:35
Цитата: Bepec
PS а чем можно fps мерить? как то не сталкивался с такой задачей, просто интересно

Там в QtCreator встроен QML профайлер (нужно кликнуть по иконке "Analyse" - такая, с мониторчиком с сеткой).
Вот это самый профайлер и показывает все.

Цитата: navrocky
Дрова то хоть стоят? Может оно у тебя при запуске откатилось до llvmpipe драйвера?

Конечно стоят.. Без дров оно просто не запустится. Т.к. требуется OpenGL > 2.0 (у меня 3.1).


А в тестах вы на весь экран разворачиваете?



Название: Re: Непонятное падение FPS при анимации
Отправлено: nwnclv от Март 05, 2015, 21:10
Развернул, прогнал на полную.

Профилировщик запустил, где тут FPS смотреть?

Кстати при развороте у меня странный баг при отрисовке возник ...  Часть спидометра как бы не активна.


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 05, 2015, 21:44
Цитировать
Профилировщик запустил, где тут FPS смотреть?

На графике, вверху.. Будет или зеденая или оранжевая или красная полоски .. Нужно туда кликнуть и там среди других параметров будет стоять FPS.
Собственно, зеленым цветом отображается если все ОК (хватает FPS) и цвет меняется вплоть до красного (темно-оранжевого) - если FPS мал.

Цитировать
Часть спидометра как бы не активна.

Не знаю.. Не видел.


Название: Re: Непонятное падение FPS при анимации
Отправлено: nwnclv от Март 05, 2015, 21:51
а, вижу. В среднем 50 FPS на полном экране. В самом начале есть желтый прямоугольник с 23, но это скорее всего момент разворота.

Цитировать
Не знаю.. Не видел.
https://dl.dropboxusercontent.com/u/22107199/qml.png

Как-то так. Вот активная область обведена, все остальное не прорисовывается.


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 06, 2015, 11:30
Цитировать
а, вижу. В среднем 50 FPS на полном экране.

Эх. везет вам с аппаратной частью.

Цитировать
Как-то так. Вот активная область обведена, все остальное не прорисовывается.

У меня такого не наблюдается.


И кстати, кажется что в QML метод ctx.arc() рисует неправильные окружности.. Так же как его однофомилец из C++ (из пайнтера).
Симптомы такие же как и в: http://stackoverflow.com/questions/17118967/drawarc-are-not-drawen-correctly-qt-c.

PS: ГЫ.. ппц.. сколько мороки с графикой в Qt.. Знал бы это - соскочил бы на что-то другое.


Название: Re: Непонятное падение FPS при анимации
Отправлено: kuzulis от Март 07, 2015, 21:55
В общем.. Обошел это, наштамповав нужных картинок (в гимпе и фотошопе не умею, поэтому писал код, который рисует картинки, а потом их сохранял в файлы  :) ). И теперь просто вращаю нужные картинки.. FPS на уровне 50-60..


Название: Re: Непонятное падение FPS при анимации
Отправлено: carrygun от Март 10, 2015, 05:31
И кстати, кажется что в QML метод ctx.arc() рисует неправильные окружности..

arc() рисует сплайнами, рисовать окружности толстой линией - немного неправильно. Правильно рисовать путь и заливать его, тогда окружности круглые  :)