Russian Qt Forum
Ноябрь 23, 2024, 07:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятное падение FPS при анимации  (Прочитано 8137 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Март 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++ кода... Будет ли профит?  Улыбающийся
« Последнее редактирование: Март 04, 2015, 18:54 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Март 04, 2015, 17:51 »

У меня под дебагом в профилировщике FPS в районе 60. onPaint ~600микросекунд. Тормозов я не заметил никаких.

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

Гугль в помощь
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Март 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..  Шокированный
« Последнее редактирование: Март 04, 2015, 18:54 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
nwnclv
Гость
« Ответ #3 : Март 05, 2015, 00:48 »

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

debian, графика intel.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Март 05, 2015, 11:24 »

Цитировать
Я правда не понял, что там должно произойти, там просто какая-то цветная секция туда-сюда прыгает.

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

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

Везет линуксойдам. Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #5 : Март 05, 2015, 13:31 »

Аналогично никаких падений не заметно, на взгляд  где то 20-30 fps.
W7 x64, intel i5, nvidia

PS а чем можно fps мерить? как то не сталкивался с такой задачей, просто интересно Улыбающийся
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #6 : Март 05, 2015, 15:46 »

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

Гугль в помощь
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Март 05, 2015, 16:35 »

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

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

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

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


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

Записан

ArchLinux x86_64 / Win10 64 bit
nwnclv
Гость
« Ответ #8 : Март 05, 2015, 21:10 »

Развернул, прогнал на полную.

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

Кстати при развороте у меня странный баг при отрисовке возник ...  Часть спидометра как бы не активна.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Март 05, 2015, 21:44 »

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

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

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

Не знаю.. Не видел.
Записан

ArchLinux x86_64 / Win10 64 bit
nwnclv
Гость
« Ответ #10 : Март 05, 2015, 21:51 »

а, вижу. В среднем 50 FPS на полном экране. В самом начале есть желтый прямоугольник с 23, но это скорее всего момент разворота.

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

Как-то так. Вот активная область обведена, все остальное не прорисовывается.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Март 06, 2015, 11:30 »

Цитировать
а, вижу. В среднем 50 FPS на полном экране.

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

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

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


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

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

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Март 07, 2015, 21:55 »

В общем.. Обошел это, наштамповав нужных картинок (в гимпе и фотошопе не умею, поэтому писал код, который рисует картинки, а потом их сохранял в файлы  Улыбающийся ). И теперь просто вращаю нужные картинки.. FPS на уровне 50-60..
Записан

ArchLinux x86_64 / Win10 64 bit
carrygun
Гость
« Ответ #13 : Март 10, 2015, 05:31 »

И кстати, кажется что в QML метод ctx.arc() рисует неправильные окружности..

arc() рисует сплайнами, рисовать окружности толстой линией - немного неправильно. Правильно рисовать путь и заливать его, тогда окружности круглые  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 24.